用pyecharts方式把柱形图和折线图融合绘制在同一个坐标系中

安装pyecharts

# 在anaconda prompt命令行工具下,通过pip清华镜像源安装pyecharts
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyecharts   

 2014-2021年中国中医类医疗卫生机构诊疗量

年份(年)诊疗量(万人次)同比增速(%)
2014874307.40
2015909124.00
2016962255.83
20171018855.81
20181071475.16
20191163908.63
2020105764-9.13
202112021513.66

步骤如下:

创建柱状图

创建一个 Bar 对象,并使用 add_xaxis 方法设置了 x 轴数据。接着,使用 add_yaxis 方法添加了一个柱状图的数据系列,其中指定了柱形图的图例名、数据和柱形图的颜色,并通过 yaxis_index 将该系列数据指定为使用第一个 y 坐标轴。另外,通过 set_series_opts 方法设置了数据系列的样式选项,包括 itemstyle_opts 用于设置图元的样式,这里将柱形图的透明度设置为0.5,使得柱形图呈现半透明的效果。

bar = (
    Bar()
    .add_xaxis(x_data)    #导入x轴
    .add_yaxis(
        "诊疗量(万人次)",         #柱形图图例名
        [87430, 90912, 96225, 101885, 107147, 116390, 105764, 120215],      #柱形图数据
        yaxis_index=0,                                                #表示y轴的索引,用于拥有多个y轴的单图表中。
        color="pink",
    ).set_series_opts(
                     itemstyle_opts=opts.ItemStyleOpts(               #图元样式配置项
                     opacity=0.5),                                    #设置柱形图透明度:0.5
        )

扩展 y 坐标轴

 extend_axis 方法,可以在同一个图表中添加多个 y 坐标轴,以展示更多的数据趋势,或者将不同量纲的数据分别展示在不同的 y 坐标轴上,从而更好地观察它们之间的关系和变化情况。使用 yaxis=opts.AxisOpts(...) 创建了一个新的 y 坐标轴,并指定了其相关属性,如名称、类型、位置等。其中,name 参数指定了 y 坐标轴的名称,position="left" 表示该坐标轴位于左侧,显示的是柱状图的数据系列;type_="value" 表示该坐标轴的类型为数值型;axisline_opts 用于设置坐标轴轴线的相关属性,如颜色等。

    .extend_axis(
        yaxis=opts.AxisOpts(
            name="诊疗量(万人次)",      #柱形图y轴名称
            type_="value",
            position="left",               #柱形图y轴在左边显示
            axisline_opts=opts.AxisLineOpts(
                linestyle_opts=opts.LineStyleOpts(color="blue") #轴名称颜色
            ),
        )
    )
    .extend_axis(
        yaxis=opts.AxisOpts(
            type_="value", 
            name="同比增速(%)",      #折线图y轴名称
            position="right",     #折线图y轴在右边显示
            axisline_opts=opts.AxisLineOpts(
                linestyle_opts=opts.LineStyleOpts(color="green")  #轴名称颜色
            )
        )
    )
)

设置全局配置项

set_global_opts 方法用于设置图表的全局配置:

  • itle_opts:用于设置标题的相关选项,如标题名称。在这里,使用了 opts.TitleOpts(title='2014-2021年中国中医类医疗卫生机构诊疗量') 设置了图表的标题为 "2014-2021年中国中医类医疗卫生机构诊疗量"。
  • legend_opts:用于设置图例的相关选项,如图例的位置。在这里,使用了 opts.LegendOpts(pos_left='45%') 将图例的位置设置为距离左边边距的 45%,即图例位于图表的右半部分。
  • tooltip_opts:用于设置提示框的相关选项,如触发方式和指示器类型。在这里,使用了 opts.TooltipOpts(trigger='axis', axis_pointer_type='cross') 设置当鼠标悬停在数据点上时,显示数据点所对应的所有系列数据,并以十字准星指示器的形式显示。
  • toolbox_opts:用于设置工具栏的相关选项,如是否显示工具栏。在这里,使用了 opts.ToolboxOpts(is_show=True) 显示工具栏。
