我想绘制一个函数,并显示 3 个不同的y轴,每个轴都有不同的比例、对数和线性比例。我按照这个和其他示例尝试修改它以考虑到我之前提到的差异。
编辑:我有数据来绘制 a(t) = t^(1/2),我可以改变 a 轴的比例,因为我知道变换 z(a) = 1/a - 1,所以它是就像绘制 z(t),但我希望通过更改 y 轴的显示方式使 a(t) 和 z(t) 看起来相同,因此 a 轴和 z 轴等效于遵守 z(a) .
问题是该图显示了 3 条曲线,就好像它是不同的函数一样,我希望它们看起来相同,因此我不相信每个 y 轴的转换。
具体问题是,我怎样才能改变 y 轴的比例。
这就是我所做的:
from mpl_toolkits.axes_grid1 import host_subplot
import mpl_toolkits.axisartist as AA
import matplotlib.pyplot as plt
t_arr = np.linspace(-8,0,500)
t_arr = 10**t_arr
a_arr = [ti**(1./2) for ti in t_arr]
z_arr = [(1./ai - 1) for ai in a_arr]
T_arr = [1e-5*(1./ai) for ai in a_arr]
host = host_subplot(111, axes_class=AA.Axes)
plt.subplots_adjust(right=0.75)
par1 = host.twinx()
par2 = host.twinx()
par2.axis["right"].toggle(all=True)
host.set_xlabel('Time')
host.set_ylabel("Scale Factor a")
par1.set_ylabel("Redshift z")
par2.set_ylabel("Energy E")
p1, = host.plot(t_arr, a_arr)
p2, = par1.plot(t_arr, z_arr)
p3, = par2.plot(t_arr, T_arr)
host.set_xscale('log')
host.set_yscale('log')
par1.set_xscale('log')
par1.set_yscale('log')
par2.set_xscale('log')
par2.set_yscale('log')
host.set_xlim([1e-8, 1])
host.set_ylim([1e-4, 1e2])
par1.set_ylim([9999,-0.99])
par2.set_ylim([0.1, 9e-6])
offset = 60
new_fixed_axis = par2.get_grid_helper().new_fixed_axis
par2.axis["right"] = new_fixed_axis(loc="right", axes=par2,
offset=(offset, 0))
par2.axis["right"].toggle(all=True)
host.legend()
host.axis["left"].label.set_color(p1.get_color())
par1.axis["right"].label.set_color(p2.get_color())
par2.axis["right"].label.set_color(p3.get_color())
plt.draw()
plt.show()