需求:
请用一张独立画布,柱形图和折线图融合在同一个坐标系展示表1数据
解释:
通过调用twinx方法创建一个新的坐标系实例,这个新的坐标系实例的x轴跟传入坐标系实例的x轴完全共享,但跟y轴是完全独立,且位于右侧。
共享y轴把twinx的x改为y。
使用pyplot 的subplots(函数可以在规划好的所有区域中一次绘制多个子图。subplots()函数的语法格式如下:
subplots (nrows=l, ncols-1, sharex-Palse, sharey-Falce, squeeze-True, subplot_kw=None, gridspec_kw=None,**fig_kw)该函数常用参数的含义如下。
·nrows :表示规划区域的行数,默认为1。·ncols :表示规划区域的列数,默认为1。
· sharex,sharey :表示是否共享子图的x轴或y轴。
·squeeze :表示是否返回压缩的Axes对象数组,默认为True。当squeeze为True 时,若nrows 和 ncols均为 1,则 subplots()函数会返回一个 Axes对象;若nrows和ncols均大于1,则 subplots() 函数会返回一个Axes对象数组。当参数squeeze为False时,subplots(函数会返回一个包含Axes 对象的二维数组。
.gridspec_kw :表示用于控制区域结构属性的字典。
subplots(函数会返回一个包含两个元素的元组,其中元组的第一个元素为Figure对象
个元素为Axes对象或Axes对象数组。
运行代码:
# matplotlib中文网 https://www.matplotlib.org
%matplotlib notebook
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
# 1.准备数据
year_x = np.arange(1, 9, 1) # X轴刻度值(1-12)
data_1 = np.array([7.40, 4.00, 5.83, 5.81, 5.16, 8.63, # 平均气温
-9.13, 13.66])
data_2 = np.array([87430, 90912, 96225, 101885, 107147, 116390, # 降水量
105764, 120215])
# 2.创建第一个坐标系实例
fig, ax = plt.subplots() # 默认为1行1列
ax.set_ylabel('诊疗量 (万人次)')
bar_ev = ax.bar(year_x, data_2, color='green',
tick_label=['2014年', '2015年', '2016年', '2017年', '2018年', '2019年',
'2020年', '2021年'])
# 4.创建共享x轴的第二个坐标系实例
ax_right = ax.twinx()
# 5.在第二个坐标系实例绘制折线图
line = ax_right.plot(year_x, data_1, 'mo-')
ax_right.set_ylabel(r'同比增速(%)')
plt.title("2014-2021年中国医学类医疗卫生机构诊疗量")
# 6.展示图表
plt.show()