python - 绘制多个轴颜色合并
问题描述
我试图绘制镜像的两个足球运动员的不同统计数据。我希望更好的统计数据具有绿色和更差的统计数据红色。唯一的问题是在我的色阶中,一种颜色是红色,一种是绿色,两者融合。有谁知道绘制这种图表的解决方案或更好的方法?
data =[['Messi', 88]]
data2 = [['Ronaldo', -88]]
df = pd.DataFrame(data, columns=['Player', 'Dribbling'])
df2 = pd.DataFrame(data2, columns=['Player', 'Dribbling'])
fig = make_subplots(specs=[[{"secondary_y": True}]])
fig.add_trace(go.Bar(
orientation='h',
name=df['Player'],
x=df['Dribbling'],
marker_color=((df.Dribbling >= df2.Dribbling)).astype('int'),
marker_colorscale=[[0, 'red'], [1, 'green']],
),secondary_y=False)
fig.add_trace(go.Bar(
orientation='h',
name=df2['Player'],
x=df2['Dribbling'],
marker_color=((df.Dribbling >= df2.Dribbling)).astype('int'),
marker_colorscale=[[0, 'red'], [1, 'green']],
),secondary_y=True)
fig.update_layout(
barmode="group"
)
fig.update_xaxes(range=[-100, 100])
解决方案
我认为你的方法可以简化一点。似乎不需要辅助 y 轴,只需要针对不同玩家的分类。我还认为你设置颜色的方式,棕色是实际颜色 - 如果你只绘制一个条,它仍然是棕色。
实现您想要的更简单的方法是将两个玩家的信息组合在一个 DataFrame 中,然后创建一个名为"Color"
where the minimum score is mapped to "red"
and the maximum score is mapped to"green"
的列,然后遍历 DataFrame 的行并添加一个水平条作为每次循环迭代的跟踪。
这种方法具有可推广的优点:如果您想绘制其他足球运动员的统计数据并将他们的条形图设为另一种颜色,您可以修改 DataFrame,绘图代码仍然可以工作。
import pandas as pd
import plotly.graph_objects as go
df = pd.DataFrame([['Messi', 88],['Ronaldo', -88]], columns=['Player', 'Dribbling'])
df["Color"] = ['red' if x==min(df.Dribbling) else "green" if x==max(df.Dribbling) else np.nan for x in df.Dribbling]
fig = go.Figure()
for row in df.itertuples(index=False):
fig.add_trace(go.Bar(
orientation='h',
name=row.Player,
x=[row.Dribbling],
y=[row.Player],
marker_color=row.Color,
))
fig.show()
推荐阅读
- reactjs - 使用 Next.js 在构建时运行脚本
- node.js - 我可以在 node.js 中创建一个指向另一个基本 url 的随机 url
- mongodb - 如何设置 MongoDB Atlas?
- ssl - TLS 如何安全地协商共享密钥?
- sql - 如何为表中公司的每个位置分配相同的收入权重?谷歌大查询
- python - 当用户说话时尝试添加警告角色
- reactjs - 将 expo 应用程序连接到 Redux 开发工具扩展
- javascript - 减少函数javascript
- javascript - ReactSortable - 防止重复
- context-free-grammar - CFG S识别的单词有哪些-> 1 | 0