表中有FactoryName、JiJXH、sale字段,如何绘制横轴是不同的FactoryName-JiJXH,纵轴是sale箱线图,并且横轴FactoryName-JiJXH刻度换行全部显示出来,并且按照不同的FactoryName-JiJXH制作sale中位数的折线,用python中的pyecharts绘制箱线图和折线图复合图
时间: 2024-03-03 21:47:58 浏览: 119
AngularJS中serivce,factory,provider的区别 - I have a dream - 开源中国社区2
好的,我会回答你的问题并提供相应的代码。
首先,你需要将数据存储在一个DataFrame中,然后使用pandas的groupby函数对FactoryName-JiJXH进行分组,然后使用seaborn库绘制箱线图和折线图。
以下是示例代码:
```python
import pandas as pd
import seaborn as sns
from pyecharts import options as opts
from pyecharts.charts import Boxplot, Line
# 创建DataFrame
df = pd.DataFrame({
'FactoryName': ['A', 'A', 'B', 'B', 'B'],
'JiJXH': [1, 2, 3, 4, 5],
'sale': [10, 20, 30, 40, 50]
})
# 将FactoryName和JiJXH合并为一列
df['FactoryName-JiJXH'] = df['FactoryName'] + '-' + df['JiJXH'].astype(str)
# 对FactoryName-JiJXH进行分组
grouped = df.groupby('FactoryName-JiJXH')
# 绘制箱线图
box = Boxplot()
for name, group in grouped:
box.add_xaxis([name])
box.add_yaxis('', [group['sale'].tolist()], boxgap=0, tooltip_opts=opts.TooltipOpts(trigger='axis', axis_pointer_type='cross'))
box.set_global_opts(title_opts=opts.TitleOpts(title='Sale Boxplot', subtitle=''))
box.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
box.render('boxplot.html')
# 绘制折线图
line = Line()
for name, group in grouped:
line.add_xaxis([name])
line.add_yaxis('Median', [group['sale'].median()], label_opts=opts.LabelOpts(is_show=False))
line.set_global_opts(title_opts=opts.TitleOpts(title='Sale Median Line', subtitle=''))
line.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position='top'))
line.render('line.html')
```
这段代码会生成两个文件:boxplot.html和line.html,你可以在浏览器中打开这两个文件查看结果。
如果你想要在一个图表中同时显示箱线图和折线图,你可以使用pyecharts的Overlap组合图,以下是示例代码:
```python
from pyecharts.charts import Overlap
# 创建Overlap图表
overlap = Overlap()
overlap.add(box)
overlap.add(line)
# 设置x轴标签旋转和间隔
overlap.set_global_opts(
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=45, interval=0)),
legend_opts=opts.LegendOpts(is_show=True)
)
# 显示图表
overlap.render('overlap.html')
```
这段代码会生成一个名为overlap.html的文件,在浏览器中打开即可查看复合图。
阅读全文