可视化之并行多图(使用pyecharts绘制多图图表)

# 导入模版
from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line, Pie, Radar

#1. 绘制柱形图
# x轴数据
x_data = ["2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021"]

# 标签名
legend_list = ["诊疗量(万人次)", "同比增速(%)"]

# "诊疗量(万人次)"的数据
value1 = [87430, 90912, 96225, 101885, 107147, 116390, 105764, 120215]

# "同比增速(%)的数据
value2 = [7.40, 4.00, 5.83, 5.81, 5.16, 8.63, -9.31, 13.66]

# 链式调用
bar = (
    Bar(init_opts=opts.InitOpts(width="1000px", height="500px"))  # 设置柱形图宽度与高度
    .add_xaxis(xaxis_data=x_data)     # 添加x轴的数据
    .add_yaxis(
        series_name="诊疗量(万人次)",  # 图例名:诊疗量(万人次)
        y_axis=value1,                 ##y轴柱形图数据
        yaxis_index=1,                 # 表示y轴的索引,用于拥有多个y轴的单图表中。
        #         label_opts=opts.LabelOpts(is_show=False),            #不显示柱形图数据
        color=''
    )
    .extend_axis(
        yaxis=opts.AxisOpts(
            name="诊疗量(万人次)",  # y轴名称
            type_="value",
            min_=0,            # y轴最小值:0
            max_=150000,       # y轴最大值:150000
            position="left"    # 位于y轴左侧
        )
    )
    .extend_axis(
        yaxis=opts.AxisOpts(
            name="同比增速(%)",  # y轴名称
            type_="value",
            min_=-20,          # y轴最小值:-20
            max_=20,           # y轴最大值:20
            position="right",  # 位于y轴右侧
        )
    )
    .set_global_opts(         # 设置全局配置项
        title_opts=opts.TitleOpts(title="2014-2021年中国中医类医疗卫生机构诊疗量",
                                  pos_left='center'),    # 标题名称
        legend_opts=opts.LegendOpts(is_show=False),      # 不显示图例
        tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),  # 显示提示框组件
    )
    .set_series_opts(
        itemstyle_opts=opts.ItemStyleOpts(  # 图元样式配置项
            opacity=0.6),                   # 设置柱形图透明度:0.6
    )

)

line = (
    Line()              # 创建Line类的对象
    .add_xaxis(x_data)  # 添加x轴的数据
    .add_yaxis(
        series_name="同比增速(%)",  # 图例名:同比增速(%)
        y_axis=value2,              # y轴折线图数据
        yaxis_index=2,              # 表示y轴的索引,用于拥有多个y轴的单图表中。
        color='purple'
    )
)

# 2.堆积柱形图
x_data = ['2019年', '2020年', '2021年', '2022年', '2023年']
data1 = [20.3, 22.0, 23.5, 22.5, 22.3]    # 跨国企业占比
data2 = [79.7, 78.0, 76.5, 77.5, 77.7]    # 本土企业占比

stack = (
    Bar()
    .add_xaxis(x_data)
    .add_yaxis("跨国企业占比", data1, stack="stack1", category_gap="20%", color='cyan',  # stack="stack1":堆积柱形图
               xaxis_index=1,
               yaxis_index=3,
               label_opts=opts.LabelOpts(is_show=False)    # 不显示柱形图数据
               )
    .add_yaxis("本土企业占比", data2, stack="stack1", category_gap="80%", color='pink',
               xaxis_index=1,
               yaxis_index=3,
               label_opts=opts.LabelOpts(is_show=False)    # 不显示柱形图数据
               )
    .set_global_opts(  # 设置全局配置项
        title_opts=opts.TitleOpts(title="全国药店中药饮片供应商占比",  # 标题名称
                                  pos_left='34%',
                                  pos_top="52%"),
        legend_opts=opts.LegendOpts(is_show=False),  # 不显示图例
        tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),  # 显示提示框组件
        yaxis_opts=opts.AxisOpts(min_=0, max_=100,   # y轴刻度范围0—100
                                 interval=25         # y轴刻度范围分为25一组
                                 ),
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=45)  # x轴标签旋转45°
                                 )
    )
)
# stack.render_notebook()

