文章目录(Table of Contents)
前言-说明
这一篇说一下绘制主次坐标的方式。这种图可以适用于当你有两组数组,两组数据的数量级相差较大(如果用同一个y轴进行绘制,数据较小的会看不出趋势),但是想要比较两组数据的趋势。这种时候使用主次坐标图是一个很好的选择。
主次坐标图绘制
在这里我就直接贴出代码,注释已经写好了,很容易能看懂。
- import numpy as np
- import pandas as pd
- from matplotlib import pyplot as plt
- from matplotlib.lines import Line2D
- import seaborn as sns
- %matplotlib inline
- # ----------
- # 生成样例数据
- # ----------
- x = np.linspace(0,10,15)
- y_data1 = np.random.rand(15)
- y_data2 = 5 * y_data1 + 5 * np.random.rand(15)
- # -------
- # 进行绘图
- # -------
- sns.set()
- # 画出双坐标轴图像
- fig, ax1 = plt.subplots(figsize=(9, 5),dpi=100)
- ax2 = ax1.twinx()
- # 这里获取图为了后面添加图例
- l1, = ax1.plot(x, y_data1, 'darkorange')
- l2, = ax2.plot(x, y_data2, 'royalblue')
- # 设置x,y轴文字说明
- ax1.set_xlabel('date')
- ax1.set_ylabel('Y1,drunken_conflict_rate')
- ax2.set_ylabel('Y2,drunken_conflict_hurt_rate')
- # 设置图例
- plt.legend(handles = [l1, l2,], labels = ['data_1', 'data_2'], loc='best')
- # 设置标题
- ax1.set_title('Primary and Secondary Coordinates')
- # -------
- # 绘制直线
- # -------
- # 两条line的数据
- line1 = [(2, 0), (2, 1)]
- line2 = [(7, 0), (7, 1)]
- (line1_xs, line1_ys) = zip(*line1)
- (line2_xs, line2_ys) = zip(*line2)
- # 创建两条线,并添加
- ax1.add_line(Line2D(line1_xs, line1_ys, linewidth=1, color='black'))
- ax1.add_line(Line2D(line2_xs, line2_ys, linewidth=1, color='black'))
- # 显示图像
- plt.show()
绘制出的图像如上所示,可以看到图的左右两边的y轴的刻度不一样,左边的范围是0-1,右边的范围是0-10.
主次坐标轴绘制图例
有的时候使用上面的方式是无法同时将主次坐标的图例画出来,这个时候可以使用下面的方式来进行绘制,也就是不要使用 plt.legend() 或是 ax.legend() 的方式绘制,而是直接使用 fig.legend()
来进行绘制:
- fig.legend(fontsize=17, bbox_to_anchor=(0.83, 0.87))
参考资料,Secondary axis with twinx(): how to add to legend?
上面就是主次坐标轴的一些画法,下面随便讲讲吧。
结语
上一次写随笔还是2018-06-07小记,已经过去一个月了。这一个月的时间我也从本科毕业了。虽说现在还在学校上暑期学校,但是感觉变化还是挺大的,身边的人又是换了一批吧,分别的时候真的感觉时间好快呀,四年本科就结束了,但是四年间发生的事情还历历在目。
自己一直还没有整理毕业那段时间拍的照片,之后肯定会整理一下发出来的。下面这段话是今天在网易云听歌的时候看到的评论。最近在学校里走路,总会想起和前女友在一起的点滴吧。
- 微信公众号
- 关注微信公众号
- QQ群
- 我们的QQ群号
评论