我想使用Python中的for循环在df中制作多个Plotly散点图(每列一个),这样我就可以按预期工作了。
然后,我希望绘图的颜色是数据帧中最后一个值的条件。例如:如果最后一行高于或低于5,那么在本例中,我希望B列的绘图具有与A和C不同的颜色。
import plotly.express as px
import pandas as pd
df = pd.DataFrame({'A': [3, 1, 2, 3],
'B': [5, 6, 7, 8],
'C': [2, 1, 6, 3]})
df
A B C
0 3 5 2
1 1 6 1
2 2 7 6
3 3 8 3使用Plotly和for loop制作绘图:
plots = {}
for i in df.columns:
if df.iloc[-1] >= 5:
plots[i] = px.scatter(df, color_discrete_sequence=["red"], x="A", y=i)
else:
plots[i] = px.scatter(df, color_discrete_sequence=["blue"], x="A", y=i)在这里,我希望能够用图‘a’,图‘B’和图‘C’显示每个图,但我希望图A和C是蓝色的,而图B是红色的。
发布于 2020-10-28 16:12:04
从结构上看,您的方法似乎很好。但有一些细节可能会导致一些问题。df.iloc[-1] >= 5很快就会引发错误,所以我改用dfx.iloc[-1].values >= 5。您的数据帧子设置也不起作用。当您逐列设置数据帧时,通常得到的是pandas序列,而不是pandas数据帧。并且它们的属性也不相同。考虑到这些细节,我将下面的代码组合在一起,通过调用例如plots[2].show()来生成以下图
图1

试一试,让我知道它对你的效果如何。
完整代码:
import plotly.express as px
import pandas as pd
df = pd.DataFrame({'A': [3, 1, 2, 3],
'B': [5, 6, 7, 8],
'C': [2, 1, 6, 3]})
plots = {}
for i, col in enumerate(df.columns):
dfx = df[col].to_frame()
print(dfx)
if dfx.iloc[-1].values >= 5:
plots[i] = px.scatter(df, color_discrete_sequence=["red"], x=df[col].index, y=df[col])
else:
plots[i] = px.scatter(df, color_discrete_sequence=["blue"], x=df[col].index, y=df[col])
plots[2].show()https://stackoverflow.com/questions/64552612
复制相似问题