.set_global_opts(                                             #设置全局配置项
        title_opts=opts.TitleOpts(title='2014-2021年中国中医类医疗卫生机构诊疗量'),      #标题名称
        legend_opts=opts.LegendOpts(pos_left='45%' ),                       #图例距离左边边距:40%
        tooltip_opts=opts.TooltipOpts(trigger='axis', axis_pointer_type='cross'),  #显示提示框组件
        toolbox_opts=opts.ToolboxOpts(is_show=True)  #显示工具栏
    )

创建折线图

使用 pyecharts 中的 Line 类来创建折线图,并添加了相关的数据和配置。

  • add_xaxis 方法用于添加 x 轴的数据,这里使用了变量 x_data 来指定 x 轴的数据。
  • add_yaxis 方法用于添加 y 轴的数据,其中:
    • 第一个参数是折线图的图例名称,这里设置为 "同比增速(%)"。
    • 第二个参数是折线图的数据,这里使用了一个列表来指定折线图的数据点。
    • yaxis_index=2 表示该折线图使用的是第二个 y 轴(通过前面的扩展坐标轴)。这样可以在同一张图表中同时显示柱状图和折线图,且分别使用不同的 y 轴。
    • color="#675bba" 设置折线的颜色为 "#675bba"。
    • label_opts=opts.LabelOpts(is_show=False) 表示不显示折线图上的数据标签。
line = (
    Line()
    .add_xaxis(x_data)   #导入x轴
    .add_yaxis(
        "同比增速(%)",       #折线图图例名称
        [7.40,4.00,5.83,5.81,5.16,8.63,-9.13,13.66],    #折线图数据
        yaxis_index=2,      #表示y轴的索引,用于拥有多个y轴的单图表中。
        color="orange",   #折线颜色   
        label_opts=opts.LabelOpts(is_show=False),       #不显示柱形图数据
    )
)

通过这段代码,可以将指定的数据绘制成一条折线,并将其添加到图表中。折线图的 x 轴数据由 add_xaxis 方法指定,y 轴数据由 add_yaxis 方法指定。最终的效果是在图表中显示一条折线,用以表示相应的数据趋势。

创建一个网格图

使用 pyecharts 中的 Grid 类来创建一个网格图,并将柱状图和折线图放置在同一个图表中进行展示。

  1. bar.overlap(line) 将柱状图和折线图叠加在一起,实现两者同时显示在同一个坐标系中。

  2. 创建一个 Grid 对象,并使用 grid.add 方法将叠加后的柱状图和折线图添加到网格中。这里通过设置 pos_left="10%" 和 pos_right="10%" 来调整画布距离左边和右边的空白间隔。

  3. grid.render_notebook() 将网格图渲染到 notebook 中进行展示。

bar.overlap(line)
grid = Grid()
grid.add(bar, opts.GridOpts(pos_left="10%", pos_right="10%"), is_control_axis_index=True)    #调整画布距离左边10%,距右边10%
grid.render_notebook()       #渲染到nontebook中展示

 或者也可以渲染为HTML文件

bar.overlap(line).render("2014-2021年中国中医类医疗卫生机构诊疗量.html")

详细代码如下:

from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line
 