# 3.绘制环形图
# 添加标签与数值
labels = [('20岁以下', 2.2),
          ('20-30岁', 27.9),
          ('31-40岁', 56.2),
          ('41-50岁', 10.9),
          ('51岁以上', 2.8)]

# 链式调用
pie = (
    Pie()  # 创建Pie类的对象
    .add(
        "",
        labels,  # 标签与数值
        center=["15%", "80%"],  # 饼图的中心(圆心)坐标,[“横坐标”,“纵坐标”]
        radius=["10%", "30%"]  # 饼图的半径,[“内半径”,“外半径”]
    )
    .set_global_opts(  # 设置全局配置项
        title_opts=opts.TitleOpts(
            title="中药材消费者画像",
            pos_left='7%',
            pos_top="52%"
        ),

        legend_opts=opts.LegendOpts(is_show=False)  # 不展示图例
    )
)

# pie.render_notebook()


c = bar.overlap(line)  # 柱形图-折线融合
# c.render_notebook()


# 4.创建一个组合图表实例(数据填充格式为:其他图表实例,Bar,Line,Pie,Scatter)
grid = (
    Grid()  # GridOpts:直角坐标系网格配置项
    .add(c,
         grid_opts=opts.GridOpts(pos_bottom="60%"),  # grid 组件离容器下侧的距离
         is_control_axis_index=True
         )

    .add(stack,
         grid_opts=opts.GridOpts(pos_bottom="10%",
                                 pos_top="60%",
                                 pos_left="35%",
                                 pos_right="40%"
                                 ),
         is_control_axis_index=True
         )

    .add(pie,
         grid_opts=opts.GridOpts(pos_bottom="5%",
                                 pos_top="60%",
                                 pos_left="10%",
                                 pos_right="70%"
                                 ),
         is_control_axis_index=True
         )

)
#     通过联合调整pos_bottom,pos_top,pos_left, pos_right 这四个参数,实现并行组合图表中的任意布局

# 5、渲染图表
grid.render()

