无法在python中使用plotly进行绘图

时间:2020-08-08 15:56:21

标签: python pandas plotly

我有以下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循环中的问题吗? 谢谢!

2 个答案:

答案 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()