用Pyecharts绘制dataframe的三列数据对应三个柱形的柱状图,每个柱形旁边显示所占三个柱形的百分比
时间: 2024-03-03 15:52:10 浏览: 74
使用pandas中的DataFrame数据绘制柱状图的方法
好的,可以参考如下代码实现:
```python
import pandas as pd
from pyecharts.charts import Bar, Grid, Line
from pyecharts import options as opts
from pyecharts.globals import ThemeType
# 生成数据
data = {
'A': [10, 20, 30, 40, 50],
'B': [5, 15, 25, 35, 45],
'C': [15, 25, 35, 45, 55]
}
df = pd.DataFrame(data)
# 计算每列数据的总和
col_sum = df.sum()
# 计算每个数据所占的百分比
percent = df.apply(lambda x: x/col_sum, axis=1)
# 绘制柱状图
bar = (
Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
.add_xaxis(df.index.tolist())
.add_yaxis('A', df['A'].tolist())
.add_yaxis('B', df['B'].tolist())
.add_yaxis('C', df['C'].tolist())
.set_global_opts(
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=45)),
title_opts=opts.TitleOpts(title='柱状图')
)
)
# 添加百分比标签
for i in range(len(df)):
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.iloc[i]['A'],
name='A',
label_opts=opts.LabelOpts(
formatter=opts.FuncFormatter(lambda x: f'{x*100:.2f}%'),
position='insideRight'
)
),
opts.MarkLineItem(
y=percent.iloc[i]['B'],
name='B',
label_opts=opts.LabelOpts(
formatter=opts.FuncFormatter(lambda x: f'{x*100:.2f}%'),
position='insideRight'
)
),
opts.MarkLineItem(
y=percent.iloc[i]['C'],
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()
```
这段代码会生成一个柱状图,并在每个柱形旁边显示该柱形所占三个柱形的百分比。你可以将数据替换成自己的数据,并对其他参数进行调整。
阅读全文