表中有FactoryName、JiJXH、sale字段,如何绘制横轴是不同的FactoryName-JiJXH,纵轴是sale箱线图,并且横轴FactoryName-JiJXH刻度换行全部显示出来,并且按照不同的FactoryName-JiJXH制作sale中位数的折线,用pyecharts绘制箱线图和折线图复合图
时间: 2024-03-05 11:52:47 浏览: 89
使用Python中的pyecharts库读取json文件绘制面积折线图
你可以使用以下代码来绘制横轴为FactoryName-JiJXH,纵轴为sale的箱线图,并绘制每个数据组的sale中位数的折线图,并将两个图表合并成一个复合图:
```
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Boxplot, Line, Grid
# 读取数据
df = pd.read_excel('200马力拖拉机明细.xlsx')
# 创建DataFrame
df = pd.DataFrame({
'FactoryName': df['FactoryName'],
'JiJXH': df['JiJXH'],
'sale': df['sale']
})
# 将FactoryName和JiJXH合并为一列
df['FactoryName-JiJXH'] = df['FactoryName'] + '-' + df['JiJXH'].astype(str)
# 对FactoryName-JiJXH进行分组
grouped = df.groupby('FactoryName-JiJXH')
# 绘制箱线图
box = Boxplot()
box_data = []
for name, group in grouped:
box_data.append([round(i, 2) for i in group['sale'].tolist()])
box.add_xaxis([name])
box.add_yaxis('', box.prepare_data(box_data), tooltip_opts=opts.TooltipOpts(trigger='axis', axis_pointer_type='cross'))
box.set_global_opts(
title_opts=opts.TitleOpts(title='Sale Boxplot', subtitle=''),
xaxis_opts=opts.AxisOpts(
axislabel_opts=opts.LabelOpts(interval=0, formatter='{value|换行}'.replace('换行', '\n'))
)
)
box.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
# 绘制折线图
line = Line()
for name, group in grouped:
line.add_xaxis([name])
line.add_yaxis('Median', [round(group['sale'].median(), 2)], label_opts=opts.LabelOpts(is_show=False))
line.set_global_opts(
title_opts=opts.TitleOpts(title='Sale Median Line', subtitle=''),
xaxis_opts=opts.AxisOpts(
axislabel_opts=opts.LabelOpts(interval=0, formatter='{value|换行}'.replace('换行', '\n'))
)
)
# 合并图表
grid = Grid(
init_opts=opts.InitOpts(
width='1400px',
height='800px',
page_title='Boxplot and Median Line',
theme='white'
)
)
grid.add(box, grid_opts=opts.GridOpts(pos_left='10%', pos_right='10%'))
grid.add(line, grid_opts=opts.GridOpts(pos_left='10%', pos_right='10%'))
grid.render('boxplot_and_line.html')
```
在代码中,我们首先读取了Excel数据表,并将FactoryName和JiJXH合并为一列,形成一个新的列FactoryName-JiJXH。然后我们使用groupby方法对FactoryName-JiJXH进行分组,将每个组的sale数据提取出来,并使用Boxplot类绘制箱线图,使用Line类绘制每个数据组的sale中位数的折线图。在绘制箱线图和折线图时,我们都设置了x轴的标签间隔为0,并使用formatter将标签换行显示,以便于显示每个FactoryName-JiJXH完整的名称。最后,我们使用Grid类将两个图表合并成一个复合图,并设置了一些图表的显示参数和样式,最终将图表保存为一个HTML文件。
你可以根据自己的数据和需求修改代码,调整图表样式和参数,生成适合自己的数据可视化结果。
阅读全文