pyecharts:Pyecharts是一个用于生成Echarts图表的类库,可以与Python进行对接,方便在Python中直接使用数据生成图。Echarts是百度开源的一个数据可视化JS库,生成的图可视化效果非常棒,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可
pyecharts相关配置属性:
pyecharts模块中有很多的配置选项,常用到2个类别的选项:全局配置选项和系列配置选项
全局配置选项可以通过set_global_opts
方法来进行配置,相应的选项和选项的功能如下:
全局配置项的作用:①配置图表的标题②配置图例配置鼠标移动效果配置工具栏等整体配置项
①类:TitleOpts;②类:LegendOpts;③T类oolboxOpts;④类ToolboxFeatureOpts
系列配置选项作用:针对图标特定元素属性的配置项,包括图元样式、文本样式、标签、线条样式、标记样式等。每个配置项都对应一个类。
实例:![](https://img-blog.csdnimg.cn/direct/212632e4087b4a0db2794209aa7e44a3.png)
根据此图绘制折线图与柱形图的融合
导入所需类和模块(这里需要Bar和Line模块)用于创建柱形图和折线图
import pyecharts.options as opts
from pyecharts.charts import Bar, Line
准备数据
x_data = ["2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021"]
创建Bar类的对象
使用.add_xaxis()添加x轴的数据;
.add_yaxis()分别添加了柱形图和折线图y轴的数据,代表诊疗量,设置了标签不显示;
.label_opts()隐藏了柱状图的标签
.set_series_opts()修改了柱状图的可视化样式,设置了透明度
.extend_axis()添加了一个额外的y轴,用于折线图,表示“同比增长”
.set_global_opts()设置全局变量
title_opts=opts.TitleOpts()设置标题配置项
title="2014-2021年中国中医类医疗卫生机构诊疗量",#标题名称
pos_left="center"标题居中
z=0:因为折线图会被柱形图遮掉,所以此处把柱形图置地
bar = (
Bar()
.add_xaxis(xaxis_data=x_data)
.add_yaxis(
series_name="诊疗量(万人次)",
y_axis=["87430","90912","96225","101885","107147","116390","105764","120215"],
label_opts=opts.LabelOpts(is_show=False),
z=0
)
.set_series_opts(
itemstyle_opts={"opacity":0.5})
.extend_axis(
yaxis=opts.AxisOpts(
name="同比增速率",
type_="value",
min_=-20,
max_=20,
interval=10,
axislabel_opts=opts.LabelOpts(formatter="{value} %"),
)
)
.set_global_opts(#设置全局变量
title_opts=opts.TitleOpts(#设置标题配置项
title="2014-2021年中国中医类医疗卫生机构诊疗量",#标题名称
pos_left="center"#标题居中
),
legend_opts=opts.LegendOpts( # 设置图例配置项
pos_right="right", # 设置为水平居右
pos_bottom="bottom" # 设置为垂直居
),
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_=0,
max_=150000,
interval=50000,
#axislabel_opts=opts.LabelOpts(formatter="{value} ml"),
axistick_opts=opts.AxisTickOpts(is_show=True),
splitline_opts=opts.SplitLineOpts(is_show=True),
),
)
)
折线图配置:
- 使用
Line()
初始化折线图。 add_xaxis()
设置了折线图的 x 轴数据。add_yaxis()
添加了折线图的 y 轴数据,表示"同比增长率"。yaxis_index
指定了这个系列与之前添加的第二个 y 轴相关联。label_opts
隐藏了折线上的标签。symbol
和symbol_size
配置了数据点的符号样式和大小。itemstyle_opts
修改了折线的可视化样式,设置了边框宽度和颜色。line = ( Line() .add_xaxis(xaxis_data=x_data) .add_yaxis( series_name="同比增长率", yaxis_index=1, y_axis=[7.40,4.00,5.83,5.81,5.16,8.63,-9.13,13.66], label_opts=opts.LabelOpts(is_show=False), symbol="triangle", symbol_size=20, itemstyle_opts=opts.ItemStyleOpts( border_width=3,color="red") )
渲染:
-
bar.overlap(line)
将柱状图和折线图组合在一起。 -
bar.overlap(line).render_notebook()
-
全部代码如下:
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=["87430","90912","96225","101885","107147","116390","105764","120215"],
label_opts=opts.LabelOpts(is_show=False),
z=0
)
.set_series_opts(
itemstyle_opts={"opacity":0.5})
.extend_axis(
yaxis=opts.AxisOpts(
name="同比增速率",
type_="value",
min_=-20,
max_=20,
interval=10,
axislabel_opts=opts.LabelOpts(formatter="{value} %"),
)
)
.set_global_opts(#设置全局变量
title_opts=opts.TitleOpts(#设置标题配置项
title="2014-2021年中国中医类医疗卫生机构诊疗量",#标题名称
pos_left="center"#标题居中
),
legend_opts=opts.LegendOpts( # 设置图例配置项
pos_right="right", # 设置为水平居右
pos_bottom="bottom" # 设置为垂直居
),
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_=0,
max_=150000,
interval=50000,
#axislabel_opts=opts.LabelOpts(formatter="{value} ml"),
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.40,4.00,5.83,5.81,5.16,8.63,-9.13,13.66],
label_opts=opts.LabelOpts(is_show=False),
symbol="triangle",
symbol_size=20,
itemstyle_opts=opts.ItemStyleOpts(
border_width=3,color="red")
)
)
bar.overlap(line).render_notebook()
#bar.overlap(line).render("mixed_bar_and_line.html")
#bar.render_notebook()