我有以下Python数据框,我想绘制Sno。与每个列的值使用plotly。
TT AN AP AR AS BR CH CT DN DL ... PY PB RJ SK TN TG TR UP UT WB
Sno.
1 81 0 1 0 0 0 0 0 0 7 ... 0 1 3 0 1 1 0 12 0 0
2 27 0 0 0 0 0 0 0 0 0 ... 0 0 1 0 0 2 0 1 0 0
3 15 0 0 0 0 0 0 0 0 0 ... 1 0 0 0 0 1 0 0 1 0
4 11 0 0 0 0 0 0 0 0 1 ... 0 0 0 0 0 1 0 2 0 1
5 37 0 0 0 0 0 0 0 0 2 ... 0 1 3 0 1 8 0 2 1 0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
147 rows × 36 columns
这是我的方法:
def plot_case(df):
for i in df.columns.values :
dn = df.index.values
dc = df[i].values
xaxis = go.layout.XAxis(title="Day number")
yaxis = go.layout.YAxis(title="New cases")
fig = go.Figure(layout=go.Layout(title=i, xaxis=xaxis, yaxis=yaxis))
fig.add_trace(go.Scatter(x=dn, y=dc))
plot_case(df)
但是我在jupyter笔记本中没有任何输出,该单元运行时没有给出任何错误。
所以我对单列 TT
尝试了这种方法xaxis = go.layout.XAxis(title="Day number")
yaxis = go.layout.YAxis(title="New cases")
fig = go.Figure(layout=go.Layout(title="TT", xaxis=xaxis, yaxis=yaxis))
fig.add_trace(go.Scatter(x=df.index.values, y=df.TT.values))
它奏效了! 那么有人可以解释一下for循环中的问题吗? 谢谢!
答案 0 :(得分:4)
问题的根源是jupyter笔记本的行为以及它们如何确定单元输出。假设您有一个名为df
的熊猫DataFrame。如果您现在创建一个显示以下内容的单元格:
df
执行后,您将收到DataFrame作为对该单元的输出。但是,如果将单元格更改为
new_df = df
或
for i in range(5):
df
您将不再收到任何输出。原因是,默认情况下,jupyter笔记本始终输出最后收到的输出。 new_df = df
的分配不会返回任何内容。 for循环也没有。为了查看您的期望,应使用vestland's suggestion并将fig.show()
或matplotplib.pyplot.plot()
添加到for循环中。这样,您就不必依赖jupyter笔记本的默认输出行为,但可以保证一定的输出。
最后,您的代码变为:
def plot_case(df):
for i in df.columns.values :
dn = df.index.values
dc = df[i].values
xaxis = go.layout.XAxis(title="Day number")
yaxis = go.layout.YAxis(title="New cases")
fig = go.Figure(layout=go.Layout(title=i, xaxis=xaxis, yaxis=yaxis))
fig.add_trace(go.Scatter(x=dn, y=dc))
fig.show()
如果您需要单独的图,或者
def plot_case(df):
xaxis = go.layout.XAxis(title="Day number")
yaxis = go.layout.YAxis(title="New cases")
fig = go.Figure(layout=go.Layout(title='comparison', xaxis=xaxis, yaxis=yaxis))
dn = df.index.values
for i in df.columns.values :
dc = df[i].values
fig.add_trace(go.Scatter(x=dn, y=dc))
fig.show()
如果只想在一个图中进行比较。请注意,我从for循环中拉出了与效率无关的那些行。
答案 1 :(得分:1)
这里可能会有更多问题,但是无论如何您都需要致电
fig.show()