我试图用matplotlib绘制一个两个x轴的图形,它们彼此是非线性的。我想得到的情节是这样的:
基本上,年龄取决于红移。它是非线性的,需要进行计算。我想把年龄和红移作为x轴。我该怎么做?
答案 0 :(得分:3)
函数twiny()
可能就是你要找的东西。
import matplotlib.pyplot as plt
plt.loglog(range(100))
ax1 = plt.gca()
ax2 = ax1.twiny()
ax2.set_xticks([100,80,50])
ax2.set_xticklabels(['0','1','2'])
ax1.set_xlabel('redshift')
ax2.set_xlabel('age')
plt.show()
答案 1 :(得分:0)
我是这样做的:
from mpl_toolkits.axes_grid.parasite_axes import SubplotHost
fig = plt.figure(1, figsize=(figwidth,figheight))
ax = SubplotHost(fig, 1,1,1)
fig.add_subplot(ax)
#plotting as usual
ax2 = ax.twin() # ax2 is responsible for "top" axis and "right" axis
ax2.axis["right"].toggle(ticklabels=False)
ax2.xaxis.set_major_formatter(FuncFormatter(fmt_zToEta)) #set eta coord format
#with a function for the Z to eta transform for plot labels
def fmt_zToEta(x, pos=None):
#...
return transformed_label
我还记得从红移示例开始; - )
我认为SubPlotHost
是必要的,但我不是百分百肯定,因为我从我现有的(子)情节中扯掉了这个,而没有检查它是否运行良好。