【问题标题】:Python and Plotly offline: create (empty) graph and add traces with for-loopPython 和 Plotly 离线:创建(空)图并使用 for 循环添加跟踪
【发布时间】:2017-05-03 12:01:08
【问题描述】:

我是编程新手,我花了很多时间寻找解决方案,但我似乎无法正确解决。 我有一些存储在字典中的测量数据集。我想创建一个图表,其中显示了来自测量数据的所有曲线。我正在尝试创建一个空图,然后遍历字典并将两个存储的 dataFrame 的两列添加为每个键的图的跟踪。

我做错了什么或者我该怎么做?

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')

使用我目前的代码,我得到了错误

--------------------------------------------------------------------------- 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

【问题讨论】:

    标签: python plotly diagram


    【解决方案1】:
    • Plotly 中的 append_trace 适用于 subplots,但不适用于常规 Figures。
    • 您正在迭代您的字典键,但您从不使用其中一个键,您为每个键绘制相同的值。在下面的示例中,key 用于name 跟踪。

    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)
    

    【讨论】:

    • 感谢您的回答!如果它在情节上不起作用,我会寻找其他可能性来制作这个情节。当我尝试您建议的代码时,我收到以下错误:... ---&gt; 37 y=dictofdf[key][['df_1']['force']], 38 x=dictofdf[key][['df_1']['displacement']], 39 mode='line', TypeError: list indices must be integers or slices, not str
    • 刚刚再次尝试了发布的代码,它应该可以工作。在您的 sn-p 中有双括号。确保您正确地对字典/列表进行切片。
    • 嗯,好的...我在收到错误消息后插入了双括号,看看是否有帮助。我在这里发布代码之前忘记删除它们。
    • 我发现我的错误:在我的字典中,没有存储数据帧的名称(df_1 和 df_2)。我正在使用dictofdf[key][1]['force']now 访问它,它可以工作。我现在正在使用 mathplotlib 生成绘图,我得到了我想要的结果。
    猜你喜欢
    • 2019-07-14
    • 2022-07-01
    • 1970-01-01
    • 2011-12-23
    • 2022-07-07
    • 1970-01-01
    • 2015-06-22
    • 2021-04-25
    • 1970-01-01
    相关资源
    最近更新 更多