Matplotlib 三个Y轴显示

前面学习了两个Y轴的数据显示,在matplotlib里有直接的函数支持显示,因此显示两个Y轴的数据是很容易实现的,当然两个Y轴的情况也是最常用的情况,在很多数据显示里都会使用到,但是三个Y轴或者更多的Y轴,也偶尔会使用到的,那么怎么样实现呢?本文将来探索一种三Y轴或者多Y轴的不一样的实现方式。所谓的不一样,不是使用matplotlib里原生的Y轴,而是使用文本字符来构造Y轴的一种方式,这种方式胜在简单,理解起来也非常容易。因为它只是使用字符“|”连接起来而画出一条Y轴,而不是使用直线画出来,另外它采用字符“_“来构造成刻度线。

先来感受一下这种画Y轴的图,如下:

Matplotlib三个Y轴显示

在上图的第三条Y轴就是使用字符构成的,它表示的是绿色的曲线,所以它的颜色也是绿色的。采用这种的方式显示,可以构造很多条Y轴,并且代码量非常少,只要采用下面几行代码就可以构造了一条Y轴:

for y in np.arange(100, -1, -20):

a = y/100

a = str(a)

plt.text(162, y, a, color = 'g')

plt.text(159, y+2, '_', color = 'g')



for y in np.arange(1, 99, 3):

plt.text(157, y, '|', color = 'g')

前面的for循环主要计算刻度线和数值显示,后面的for循环主要是画Y轴线,它是采用字符“|”来实现的。

采用这种方式画出来的Y轴线显示与原来的Y轴的线有点差异,只适合做一般演示作用。如果想构造出来一样的Y轴直线,需要使用到寄生轴的方式来实现,后面的文章将会讨论这种情况,不过代码也比这种实现方式多一些,要理解的函数也要多一些。这些将在后面的文章里学习,现在先不讨论它。



接着你或许关心上图的例子代码:

import numpy as np
import matplotlib.pyplot as plt


#定义显示的数据
x = [20, 40, 60, 80, 100, 120, 140]
T = [30, 50, 30, 46, 70, 43, 80]
P = [1.0, 2.0, 4.0, 6.0, 6.0, 5.5, 7.0]
V = [0.6, 0.58, 0.55, 0.45, 0.35, 0.25, 0.15]

#设置绘图区域,显示坐标轴和网格线
plt.figure('deepinout.com 极客笔记')
plt.axis([0, 140, 0, 100])
plt.axis('on')
plt.grid(True)

#放大数据显示
pp = []
for i in np.arange(0, len(P), 1):
    pp.append(P[i]*10)

vv = []
for i in np.arange(0, len(V), 1):
    vv.append(V[i]*100)

plt.plot(x, T, color = 'r', label = 'Temperature', marker = 'o')
plt.plot(x, pp, color = 'b', label = 'Pressure', marker = 's')
plt.plot(x, vv, color = 'g', label = 'Volume', marker = 'd')

plt.legend(loc = 'upper left')

#设置刻度
for y in np.arange(0, 100+1, 20):
    a = y/10
    a = str(a)
    plt.text(142, y, a, color = 'b')
#
plt.xlabel('Time')
plt.ylabel('Temperature', color = 'r')
plt.text(151, 65, 'Pressure', rotation = 90, color = 'b')

#构造第三条Y轴
for y in np.arange(100, -1, -20):
    a = y/100
    a = str(a)
    plt.text(162, y, a, color = 'g')
    plt.text(159, y+2, '_', color = 'g')

for y in np.arange(1, 99, 3):
    plt.text(157, y, '|', color = 'g')


plt.show()
赞(0)
未经允许不得转载:极客笔记 » Matplotlib 三个Y轴显示
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址