运行效果图如下:

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
由于题目中提到的数据文件a.csv不清楚具体内容和格式,因此以下示例仅提供代码框架供参考,实际应用需要根据具体数据格式进行相应的数据预处理和可视化操作。 (1)获取处理好的数据 ```python import pandas as pd # 读取CSV文件 df = pd.read_csv('a.csv') # 对数据进行处理,获取销量前5的商品数量 top5_products = df.groupby('商品名称')['销量'].sum().sort_values(ascending=False)[:5] ``` (2)绘制销量前5的商品数量柱形图 ```python from pyecharts import options as opts from pyecharts.charts import Bar # 创建柱形图 bar_chart = Bar() # 添加x轴数据和y轴数据 bar_chart.add_xaxis(top5_products.index.tolist()) bar_chart.add_yaxis('销量', top5_products.tolist()) # 设置全局配置项 bar_chart.set_global_opts( title_opts=opts.TitleOpts(title='销量前5的商品数量柱形图'), xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=15)) ) # 设置系列配置项 bar_chart.set_series_opts( label_opts=opts.LabelOpts(position='top') ) # 显示图表 bar_chart.render() ``` (3)绘制售货机每月总交易额折线图 ```python from pyecharts.charts import Line # 对数据进行处理,获取每月总交易额 monthly_sales = df.groupby('交易时间月份')['交易额'].sum() # 创建折线图 line_chart = Line() # 添加x轴数据和y轴数据 line_chart.add_xaxis(monthly_sales.index.tolist()) line_chart.add_yaxis('交易额', monthly_sales.tolist()) # 设置全局配置项 line_chart.set_global_opts( title_opts=opts.TitleOpts(title='售货机每月总交易额折线图') ) # 设置系列配置项 line_chart.set_series_opts( label_opts=opts.LabelOpts(is_show=False) ) # 显示图表 line_chart.render() ``` (4)绘制售货机各类商品的销售额饼图 ```python from pyecharts.charts import Pie # 对数据进行处理,获取各类商品的销售额 category_sales = df.groupby('商品小类')['销售额'].sum() # 创建饼图 pie_chart = Pie() # 添加数据 pie_chart.add( '', [list(z) for z in zip(category_sales.index.tolist(), category_sales.tolist())], radius=['30%', '75%'], rosetype='radius' ) # 设置全局配置项 pie_chart.set_global_opts( title_opts=opts.TitleOpts(title='售货机各类商品的销售额饼图'), legend_opts=opts.LegendOpts( orient='vertical', pos_top='15%', pos_left='2%' ) ) # 设置系列配置项 pie_chart.set_series_opts( label_opts=opts.LabelOpts(formatter='{b}: {c} ({d}%)') ) # 显示图表 pie_chart.render() ``` (5)绘制2017年每月每台售货机的销售额的时间线轮播多图 ```python from pyecharts.charts import Timeline # 对数据进行处理,获取2017年每月每台售货机的销售额 monthly_sales_by_vending_machine = df[df['交易时间年份'] == 2017].groupby(['交易时间月份', '售货机编号'])['销售额'].sum().unstack() # 创建时间线轮播多图 timeline_chart = Timeline() # 添加每个时间点的图表 for month in monthly_sales_by_vending_machine.index.tolist(): bar_chart = ( Bar() .add_xaxis(monthly_sales_by_vending_machine.columns.tolist()) .add_yaxis('', monthly_sales_by_vending_machine.loc[month].tolist()) .set_global_opts( title_opts=opts.TitleOpts(title='{}年{}月每台售货机的销售额'.format(2017, month)), xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=15)) ) .set_series_opts( label_opts=opts.LabelOpts(position='top') ) ) timeline_chart.add(bar_chart, '{}年{}月'.format(2017, month)) # 显示图表 timeline_chart.render() ``` (6)绘制售货机每月各类商品的销售额柱形图与饼图的并行多图 ```python from pyecharts.charts import Grid # 对数据进行处理,获取每月各类商品的销售额 monthly_sales_by_category = df.groupby(['交易时间月份', '商品大类', '商品小类'])['销售额'].sum().reset_index() # 创建并行多图 grid_chart = ( Grid() .add( # 创建柱形图 Bar() .add_xaxis(monthly_sales_by_category[monthly_sales_by_category['商品大类'] == '饮料']['商品小类'].unique().tolist()) .add_yaxis('饮料', monthly_sales_by_category[monthly_sales_by_category['商品大类'] == '饮料']['销售额'].tolist()) .add_yaxis('零食', monthly_sales_by_category[monthly_sales_by_category['商品大类'] == '零食']['销售额'].tolist()) .set_global_opts( title_opts=opts.TitleOpts(title='售货机每月各类商品的销售额柱形图与饼图的并行多图(柱形图部分)'), xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=15)) ) .set_series_opts( label_opts=opts.LabelOpts(position='top') ), grid_opts=opts.GridOpts(pos_left='5%', pos_right='55%', pos_top='15%') ) .add( # 创建饼图 Pie() .add( '', [list(z) for z in zip( monthly_sales_by_category[monthly_sales_by_category['商品大类'] == '饮料']['商品小类'].tolist(), monthly_sales_by_category[monthly_sales_by_category['商品大类'] == '饮料']['销售额'].tolist() )], center=['75%', '50%'], radius=['30%', '75%'], rosetype='radius' ) .set_global_opts( title_opts=opts.TitleOpts(title='售货机每月各类商品的销售额柱形图与饼图的并行多图(饼图部分)'), legend_opts=opts.LegendOpts( orient='vertical', pos_top='15%', pos_left='80%' ) ) .set_series_opts( label_opts=opts.LabelOpts(formatter='{b}: {c} ({d}%)') ), grid_opts=opts.GridOpts(pos_left='60%', pos_right='5%', pos_top='15%') ) ) # 显示图表 grid_chart.render() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值