Python 和 Plotly 离线:创建(空)图并使用 for 循环添加轨迹
Python and Plotly offline: create (empty) graph and add traces with for-loop
我是编程新手,我花了很多时间寻找解决方案,但我似乎无法找到正确的解决方案。
我有一些测量数据集存储在字典中。我想创建一个带有 plotly 的图表,其中显示了测量数据的所有曲线。我正在尝试创建一个空图,然后遍历字典并将两个存储的数据帧的两列添加为每个键的图的跟踪。
我哪里做错了或者我该如何换一种方式?
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
append_trace
在 Plotly 中适用于 subplots 但不适用于常规 Figure
s.
- 您正在遍历您的字典键,但您从未使用其中一个键,您正在为每个键绘制相同的值。在下面的示例中,
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)
我是编程新手,我花了很多时间寻找解决方案,但我似乎无法找到正确的解决方案。 我有一些测量数据集存储在字典中。我想创建一个带有 plotly 的图表,其中显示了测量数据的所有曲线。我正在尝试创建一个空图,然后遍历字典并将两个存储的数据帧的两列添加为每个键的图的跟踪。
我哪里做错了或者我该如何换一种方式?
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
append_trace
在 Plotly 中适用于 subplots 但不适用于常规Figure
s.- 您正在遍历您的字典键,但您从未使用其中一个键,您正在为每个键绘制相同的值。在下面的示例中,
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)