5

我正在尝试使用 matplotlib 绘制一个具有两个相互非线性的 x 轴的图形。我想得到的情节是这样的:

阴谋

基本上,年龄取决于红移。它是非线性的,需要计算。我想将年龄和红移都作为 x 轴。我怎样才能做到?

4

2 回答 2

4

该功能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()

twiny() 函数的示例图

于 2013-02-13T03:28:31.747 回答
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件事是必要的,但我不是 100% 确定,因为我从我现有的(子)情节中撕掉了它,而没有检查它是否运行良好。

编辑:另见https://stackoverflow.com/a/10517481/599884

于 2013-07-24T11:50:46.473 回答