Matplotlib 四个Y轴显示

Matplotlib 三个Y轴显示学习了三个Y轴的方式实现,一般情况下的数据显示,可以解决了问题,也可以完成了实验报告了。如果你还有更多的因素相互一起,比如四个Y轴,那么又要怎么办呢?本文将要解决这种问题,无论你是四个Y轴,还是五个Y轴,都可以按照这种方式来解决,以便解决对于Y轴多少的担忧。

创建一个寄生轴,这些轴将与主体轴共享x比例,但在y方向显示不同的比例。往往在画图里,比如时间是一条公共的主轴,也就是共享的X轴,因为时间都是相同的比例,然后另外一条Y轴可以表示房价,一条Y轴可以表示面积,一条Y轴表示与地铁站的位置,一条Y轴表示与学校的位置等等。

这里采用寄生轴的方式实现多Y轴实现,与前面采用文本方式实现、以及采用隐藏方式实现有点不同,它是采用mpl_toolkits.axisartist.parasite_axes里的HostAxes,和ParasiteAxes。首先是要创建主轴用HostAxes(figure,[ 左,下,宽,高 ]) 然后寄生出独立的y轴来,并共享x轴。独立的y轴对应独立的曲线 将寄生轴加入主轴的列表。第一根寄生轴可以直接借用原坐标的右轴,所以不需要新增轴,如果需要两个以上的y轴,第三个y轴就要新建固定轴了,要用到get_grid_helper().new_fixed_axis 设置第三及更多Y轴的偏移量 将主轴装载到figure上 设置轴的外面特性,比如颜色,刻度范围等

本文里将编写代码实现如下图:

Matplotlib四个Y轴显示

可以看到,在右边添加了两条新的Y轴,就对应多了两条曲线数据。接着下来看一下代码的实现过程,首先引入寄生轴的库:

from mpl_toolkits.axisartist.parasite_axes import HostAxes, ParasiteAxes

这行代码主要导入两个函数HostAxes和ParasiteAxes,HostAxes函数负责创建主坐标系,ParasiteAxes负责创建辅助坐标系,通过参数sharex=host来设置共享X轴的坐标。ParasiteAxes函数调用了三遍,这样就创建了三个Y轴,与原来的主坐标系里Y轴,就构成了四个Y轴。

host.parasites.append(par1)

这行代码是把寄生轴添加主坐标轴里。



offset = (40, 0)

new_axisline = par2.get_grid_helper().new_fixed_axis

par2.axis["right2"] = new_axisline(loc="right", axes=par2, offset=offset)

这段代码就是实现添加一个新的寄生轴。offset是一个相对位置,right是表示在原来坐标轴的右边,X轴的方向偏移40个单位的地方显示。

offset = (100, 0)

new_axisline = par3.get_grid_helper().new_fixed_axis

par3.axis["right2"] = new_axisline(loc="right", axes=par3, offset=offset)

上面这段代码同样增加第四条Y轴,跟第三条Y轴是一样的。

fig.add_axes(host)

最后把四个Y轴的坐标系添加到画布上面,这样形成了整个绘图区域。其它的代码,都是跟前面的例子是一样,设置坐标轴的标签、颜色、刻度的颜色,以及图例显示。

整个例子的代码如下:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axisartist.parasite_axes import HostAxes, ParasiteAxes


#定义显示的数据
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]
H = [1.6, 1.58, 1.55, 1.45, 1.35, 1.25, 1.15]
#
fig = plt.figure('deepinout.com 极客笔记')

host = HostAxes(fig, [0.10, 0.1, 0.65, 0.8])
par1 = ParasiteAxes(host, sharex=host)
par2 = ParasiteAxes(host, sharex=host)
par3 = ParasiteAxes(host, sharex=host)

host.parasites.append(par1)
host.parasites.append(par2)
host.parasites.append(par3)
host.axis["right"].set_visible(False)

par1.axis["right"].set_visible(True)
par1.axis["right"].major_ticklabels.set_visible(True)
par1.axis["right"].label.set_visible(True)

#设置每条轴的名称
host.set_xlabel("Time")
host.set_ylabel("Temperature")
par1.set_ylabel("Pressure")
par2.set_ylabel("Volume")
par3.set_ylabel("Heat")

# 于 offset 处新建一条纵坐标
offset = (40, 0)
new_axisline = par2.get_grid_helper().new_fixed_axis
par2.axis["right2"] = new_axisline(loc="right", axes=par2, offset=offset)

#新建第四条纵坐标轴
offset = (100, 0)
new_axisline = par3.get_grid_helper().new_fixed_axis
par3.axis["right2"] = new_axisline(loc="right", axes=par3, offset=offset)

fig.add_axes(host)

#画三条曲线
p1, = host.plot(x, T, "b-", label="Temperature")
p2, = par1.plot(x, P, "r-", label="Pressure")
p3, = par2.plot(x, V, "g-", label="Volume")
p4, = par3.plot(x, H, "c-", label="Heat")

