根据下列要求绘制图表:
图1:柱形-折线图代码如下:
#1.绘制柱形图
#导入模版
from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line,Pie,Radar
#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='orange'
)
.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(pos_left="0%" ), #图例距离左边边距:0%
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"), #显示提示框组件
)
.set_series_opts(
itemstyle_opts=opts.ItemStyleOpts( #图元样式配置项
opacity=0.5), #设置柱形图透明度:0.5
)
)
line = (
Line() #创建Line类的对象
.add_xaxis(x_data) #添加x轴的数据
.add_yaxis(
series_name="同比增速(%)", #图例名:同比增速(%)
y_axis=value2, #y轴折线图数据
yaxis_index=2, #表示y轴的索引,用于拥有多个y轴的单图表中。
)
)
c=bar.overlap(line)
c.render_notebook()
运行如图所示:
图2:堆积柱形图代码如下:
#3.堆积柱形图
#导入模版
from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line,Pie,Radar
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='blue', #stack="stack1":堆积柱形图
label_opts=opts.LabelOpts(is_show=False) #不显示柱形图数据
)
.add_yaxis("本土企业占比", data2, stack="stack1", category_gap="80%",color='orange',
label_opts=opts.LabelOpts(is_show=False) #不显示柱形图数据
)
.set_global_opts( #设置全局配置项
title_opts=opts.TitleOpts(title="全国药店中药饮片供应商占比"),
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:环形图代码如下:
# 4.绘制环形图(放在堆积图后面)
#导入模版
from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line,Pie,Radar
#添加标签与数值
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=["50%", "50%"], # 饼图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标
radius=["30%", "50%"] #饼图的半径,数组的第一项是内半径,第二项是外半径
)
.set_global_opts( #设置全局配置项
title_opts=opts.TitleOpts(title="中药材消费者画像", )
)
)
pie.render_notebook()
运行如图所示:
图4:雷达图代码如下:
#5.绘制雷达图
from pyecharts import options as opts
from pyecharts.charts import Radar
data = [{"value":[33,45,3,9,10], "name": "全国药店药品销售额占比"}] #各药品类型占比的值
c_schema = [
{"name": '化学药', "max": 50, "min": 0}, #药品类型
{"name": '中成药', "max": 50, "min": 0},
{"name": '生物制品', "max": 50, "min": 0},
{"name": '保健品', "max": 50, "min": 0},
{"name": '中药饮片', "max": 50, "min": 0},
]
radar= (
Radar()
.set_colors(["#4587E7"])
.add_schema(
schema=c_schema,
shape="circle",
center=["50%", "50%"],
radius="80%",
angleaxis_opts=opts.AngleAxisOpts(
min_=0,
max_=360,
is_clockwise=False,
interval=5,
axistick_opts=opts.AxisTickOpts(is_show=False),
axislabel_opts=opts.LabelOpts(is_show=False),
axisline_opts=opts.AxisLineOpts(is_show=False),
splitline_opts=opts.SplitLineOpts(is_show=False),
),
radiusaxis_opts=opts.RadiusAxisOpts(
min_=-4,
max_=4,
interval=2,
splitarea_opts=opts.SplitAreaOpts(
is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
),
),
polar_opts=opts.PolarOpts(),
splitarea_opt=opts.SplitAreaOpts(is_show=False),
splitline_opt=opts.SplitLineOpts(is_show=False),
)
.add(
series_name="全国各药品",
data=data,
areastyle_opts=opts.AreaStyleOpts(opacity=0.1),
linestyle_opts=opts.LineStyleOpts(width=1),
)
.set_global_opts( #设置全局配置项
title_opts=opts.TitleOpts(title="全国药店药品销售额占比"), #标题名称
# legend_opts=opts.LegendOpts(is_show=False ), #不显示图例
)
)
radar.render_notebook()
运行如图所示:
图5:并行多图代码如下:
#导入模版
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='orange'
)
.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.5), #设置柱形图透明度:0.5
)
)
line = (
Line() #创建Line类的对象
.add_xaxis(x_data) #添加x轴的数据
.add_yaxis(
series_name="同比增速(%)", #图例名:同比增速(%)
y_axis=value2, #y轴折线图数据
yaxis_index=2, #表示y轴的索引,用于拥有多个y轴的单图表中。
)
)
#3.堆积柱形图
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='blue', #stack="stack1":堆积柱形图
xaxis_index=1,
yaxis_index=3,
label_opts=opts.LabelOpts(is_show=False) #不显示柱形图数据
)
.add_yaxis("本土企业占比", data2, stack="stack1", category_gap="80%",color='orange',
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()
# 4.绘制环形图(放在堆积图后面)
#添加标签与数值
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()
#5.创建一个组合图表实例(数据填充格式为:其他图表实例,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 这四个参数,实现并行组合图表中的任意布局
grid.render_notebook()
运行如图所示: