数据可视化是现代数据分析中不可或缺的一部分。它可以帮助我们更直观地理解数据,并揭示数据背后的趋势和模式。在本文中,我将向您展示如何使用Python中的Pyecharts库来创建一个结合柱状图和折线图的混合图表,用以展示2014年至2021年中国中医类医疗卫生机构的诊疗量及其同比增速。
数据概览:
在开始绘图之前,让我们先看一下我们将要可视化的数据:
2014-2021年中国中医类医疗卫生机构诊疗量
年份(年) | 诊疗量(万人次) | 同比增速(%) |
2014 | 87430 | 7.40 |
2015 | 90912 | 4.00 |
2016 | 96225 | 5.83 |
2017 | 107147 | 5.16 |
2018 | 116390 | 8.63 |
2019 | 116390 | 8.63 |
2020 | 105764 | -9.13 |
2021 | 120215 | 13.66 |
从表格中我们可以看出,除了2020年诊疗量有所下降外,其他年份的诊疗量都呈现出增长的趋势,且2021年的增速达到了13.66%,显示了较强的恢复势头。
可视化实现:
为了将这些数据转换为图表,我们将使用pyecharts
库中的Bar
(柱状图)和Line
(折线图)类。以下是各步骤拆分
import pyecharts.options as opts
from pyecharts.charts import Bar, Line
这两行代码是导入pyecharts
库中的模块。opts
模块包含了设置图表选项的类,而Bar
和Line
类分别用于创建柱状图和折线图。
x_data = ["2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021"]
这行代码定义了一个列表x_data
,包含了所有年份的数据,这些年份将被用作图表的X轴数据。
bar = (
Bar()
这里开始创建一个柱状图实例。
.add_xaxis(xaxis_data=x_data)
通过.add_xaxis()
方法给柱状图添加X轴数据,即之前定义的年份列表。
.add_yaxis(
series_name="诊疗量(万人次)",
y_axis=[87.43, 90.91, 96.22, 101.89, 107.15, 116.39, 105.76, 120.22],
label_opts=opts.LabelOpts(is_show=True),
)
这里通过.add_yaxis()
方法添加Y轴数据,设置系列名称为“诊疗量(万人次)”,并传入对应每年的诊疗量数据。label_opts
设置为显示标签,即在每个柱形图顶部显示数值。
.extend_axis(
yaxis=opts.AxisOpts(
name="同比增速(%)",
type_="value",
min_=-75,
max_=20,
interval=5,
axislabel_opts=opts.LabelOpts(formatter="{value} %"),
)
)
这里使用.extend_axis()
方法扩展一个额外的Y轴,用于显示同比增速的百分比。设置其最小值、最大值和间隔,并通过formatter
格式化Y轴上的标签,使其以百分比形式显示。
.set_global_opts(
tooltip_opts=opts.TooltipOpts(
is_show=True, trigger="axis", axis_pointer_type="cross"
),
xaxis_opts=opts.AxisOpts(
type_="category",
axispointer_opts=opts.AxisPointerOpts(is_show=True, type_="shadow"),
),
yaxis_opts=opts.AxisOpts(
name="诊疗量(万人次)",
type_="value",
min_=50,
max_=150,
interval=10,
axislabel_opts=opts.LabelOpts(formatter="{value} 万人次"),
axistick_opts=opts.AxisTickOpts(is_show=True),
splitline_opts=opts.SplitLineOpts(is_show=True),
),
)
.set_global_opts()方法用于设置图表的全局配置选项:
- tooltip_opts设置提示框组件,当鼠标悬停时显示更多信息。
- xaxis_opts设置X轴的类型为分类轴,并启用指针效果。
- yaxis_opts设置Y轴的名称、类型、最小值、最大值、间隔以及标签格式。此外,还设置了轴刻度和分割线的可见性。
line = ( Line()
这里开始创建一个折线图实例。
.add_xaxis(xaxis_data=x_data)
给折线图添加X轴数据。
.add_yaxis(
series_name="同比增速(%)",
yaxis_index=1,
y_axis=[7.4, 4.0, 5.83, 5.81, 5.16, 8.63, -9.13, 13.66],
label_opts=opts.LabelOpts(is_show=True),
)
通过.add_yaxis()
方法添加Y轴数据,设置系列名称为“同比增速(%)”,并传入对应每年的同比增速数据。yaxis_index=1
指定这组数据使用之前扩展的额外Y轴。label_opts
设置为显示标签。
bar.overlap(line).render("2014-2021年中国中医类医疗卫生机构诊疗量.html")
最后,使用.overlap()
方法将折线图叠加到柱状图上,然后通过.render()
方法生成一个名为"2014-2021年中国中医类医疗卫生机构诊疗量.html"
的HTML文件,其中包含了我们创建的混合图表。这个文件可以用浏览器打开查看图表。
以下是完整的代码实现:
import pyecharts.options as opts
from pyecharts.charts import Bar, Line
x_data = ["2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021"]
# 创建柱状图
bar = (
Bar()
.add_xaxis(xaxis_data=x_data)
.add_yaxis(
series_name="诊疗量(万人次)",
y_axis=[87.43, 90.91, 96.22, 101.89, 107.15, 116.39, 105.76, 120.22],
label_opts=opts.LabelOpts(is_show=True),
)
# 扩展额外的y轴来显示同比增速
.extend_axis(
yaxis=opts.AxisOpts(
name="同比增速(%)",
type_="value",
min_=-75,
max_=20,
interval=5,
axislabel_opts=opts.LabelOpts(formatter="{value} %"),
)
)
# 设置全局选项
.set_global_opts(
tooltip_opts=opts.TooltipOpts(
is_show=True, trigger="axis", axis_pointer_type="cross"
),
xaxis_opts=opts.AxisOpts(
type_="category",
axispointer_opts=opts.AxisPointerOpts(is_show=True, type_="shadow"),
),
yaxis_opts=opts.AxisOpts(
name="诊疗量(万人次)",
type_="value",
min_=50,
max_=150,
interval=10,
axislabel_opts=opts.LabelOpts(formatter="{value} 万人次"),
axistick_opts=opts.AxisTickOpts(is_show=True),
splitline_opts=opts.SplitLineOpts(is_show=True),
),
)
)
# 创建折线图
line = (
Line()
.add_xaxis(xaxis_data=x_data)
.add_yaxis(
series_name="同比增速(%)",
yaxis_index=1,
y_axis=[7.4, 4.0, 5.83, 5.81, 5.16, 8.63, -9.13, 13.66],
label_opts=opts.LabelOpts(is_show=True),
)
)
# 将折线图与柱状图结合并渲染为HTML文件
bar.overlap(line).render("2014-2021年中国中医类医疗卫生机构诊疗量.html")
在这段代码中,我们首先创建了一个柱状图实例,并添加了诊疗量数据。然后,我们扩展了一个额外的y轴来显示同比增速。接着,我们创建了一个折线图实例,并将其与柱状图叠加在一起。最后,我们将图表渲染成一个HTML文件,可以在任何支持HTML和JavaScript的浏览器中查看。
输出展示:
图表解读:
生成的图表将同时显示两种类型的数据:诊疗量用柱状图表示,而同比增速则用折线图表示。这种组合图表的优点在于能够让我们一目了然地看到两种数据之间的关系。例如,我们可以清楚地看到2020年的诊疗量下降对应了负的同比增速,而2021年的增速回升显著。
通过这样的可视化,我们不仅可以更好地理解数据的历史走势,还可以发现潜在的模式和异常值。例如,我们可能会进一步探究2020年诊疗量下降的原因,以及2021年增速显著上升的驱动因素。
结论:
pyecharts是一个强大的库,它提供了一种简单而有效的方式来创建交互式和美观的图表。通过结合柱状图和折线图,我们能够在同一个坐标系中展示相关的多维数据,从而提供更深入的洞察。无论是数据分析师、研究人员还是业务决策者,这样的图表都是传达复杂信息的有力工具。