#设置X和三条Y轴的刻度范围
host.set_xlim(0, 150)
host.set_ylim(0, 100)
par1.set_ylim(0, 10)
par2.set_ylim(0, 2)
par3.set_ylim(0, 2)

#设置轴名称的颜色
host.axis["left"].label.set_color(p1.get_color())
par1.axis["right"].label.set_color(p2.get_color())
par2.axis["right2"].label.set_color(p3.get_color())
par3.axis["right2"].label.set_color(p4.get_color())

#设置轴刻度线的颜色
host.axis["left"].major_ticks.set_color(p1.get_color())
par1.axis["right"].major_ticks.set_color(p2.get_color())
par2.axis["right2"].major_ticks.set_color(p3.get_color())
par3.axis["right2"].major_ticks.set_color(p4.get_color())

host.axis["left"].major_ticklabels.set_color(p1.get_color())
par1.axis["right"].major_ticklabels.set_color(p2.get_color())
par2.axis["right2"].major_ticklabels.set_color(p3.get_color())
par3.axis["right2"].major_ticklabels.set_color(p4.get_color())


#生成图例
lines = [p1, p2, p3, p4]
host.legend(lines, [l.get_label() for l in lines])

plt.show()

赞(3)
未经允许不得转载:极客笔记 » Matplotlib 四个Y轴显示

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
Matplotlib 入门
Matplotlib 入门Matplotlib 安装之Linux操作系统Matplotlib 安装之Windows系统Matplotlib 安装之Mac OS X系统Matplotlib 安装之使用 Windows Installer安装程序Matplotlib 使用*.whl文件快速安装Matplotlib 绘图区域Matplotlib 设置绘图区域大小Matplotlib 网格线的颜色和刻度Matplotlib 坐标轴的标签和标题Matplotlib 指南Matplotlib pyplot指南
Matplotlib 几何图形
Matplotlib 画直线Matplotlib 图形失真Matplotlib 画圆弧示意图Matplotlib 用直线方式画圆Matplotlib 画椭圆示意图Matplotlib 画旋转向量示意图Matplotlib 使用patches绘制几何图形Matplotlib 使用模块patches的Wedge实现饼图Matplotlib 嵌套子图显示Matplotlib 两个子图显示
Matplotlib 颜色
Matplotlib 颜色Matplotlib 多边形颜色填充Matplotlib 不规则颜色填充Matplotlib 条件选择区域颜色填充
Matplotlib 坐标轴
Matplotlib 辅助指示坐标轴Matplotlib 公式显示Matplotlib 显示数学曲线Matplotlib 同一坐标里显示多条曲线Matplotlib 同一坐标里双Y轴显示Matplotlib 双Y轴显示时把图例显示到一起Matplotlib 三个Y轴显示Matplotlib 隐藏刻度方式显示三个Y轴Matplotlib 四个Y轴显示Matplotlib 一元线性回归显示Matplotlib X轴日期显示Matplotlib X轴年份采用四位显示Matplotlib X轴按小时显示Matplotlib X轴设置为弧度坐标Matplotlib X轴显示角度Matplotlib X轴显示特殊的标签Matplotlib 移动坐标轴位置Matplotlib 与数据区图像相对位置移动坐标轴位置
Matplotlib 函数
Matplotlib 函数plot 展现变量的趋势变化Matplotlib 函数plot 创建带文本标签的折线图Matplotlib 函数scatter 寻找变量之间的关系Matplotlib 函数xlim 设置x轴的数值显示范围Matplotlib 函数xlabel 设置x轴的标签文本Matplotlib 函数grid 绘制刻度线的网格线Matplotlib 函数axhline 绘制平行于x轴的水平参考线Matplotlib 函数axvspan 绘制垂直于x轴的参考区域Matplotlib 函数annotate 添加图形内容细节的指向型注释文本Matplotlib 函数text 添加图形内容细节的无指向型注释文本Matplotlib 函数title 添加图形内容的标题Matplotlib 函数legend 标示不同图形的文本标签图例Matplotlib 函数bar 用于绘制柱状图Matplotlib 函数barh 用于绘制条形图Matplotlib 函数hist 用于绘制直方图Matplotlib 函数pie 用于绘制饼图Matplotlib 函数polar 用于绘制极线图Matplotlib 函数scatter 用于绘制气泡图Matplotlib 函数stem 用于绘制棉棒图Matplotlib 函数boxplot 用于绘制箱线图Matplotlib 函数errorbar 用于绘制误差棒图Matplotlib 函数subplots和函数subplot区别
Matplotlib 动画和视频
Matplotlib ffmpeg安装Matplotlib 基本动画过程Matplotlib FuncAnimation方式创建动画Matplotlib ArtistAnimation方式创建动画Matplotlib 绘制一条螺旋曲线Matplotlib 输出gif文件Matplotlib 调用ImageMagick输出gif文件
Matplotlib 3D
Matplotlib 3D的坐标系Matplotlib 绘制3D图像
Matplotlib 导入导出
Matplotlib 保存绘图结果为PDF文件
Matplotlib 画线
Matplotlib 画线