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

标签 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 notebook 中没有得到任何输出,该单元格只是运行而没有给出任何错误。

所以我对单列 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循环有什么问题吗? 谢谢!

最佳答案

问题的根源在于 jupyter 笔记本的行为以及它们如何确定单元格输出。假设您有一个名为 df 的 pandas DataFrame。如果你现在创建一个单元格:

df

您将在执行时收到 DataFrame 作为该单元格的输出。但是,如果您将单元格更改为

new_df = df

for i in range(5):
    df

您将不再收到任何输出。原因是,jupyter notebooks 默认总是输出最后接收到的输出。 new_df = df 的赋值不会返回任何内容。 for 循环也不行。为了查看您的期望,您应该使用 vestland's suggestion并将 fig.show()matplotplib.pyplot.plot() 添加到您的 for 循环中。这样你就不会依赖 jupyter notebooks 的默认输出行为,而是保证一些输出。

最后,你的代码变成:

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

如果你想要单独的地 block ,或者

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

如果您只想在一个 plotly 中进行比较,请改为。请注意,我将那些不依赖于迭代值以提高效率的行从 for 循环中提取出来。

关于python - 无法在 python 中使用 plotly 进行绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63317412/

相关文章:

python - 如何在 Plotly 中循环创建子图,其中每个子图上都有几条曲线?

python - 删除 Plotly Sankey 图中的文本标签,但悬停时保留数据 [Plotly Python Sankey 问题]

python - 从 Python 操作 Excel

Python:使用与不带空格的字符串输入匹配的文本文件查找单词

python - 如何使用 nan 和 twinx/secondary_y 绘制多列线图

python - 向量化 Pandas 列

python - 如何在 Plotly (Python) 中分别注释每个子图

python - 类型错误 : Mean() missing 1 required positional argument: 'data'

python - 在 python 中解析 facebook graph api json 时遇到问题

python - 如何将合并的 Excel 单元格与 NaN 读入 Pandas DataFrame