x_data = ['2014年','2015年','2016年','2017年','2018年','2019年','2020年','2021年']            #x轴标签
bar = (
    Bar()
    .add_xaxis(x_data)    #导入x轴
    .add_yaxis(
        "诊疗量(万人次)",         #柱形图图例名
        [87430, 90912, 96225, 101885, 107147, 116390, 105764, 120215],      #柱形图数据
        yaxis_index=0,                                                #表示y轴的索引,用于拥有多个y轴的单图表中。
        color="pink",
    ).set_series_opts(
                     itemstyle_opts=opts.ItemStyleOpts(               #图元样式配置项
                     opacity=0.5),                                    #设置柱形图透明度:0.5
        )
    .extend_axis(
        yaxis=opts.AxisOpts(
            name="诊疗量(万人次)",      #柱形图y轴名称
            type_="value",
            position="left",               #柱形图y轴在左边显示
            axisline_opts=opts.AxisLineOpts(
                linestyle_opts=opts.LineStyleOpts(color="blue ") #轴名称颜色
            ),
        )
    ).set_global_opts(                                             #设置全局配置项
        title_opts=opts.TitleOpts(title='2014-2021年中国中医类医疗卫生机构诊疗量'),      #标题名称
        legend_opts=opts.LegendOpts(pos_left='45%' ),                       #图例距离左边边距:40%
        tooltip_opts=opts.TooltipOpts(trigger='axis', axis_pointer_type='cross'),  #显示提示框组件
        toolbox_opts=opts.ToolboxOpts(is_show=True)  #显示工具栏
    )
    .extend_axis(
        yaxis=opts.AxisOpts(
            type_="value", 
            name="同比增速(%)",      #折线图y轴名称
            position="right",     #折线图y轴在右边显示
            axisline_opts=opts.AxisLineOpts(
                linestyle_opts=opts.LineStyleOpts(color="green")  #轴名称颜色
            )
        )
    )
)
 
line = (
    Line()
    .add_xaxis(x_data)   #导入x轴
    .add_yaxis(
        "同比增速(%)",       #折线图图例名称
        [7.40,4.00,5.83,5.81,5.16,8.63,-9.13,13.66],    #折线图数据
        yaxis_index=2,      #表示y轴的索引,用于拥有多个y轴的单图表中。
        color="orange",   #折线颜色   
        label_opts=opts.LabelOpts(is_show=False),       #不显示柱形图数据
    )
)
 
bar.overlap(line)
grid = Grid()
grid.add(bar, opts.GridOpts(pos_left="10%", pos_right="10%"), is_control_axis_index=True)    #调整画布距离左边10%,距右边10%
grid.render_notebook()       #渲染到nontebook中展示
# 将折线图与柱状图结合并渲染为HTML文件
# bar.overlap(line).render("2014-2021年中国中医类医疗卫生机构诊疗量.html")

效果图如下:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 21
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Pyecharts 的 Grid(网格)组件来实现在一个画布绘制两个图表的效果,其柱形图折线图分别对应网格的左边和右边。 以下是一个示例代码: ```python from pyecharts import options as opts from pyecharts.charts import Bar, Line, Grid # 创建柱形图 bar = ( Bar() .add_xaxis(['A', 'B', 'C', 'D', 'E']) .add_yaxis('柱形图', [5, 20, 36, 10, 75]) .set_global_opts(title_opts=opts.TitleOpts(title='柱形图')) ) # 创建折线图 line = ( Line() .add_xaxis(['A', 'B', 'C', 'D', 'E']) .add_yaxis('折线图', [15, 30, 46, 20, 95], yaxis_index=1) .set_global_opts(title_opts=opts.TitleOpts(title='折线图')) ) # 使用网格组件将柱形图折线图合并到一个画布 grid = ( Grid() .add(bar, grid_opts=opts.GridOpts(pos_left='5%', pos_right='50%')) .add(line, grid_opts=opts.GridOpts(pos_left='55%', pos_right='5%')) ) # 渲染图表 grid.render('bar_and_line.html') ``` 上述代码,首先创建了一个柱形图一个折线图柱形图使用 `Bar` 类创建,折线图使用 `Line` 类创建,它们都通过 `add_xaxis` 和 `add_yaxis` 方法设置了横坐标和纵坐标的数据。需要注意的是,折线图的纵坐标需要通过 `yaxis_index` 参数指定为右边的纵坐标轴。 接下来使用 `Grid` 类创建了一个网格组件,通过 `add` 方法将柱形图折线图添加到网格,设置了两个网格的位置,其柱形图占据了左边的网格,折线图占据了右边的网格。 最后调用 `render` 方法将图表渲染为 HTML 文件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值