Plotly:如何使用 go.Bar 为组指定颜色?
Posted
技术标签:
【中文标题】Plotly:如何使用 go.Bar 为组指定颜色?【英文标题】:Plotly: How to specify colors for a group using go.Bar? 【发布时间】:2020-08-27 22:56:53 【问题描述】:如何使用plotly.graph_objs
以类似于plotly.express
的方式绘制pandas 数据——专门为各种数据类型着色?
根据 pandas 列中的值对数据类型进行分组的 plotly express 功能非常有用。不幸的是,我无法在我的系统中使用 express(因为我需要将图形对象发送到 orca)
我可以通过专门将Type
映射到颜色(在下面的示例中为full_plot
)来获得相同的功能,但是我有类型 AZ,有没有更好的方法来映射每个可能的Type
数据框转换成颜色?
import pandas as pd
import plotly.express as px
import plotly.graph_objs as go
d = 'Scenario': [1, 2, 3, 1, 2,3],
'Type': ["A", "A", "A", "B", "B", "B"],
'VAL_1': [100, 200, 300, 400 , 500, 600],
'VAL_2': [1000, 2000, 3000, 4000, 5000, 6000]
df = pd.DataFrame(data=d)
def quick_plot(df):
fig = px.bar(df, y='VAL_1', x='Scenario', color="Type", barmode='group')
fig['layout'].update(title = "PX Plot",
width = 600, height = 400,
xaxis = dict(showgrid=False))
fig.show()
def full_plot(df):
colors = 'A': 'blue',
'B': 'red'
s0=df.query('Type=="A"')
s1=df.query('Type=="B"')
fig = go.Figure()
fig.add_trace(go.Bar(
name='A',
y=s0['VAL_1'],x=s0['Scenario'], marker='color': colors['A']))
fig.add_trace(go.Bar(
name='B',
y=s1['VAL_1'],x=s1['Scenario'], marker='color': colors['B']))
fig['layout'].update(title = "Full Plot",
width = 600, height = 400)
fig.update_layout(barmode='group')
fig.show()
quick_plot(df)
full_plot(df)
【问题讨论】:
【参考方案1】:你可以简单地使用这样的字典:
colors = 'A':'steelblue',
'B':'firebrick'
唯一的挑战在于对每个唯一类型的数据框进行分组,并使用 for 循环为每种类型添加新的跟踪。下面的代码 sn-p 负责生成此图:
# imports
import pandas as pd
import plotly.express as px
import plotly.graph_objs as go
# data
d = 'Scenario': [1, 2, 3, 1, 2,3],
'Type': ["A", "A", "A", "B", "B", "B"],
'VAL_1': [100, 200, 300, 400 , 500, 600],
'VAL_2': [1000, 2000, 3000, 4000, 5000, 6000]
df = pd.DataFrame(data=d)
# assign colors to type using a dictionary
colors = 'A':'steelblue',
'B':'firebrick'
# plotly figure
fig=go.Figure()
for t in df['Type'].unique():
dfp = df[df['Type']==t]
fig.add_traces(go.Bar(x=dfp['Scenario'], y = dfp['VAL_1'], name=t,
marker_color=colors[t]))
fig.show()
【讨论】:
以上是关于Plotly:如何使用 go.Bar 为组指定颜色?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 plotly 条形图在 R 中不按顺序使用我指定的颜色,我如何强制它按顺序使用我的颜色?