#|Matplotlib 绘图 双轴双图例 图

【#|Matplotlib 绘图 双轴双图例 图】
Matplotlib 绘图 双轴双图例 图

    • 创作背景
    • 分析思路
    • 结果展示
    • 结尾

创作背景 本菜鸡最近帮一个朋友画图,碰到个问题,就是需要 同一个图中要画两条折线 ,而且 还得有两个 y 轴 ,并且 显示两个图例
好家伙,乍一听还挺头大,不过细分下来也不算难。
分析思路
  1. 首先就是要 在一个图中画两条折线 ,这个不难,因为如果要传入两个 y 轴的数据的话,Matplotlib 就会自动画出来两条折线。
  2. 但第二个就有点难度,要 画双轴 ,这个可以借鉴我的 这篇博客。
  3. 这个让我犯了难,因为直接使用 plt.legend() 函数的话 只能显示次轴图的图例 ,导致我怎么都弄不出来,所以我还是去 Matplotlib Gallery 寻找一波。最后我找到的是 这个例子。
    看一下效果。
    #|Matplotlib 绘图 双轴双图例 图
    文章图片
    四个字,花里胡哨 ,不过确实显示了两个标签,所以我们还是可以借鉴一下。
    还是分析源码,但这次直奔主题,精髓在这一句:
    ax.legend((l2, l4), ('oscillatory', 'damped'), loc='upper right', shadow=True)

    使用的是 legend 函数,平常我们都是直接使用的 plt.legend() ,然后就会显示所有图像的图例。但那时候并不像现在一样绘制 双轴图 ,所以我们可以学习例子中展示的源码,给 legend 函数 传参
    让我们看一下legend 函数的官方文档。
    #|Matplotlib 绘图 双轴双图例 图
    文章图片

    1. 第一种情况就是常用的情况,不多赘述。
    2. 第二种情况就是在绘图的函数中不设置 label 参数,而在 legend 函数中传入一个 包含每个图的图例的列表 ,因为例子只有一个图,所以列表也只有一个元素。
    3. 第三种情况就是我们现在遇到的情况,需要显式地定义图例,就需要传入两个参数:
      一个是 图对象列表,也就是包含调用 plot 函数后返回的对象的列表
      另一个是 图例列表 ,也就是包含需要显式定义的图例的列表
      将这两个参数传入 legend 函数后就可以达成目标
结果展示 展示一下我画的图。
#|Matplotlib 绘图 双轴双图例 图
文章图片

结尾 以上就是我要分享的内容,因为学识尚浅,会有不足,还请各位大佬指正。
有什么问题也可在评论区留言。
#|Matplotlib 绘图 双轴双图例 图
文章图片

    推荐阅读