使用 Plotly Python 中的自定义模板创建具有不同颜色的堆叠条形图

问题描述 投票:0回答:1

我正在使用 Plotly 创建一个堆叠条形图,其中包含我在模板中定义的不同颜色。问题是颜色转到相同的 x 而不是我想要的相同的条形。 这就是我处理后的数据的样子

在这里我们看到,除了数字 5 之外,每个动作都有相同的颜色

我用 6 种颜色定义我的模板“mytemplate”

THEME = {
    'bar_colors': [
        '#861388',
        '#d4a0a7',
        '#dbd053',
        '#1b998b',
        '#A0CED9',
        '#3e6680'
    ],
    'background_color': '#ebf2fa',
    'font_family': 'Montserrat',
    'font_color': '#898989',
    'label_font_size': 16,
    'label_background_color': '#ffffff'
}

pio.templates['mytemplate'] = go.layout.Template(
        data=dict(
            bar=[go.Bar(marker_color=THEME['bar_colors'])]
        ),
        layout=go.Layout(
            font=dict(
                family=THEME['font_family'],
                color=THEME['font_color']
            ),
            paper_bgcolor=THEME['background_color'],
            plot_bgcolor=THEME['background_color'],
            hoverlabel=dict(
                bgcolor=THEME['label_background_color'],
                font_size=THEME['label_font_size']
            )
        )
    )

我将模板添加到我的图中,并将其与 simple_white 混合

fig.update_layout(
        template=pio.templates["simple_white+mytemplate"],
        dragmode=False,
        barmode='relative',
        title='Lines per act',
        xaxis = dict(
            tickmode = 'array',
            tickvals = [1,2,3,4,5],
            ticktext = ['Act '+str(i) for i in range(1,6)]
        )
)

我在这里绘制条形,为每个玩家迭代

playerList = data.Player.unique()
for player in playerList:
    fig.add_trace(go.Bar(
        name=player,
        x=data.loc[data.Player==player].Act,
        y=data.loc[data.Player==player][f'{lineMode}'],
        hovertemplate=get_hover_template(player, lineMode)
))

我认为问题在于我如何迭代添加栏,但我在文档中找不到任何帮助。 先谢谢你了

python plotly visualization plotly-dash plotly-python
1个回答
0
投票

我之前从未研究过主题的细节。每个主题的颜色设置都存储在色系中,因此要设置您自己的颜色主题,请在布局中的色系中进行设置。

import plotly.io as pio
import plotly.graph_objects as go

fig = go.Figure()

THEME = {
    'color_way': [
        '#861388',
        '#d4a0a7',
        '#dbd053',
        '#1b998b',
        '#A0CED9',
        '#3e6680'
    ],
    'background_color': '#ebf2fa',
    'font_family': 'Montserrat',
    'font_color': '#898989',
    'label_font_size': 16,
    'label_background_color': '#ffffff'
}

pio.templates['mytemplate'] = go.layout.Template(
        # data=dict(
        #     bar=[go.Bar(marker_color=THEME['color_way'])]
        # ),
        layout=go.Layout(
            font=dict(
                family=THEME['font_family'],
                color=THEME['font_color']
            ),
            paper_bgcolor=THEME['background_color'],
            plot_bgcolor=THEME['background_color'],
            hoverlabel=dict(
                bgcolor=THEME['label_background_color'],
                font_size=THEME['label_font_size']
            ),
            colorway=THEME['color_way'], # update
        )
    )

fig.update_layout(
        template=pio.templates["simple_white+mytemplate"],
        dragmode=False,
        barmode='relative',
        title='Lines per act',
        xaxis = dict(
            tickmode = 'array',
            tickvals = [1,2,3,4,5],
            ticktext = ['Act '+str(i) for i in range(1,6)]
        )
)

lineMode = 'LineCount'
playerList = data.Player.unique()
for i,player in enumerate(playerList):
    fig.add_trace(go.Bar(
        name=player,
        x=data.loc[data.Player==player].Act,
        y=data.loc[data.Player==player][f'{lineMode}'],
        #hovertemplate=get_hover_template(player, lineMode)
    ))
    fig.update_layout(barmode='stack')

fig.show()

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.