Atanisi

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

分类:

技术点:

相关文章:

  • 2021-11-28
  • 2021-07-17
  • 2021-08-26
  • 2021-12-08
猜你喜欢
  • 2021-05-31
  • 2020-06-12
  • 2021-09-11
  • 2021-08-06
  • 2021-04-24
  • 2021-09-28
  • 2021-11-28
相关资源
相似解决方案