Plotly:如何根据条件制作带有颜色的多个图?
Plotly: How to make multiple plots with colors based on a condition?
我想在 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 循环绘图:
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 为红色。
从结构上看,您的方法似乎没问题。但是有几个细节可能会引起一些问题。 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()
我想在 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 循环绘图:
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 为红色。
从结构上看,您的方法似乎没问题。但是有几个细节可能会引起一些问题。 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()