Plotly GO柱状图如何基于size列取值自定义marker_pattern_shape图案样式
[已由@Rob Raymond的第二个回答解决]
问题描述
我在定义Plotly GO柱状图的marker图案形状数据源(绑定指定列取值)时遇到了问题,需求是基于数据框中size列的不同取值,为对应柱状图柱子设置不同的填充图案(如"//"、"."等),且受限制只能使用plotly.graph_objects库,无法使用plotly.express。
最简可复现代码
import plotly.graph_objects as go import pandas as pd animals=['giraffes', 'orangutans', 'monkeys', 'rats'] size=['big', 'medium', 'medium', 'small'] number=[20, 14, 23, 5] columns = ['animal','size','number','test'] df = pd.DataFrame({'animals':animals, 'size':size,'number':number}) fig = go.Figure([go.Bar( x=df['animals'].values.tolist(), y=df['number'].values.tolist())]) fig.update_traces(marker_pattern_shape=['.', '\\','+','/']) fig.show()
对应数据集如下:
| animals | size | number | |
|---|---|---|---|
| 1 | giraffes | big | 20 |
| 2 | orangutans | medium | 14 |
| 3 | monkeys | medium | 23 |
| 4 | rats | small | 5 |

我尝试过如下写法:
fig.update_traces(marker_pattern_shape=['.', '\\','+','/'], marker_pattern = {'shape':['+', '\\']})go.Bar(..., marker = {'pattern':'.'}, ...)
备注:我只能使用plotly GO,无法使用ploty express。
@Rob Raymond回答后更新
第一种简单场景的解决方案可以正常运行,但在我构造的多trace复杂场景下无法生效,更复杂的可复现代码如下:
import plotly.graph_objects as go import pandas as pd animals=['giraffes', 'orangutans', 'monkeys', 'rats', "mice"] size=['big', 'medium', 'medium', 'small', "small"] number=[20, 14, 23, 5, 4] animalId=[1,2,3,4,5] colorPlotly = ['lightslategrey','red','black', 'saddlebrown','grey'] df = pd.DataFrame({'animals':animals, 'size':size,'number':number,'animalId':animalId, 'colorPlotly':colorPlotly}) fig = go.Figure() for id in animalId: fig.add_trace(go.Bar( x=df[df['animalId']==id]['animals'], y=df[df['animalId']==id]['number'], name = id, marker_color=df[df['animalId']==id]['colorPlotly'])) fig.update_traces(marker_pattern_shape=df["size"].map({'big':".", 'medium':'\\', 'medium':'+', 'small':'/'})) fig.show()
对应数据集如下:
| animals | size | number | colorPlotly | animalId | |
|---|---|---|---|---|---|
| 1 | giraffes | big | 20 | lightslategrey | 1 |
| 2 | orangutans | medium | 14 | red | 2 |
| 3 | monkeys | medium | 23 | black | 3 |
| 4 | rats | small | 4 | saddlebrown | 4 |
| 5 | mices | small | 5 | grey | 5 |

内容的提问来源于stack exchange,提问作者Krystian Warda
相关产品推荐
相关产品推荐

