我正在使用 Plotly 创建一个堆叠条形图,其中包含我在模板中定义的不同颜色。问题是颜色转到相同的 x 而不是我想要的相同的条形。 这就是我处理后的数据的样子
我用 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)
))
我认为问题在于我如何迭代添加栏,但我在文档中找不到任何帮助。 先谢谢你了
我之前从未研究过主题的细节。每个主题的颜色设置都存储在色系中,因此要设置您自己的颜色主题,请在布局中的色系中进行设置。
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()