zoukankan      html  css  js  c++  java
  • 【Python】matplotlib 双y轴绘制及合并图例

    1.双y轴绘制 关键函数:twinx()

      问题在于此时图例会有两个。

     1 # -*- coding: utf-8 -*-
     2 import numpy as np
     3 import matplotlib.pyplot as plt
     4 from matplotlib import rc
     5 rc('mathtext', default='regular')
     6 
     7 time = np.arange(10)
     8 temp = np.random.random(10)*30
     9 Swdown = np.random.random(10)*100-10
    10 Rn = np.random.random(10)*100-10
    11 
    12 fig = plt.figure()
    13 ax = fig.add_subplot(111)
    14 ax.plot(time, Swdown, '-', label = 'Swdown')
    15 ax.plot(time, Rn, '-', label = 'Rn')
    16 ax2 = ax.twinx()
    17 ax2.plot(time, temp, '-r', label = 'temp')
    18 ax.legend(loc=0)
    19 ax.grid()
    20 ax.set_xlabel("Time (h)")
    21 ax.set_ylabel(r"Radiation ($MJ\,m^{-2}\,d^{-1}$)")
    22 ax2.set_ylabel(r"Temperature ($^circ$C)")
    23 ax2.set_ylim(0, 35)
    24 ax.set_ylim(-20,100)
    25 ax2.legend(loc=0)
    26 plt.savefig('0.png')

      每个句柄对应一个图例。

    2. 合并图例

      1) 仅使用一个轴的legend()函数

     1 # -*- coding: utf-8 -*-
     2 import numpy as np
     3 import matplotlib.pyplot as plt
     4 from matplotlib import rc
     5 rc('mathtext', default='regular')
     6 
     7 time = np.arange(10)
     8 temp = np.random.random(10)*30
     9 Swdown = np.random.random(10)*100-10
    10 Rn = np.random.random(10)*100-10
    11 
    12 fig = plt.figure()
    13 ax = fig.add_subplot(111)
    14 
    15 lns1 = ax.plot(time, Swdown, '-', label = 'Swdown')
    16 lns2 = ax.plot(time, Rn, '-', label = 'Rn')
    17 ax2 = ax.twinx()
    18 lns3 = ax2.plot(time, temp, '-r', label = 'temp')
    19 
    20 # added these three lines
    21 lns = lns1+lns2+lns3
    22 labs = [l.get_label() for l in lns]
    23 ax.legend(lns, labs, loc=0)
    24 
    25 ax.grid()
    26 ax.set_xlabel("Time (h)")
    27 ax.set_ylabel(r"Radiation ($MJ\,m^{-2}\,d^{-1}$)")
    28 ax2.set_ylabel(r"Temperature ($^circ$C)")
    29 ax2.set_ylim(0, 35)
    30 ax.set_ylim(-20,100)
    31 plt.savefig('0.png')

      可以看到y1轴和y2轴的图例已经合并了

      2)使用figure.legend()

     1 # -*- coding: utf-8 -*-
     2 import numpy as np
     3 import matplotlib.pyplot as plt
     4 
     5 x = np.linspace(0,10)
     6 y = np.linspace(0,10)
     7 z = np.sin(x/3)**2*98
     8 
     9 fig = plt.figure()
    10 ax = fig.add_subplot(111)
    11 ax.plot(x,y, '-', label = 'Quantity 1')
    12 
    13 ax2 = ax.twinx()
    14 ax2.plot(x,z, '-r', label = 'Quantity 2')
    15 fig.legend(loc=1)
    16 
    17 ax.set_xlabel("x [units]")
    18 ax.set_ylabel(r"Quantity 1")
    19 ax2.set_ylabel(r"Quantity 2")
    20 
    21 plt.savefig('0.png')

      可以看到图例位置不对,已经出界,需要使用bbox_to_anchor和bbox_transform设置。

      fig.legend(loc=1, bbox_to_anchor=(1,1), bbox_transform=ax.transAxes)

     1 # -*- coding: utf-8 -*-
     2 import numpy as np
     3 import matplotlib.pyplot as plt
     4 
     5 x = np.linspace(0,10)
     6 y = np.linspace(0,10)
     7 z = np.sin(x/3)**2*98
     8 
     9 fig = plt.figure()
    10 ax = fig.add_subplot(111)
    11 ax.plot(x,y, '-', label = 'Quantity 1')
    12 
    13 ax2 = ax.twinx()
    14 ax2.plot(x,z, '-r', label = 'Quantity 2')
    15 fig.legend(loc=1, bbox_to_anchor=(1,1), bbox_transform=ax.transAxes)
    16 
    17 ax.set_xlabel("x [units]")
    18 ax.set_ylabel(r"Quantity 1")
    19 ax2.set_ylabel(r"Quantity 2")
    20 
    21 plt.savefig('0.png')

       可以看到图例已经正常了。

    转自:StackOverflow

  • 相关阅读:
    MySQL 性能调优之索引
    MySQL 性能调优之存储引擎
    MySQL数据类型优化—整数类型优化选择
    MySQL数据性能优化-修改方法与步骤
    MySQL设计SQL语句优化规范
    MySQL索引的设计、使用和优化
    MySQL的SQL语句优化-group by语句的优化
    SQL性能优化-order by语句的优化
    MySQL查询优化注意下面的四个细节
    优化MySQL性能的几种方法-总结
  • 原文地址:https://www.cnblogs.com/Atanisi/p/8530693.html
Copyright © 2011-2022 走看看