创作背景
本菜鸡最近帮一个朋友画图,碰到个问题,就是需要 同一个图中要画两条折线
,而且 还得有两个 y 轴
,并且 显示两个图例
。
好家伙,乍一听还挺头大,不过细分下来也不算难。
分析思路
-
首先就是要
在一个图中画两条折线
,这个不难,因为如果要传入两个 y 轴的数据的话,Matplotlib
就会自动画出来两条折线。 -
但第二个就有点难度,要
画双轴
,这个可以借鉴我的 这篇博客。 -
这个让我犯了难,因为直接使用
plt.legend()
函数的话只能显示次轴图的图例
,导致我怎么都弄不出来,所以我还是去 Matplotlib Gallery 寻找一波。最后我找到的是 这个例子。
看一下效果。
四个字,花里胡哨
,不过确实显示了两个标签,所以我们还是可以借鉴一下。还是分析源码,但这次直奔主题,精髓在这一句:
ax.legend((l2, l4), ('oscillatory', 'damped'), loc='upper right', shadow=True)
使用的是
legend
函数,平常我们都是直接使用的plt.legend()
,然后就会显示所有图像的图例。但那时候并不像现在一样绘制双轴图
,所以我们可以学习例子中展示的源码,给legend
函数传参
。让我们看一下
legend
函数的官方文档。
-
第一种情况就是常用的情况,不多赘述。
-
第二种情况就是在绘图的函数中不设置
label
参数,而在legend
函数中传入一个包含每个图的图例的列表
,因为例子只有一个图,所以列表也只有一个元素。 -
第三种情况就是我们现在遇到的情况,需要显式地定义图例,就需要传入两个参数:
一个是
图对象列表
,也就是包含调用plot
函数后返回的对象的列表
另一个是图例列表
,也就是包含需要显式定义的图例的列表将这两个参数传入
legend
函数后就可以达成目标
-
结果展示
展示一下我画的图。
结尾
以上就是我要分享的内容,因为学识尚浅,会有不足,还请各位大佬指正。
有什么问题也可在评论区留言。