绘制双y轴的思想,也是用到了matplotlib面向对象绘图的思想。在不指定位置的情况下,在一个画布上创建出两个坐标系,其中第一个坐标系正常创建,第二个坐标系则使用专有的twinx()方法创建。
则两个坐标系的位置重合。第一个坐标系轴在左,通过twinx()方法创建出的坐标系则轴在右。因为有了两个y轴,所以再对y轴属性进行操作的时候,则需要面向对象,如果再简单地使用plt.ylabel()等方法,则只能操作到左轴,而影响不到右轴。
下边做一个示例,首先是导包和准备数据,这里准备一组销量数据,并计算其增长率,将其体现在右轴。
具体代码如下:
import matplotlib.pyplot as plt # 生成一组数据 x = range(7) y1 = [2000, 1600, 3000, 6200, 7000, 9800, 11000] y2 = [1] for i in range(len(y1)): if i+1 == len(y1): break rate = round(y1[i+1]/y1[i] - 1, 2) y2.append(rate) fig = plt.figure(figsize=(10, 8), facecolor='#ff33ff') # 字体使用楷体 plt.rcParams['font.sans-serif'] = ['STKAITI'] plt.rcParams['axes.unicode_minus'] = False # 背景色为cc00ff plt.rcParams['axes.facecolor'] = '#cc00ff' ax1 = fig.add_subplot(111) plt.title('销售量及其增长率图示', color='#ffff00', fontsize=25, y=1.04) plt.xticks(x, ['1月', '2月', '3月', '4月', '5月', '6月', '7月'], color='#ffff00', fontsize=15) plt.xlabel('月份', color='#ff0033', fontsize=15) plt.yticks(color='#B22222', fontsize=15) ax1.bar(x, y1, color='#33ff66', label='left') ax1.set_ylabel('销售量(件)', color='#66ff00', fontsize=20) # 增加一条坐标轴 ax2 = ax1.twinx() ax2.plot(x, y2, color='#3399ff', linestyle='--', marker='o', linewidth=2) ax2.set_ylabel("增长率", color='#66ff00', fontsize=20) ax2.tick_params(axis='y', color='green', labelsize=15, labelcolor='#B22222') for a, b in zip(x, y2): plt.text(a, b+0.02, '%.2f' % b, ha='center', va='bottom', fontsize=15, color='red') plt.show()
图像效果如下图: