我有以下 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/