用Pyecharts绘制三个列表数据对应三个柱形的柱状图,每个柱形旁边显示所占三个柱形的百分比
时间: 2024-03-03 18:52:10 浏览: 19
好的,可以参考如下代码实现:
```python
from pyecharts.charts import Bar, Grid, Line
from pyecharts import options as opts
from pyecharts.globals import ThemeType
# 生成数据
A = [10, 20, 30, 40, 50]
B = [5, 15, 25, 35, 45]
C = [15, 25, 35, 45, 55]
# 计算每个数据所占的百分比
col_sum = sum(A) + sum(B) + sum(C)
percent_A = [x/col_sum for x in A]
percent_B = [x/col_sum for x in B]
percent_C = [x/col_sum for x in C]
# 绘制柱状图
bar = (
Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
.add_xaxis(list(range(len(A))))
.add_yaxis('A', A)
.add_yaxis('B', B)
.add_yaxis('C', C)
.set_global_opts(
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=45)),
title_opts=opts.TitleOpts(title='柱状图')
)
)
# 添加百分比标签
for i in range(len(A)):
bar.add_yaxis(
series_name='',
yaxis_data=[],
label_opts=opts.LabelOpts(
formatter=opts.FuncFormatter(lambda x: f'{x*100:.2f}%'),
position='right'
),
itemstyle_opts=opts.ItemStyleOpts(
color='rgba(0,0,0,0)'
),
markline_opts=opts.MarkLineOpts(
data=[
opts.MarkLineItem(
y=percent_A[i],
name='A',
label_opts=opts.LabelOpts(
formatter=opts.FuncFormatter(lambda x: f'{x*100:.2f}%'),
position='insideRight'
)
),
opts.MarkLineItem(
y=percent_B[i],
name='B',
label_opts=opts.LabelOpts(
formatter=opts.FuncFormatter(lambda x: f'{x*100:.2f}%'),
position='insideRight'
)
),
opts.MarkLineItem(
y=percent_C[i],
name='C',
label_opts=opts.LabelOpts(
formatter=opts.FuncFormatter(lambda x: f'{x*100:.2f}%'),
position='insideRight'
)
)
]
)
)
# 将柱状图和百分比标签合并为一个图表
grid = (
Grid(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
.add(bar, grid_opts=opts.GridOpts(pos_left='5%', pos_right='5%', pos_bottom='15%'))
)
grid.render_notebook()
```
这段代码会生成一个柱状图,并在每个柱形旁边显示该柱形所占三个柱形的百分比。你可以将数据替换成自己的数据,并对其他参数进行调整。