绘制多个轴颜色合并

Posted

技术标签:

【中文标题】绘制多个轴颜色合并【英文标题】:Plotly multiple axes colors merge 【发布时间】:2021-12-24 02:28:00 【问题描述】:

我试图绘制两个足球运动员的不同统计数据。我希望更好的统计数据具有绿色和更差的统计数据红色。唯一的问题是在我的色阶中,一种颜色是红色,一种是绿色,两者融合。有谁知道绘制这种图表的解决方案或更好的方法?

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

【问题讨论】:

我不确定颜色是否真的结合了。如果你只绘制一个条,它是相同的颜色 【参考方案1】:

我认为你的方法可以简化一点。似乎不需要辅助 y 轴,只需要针对不同玩家的分类。我还认为您设置颜色的方式是棕色是实际颜色 - 如果您只绘制一个条形图,它仍然是棕色。

实现您想要的更简单的方法是将两个玩家的信息合并到一个 DataFrame 中,然后创建一个名为"Color" 的列,其中最低分数映射到"red",最高分数映射到"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()

【讨论】:

非常感谢。确实不需要辅助轴,但我希望它在我的网站上看起来那样。但我将只使用两个图表。

以上是关于绘制多个轴颜色合并的主要内容,如果未能解决你的问题,请参考以下文章

使用Matplotlib绘制数据图

如何合并两个 tensorflow 事件文件,或者告诉 tensorflow 以相同的颜色绘制它们?

绘制来自 pandas DataFrame 的数据,点的颜色取决于列

基于轴颜色的ggplot图例

matlab 用surf绘制出的曲面上颜色代表的含义

在 QQuickItem 中绘制不同颜色的多个点