2017-05-03 19 views
3

プログラミングに慣れていないので、解決策を探すのに多くの時間を費やしていますが、 私はいくつかの測定データセットを辞書に保存しています。私は、測定データからのすべての曲線が表示されるグラフをプロットして作成したいと考えています。私は空のグラフを作成し、辞書を反復し、2つの格納されたdataFramesの2つの列を各キーのグラフにトレースとして追加しようとしています。PythonとPlotly offline:グラフを作成(空)し、forループでトレースを追加する

私は間違っていますか、どうすれば他の方法で対応できますか?私がこれまで持っているコードで

import plotly as py 
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot 
import plotly.graph_objs as go  

figure1 = go.Figure() 

for key in dictofdf: 
trace1 = go.Scatter(
         y=df_1['force'], 
         x=df_1['displacement'], 
         mode='line', 
         marker=go.Marker(color='rgb(255, 127, 14)'), 
         name='load' 
        ) 

    trace2 = go.Scatter(
         y=df_2['force'], 
         x=df_2['displacement'], 
         mode='line', 
         marker=go.Marker(color='rgb(55, 137, 3)'), 
         name='unload' 
        ) 

    figure1.append_trace(trace1,1,1) 
    figure1.append_trace(trace2,1,1) 

py.offline.iplot(figure1, filename='force-displacement-data', image='jpeg') 

、私はエラーPlotlyで

--------------------------------------------------------------------------- TypeError         Traceback (most recent call 
last) <ipython-input-42-4ea5d9b8a638> in <module>() 
     50      ) 
     51 
---> 52  figure1.append_trace(trace1,1,1) 
     53  figure1.append_trace(trace2,1,1) 
     54 

C:\Users\xxxxx\Anaconda3\lib\site-packages\plotly\graph_objs\graph_objs.py 
in append_trace(self, trace, row, col) 
    914        "Note: the starting cell is (1, 1)") 
    915   try: 
--> 916    ref = grid_ref[row-1][col-1] 
    917   except IndexError: 
    918    raise Exception("The (row, col) pair sent is out of range. " 

TypeError: 'NoneType' object is not subscriptable 

答えて

1
  • append_tracesubplotsのためではなく、定期的なFigureのために働く取得します。
  • あなたは辞書キーを繰り返していますが、キーの1つを使用することはありません。各キーに同じ値をプロットしています。以下の例では、keyがトレースに使用されます。トレースはnameです。

enter image description here

import plotly 
plotly.offline.init_notebook_mode() 

figure1 = plotly.tools.make_subplots(rows=1, cols=2) 

dictofdf = {'measurement1': {'df_1': {'displacement': [1, 2, 3], 
             'force': [1, 3, 6]}, 
          'df_2': {'displacement': [1, 3, 6], 
             'force': [5, 7, 9]} 
          }, 
      'measurement2': {'df_1': {'displacement': [1, 4, 5], 
             'force': [8, 10 , 12]}, 
          'df_2': {'displacement': [1, 4, 6], 
             'force': [7, 8, 9]} 
          } 
      } 
for key in dictofdf: 
    trace1 = plotly.graph_objs.Scatter(
         y=dictofdf[key]['df_1']['force'], 
         x=dictofdf[key]['df_1']['displacement'], 
         mode='line', 
         marker=plotly.graph_objs.Marker(color='rgb(255, 127, 14)'), 
         name='{}: load'.format(key) 
        ) 

    trace2 = plotly.graph_objs.Scatter(
         y=dictofdf[key]['df_2']['force'], 
         x=dictofdf[key]['df_2']['displacement'], 
         mode='line', 
         marker=plotly.graph_objs.Marker(color='rgb(55, 137, 3)'), 
         name='{}: unload'.format(key) 
        ) 

    figure1.append_trace(trace1, 1, 1) 
    figure1.append_trace(trace2, 1, 2) 
plotly.offline.iplot(figure1) 
+0

あなたの答えをありがとう!私はそれが陰謀でうまくいかない場合、このプロットを作るために他の可能性を探します。あなたが親切に提案したコードを試してみると、次のようなエラーが出ます: '... ---> 37 y = dictofdf [key] [['df_1'] ['force']]、 38 x = dictofdf [39 mode = 'line'、 TypeError:リストインデックスは、strでない整数またはスライスでなければなりません。 – MGS

+0

投稿コードをもう一度試してみてください。うまくいくはずです。あなたのスニペットに二重括弧があります。辞書/リストを正しくスライスしていることを確認してください。 –

+0

Hm、ok ...エラーメッセージが表示されたら、二重括弧を挿入して、それが役立つかどうかを確認しました。ここにコードを投稿する前に、それらを削除するのを忘れてしまった。 – MGS

関連する問題