我有一个非常简单的问题。我需要在我的曲线图上有第二个x轴,并且我希望这个轴有一定数量的抽屉,对应于第一个轴的特定位置。
让我们用一个例子来试试。在这里,我绘制了暗物质质量作为膨胀因子的函数,定义为1/(1+z),范围从0到1。
semilogy(1/(1+z),mass_acc_massive,'-',label='DM')
xlim(0,1)
ylim(1e8,5e12)
我希望在我的图的顶部有另一个x轴,显示扩展因子的一些值对应的z。这有可能吗?如果是,我怎样才能有xtics ax?
发布于 2012-05-09 21:49:02
我从@Dhara的答案中的注释中得到了提示,听起来你想通过一个从旧的x轴到新的x轴的函数来设置一个new_tick_locations
列表。下面的tick_function
接受一个点数组,将它们映射到一个新值,并对它们进行格式化:
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax2 = ax1.twiny()
X = np.linspace(0,1,1000)
Y = np.cos(X*20)
ax1.plot(X,Y)
ax1.set_xlabel(r"Original x-axis: $X$")
new_tick_locations = np.array([.2, .5, .9])
def tick_function(X):
V = 1/(1+X)
return ["%.3f" % z for z in V]
ax2.set_xlim(ax1.get_xlim())
ax2.set_xticks(new_tick_locations)
ax2.set_xticklabels(tick_function(new_tick_locations))
ax2.set_xlabel(r"Modified x-axis: $1/(1+X)$")
plt.show()
发布于 2012-05-09 19:24:54
可以使用twiny创建2个x轴比例。例如:
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax2 = ax1.twiny()
a = np.cos(2*np.pi*np.linspace(0, 1, 60.))
ax1.plot(range(60), a)
ax2.plot(range(100), np.ones(100)) # Create a dummy plot
ax2.cla()
plt.show()
参考:http://matplotlib.sourceforge.net/faq/howto_faq.html#multiple-y-axis-scales
输出:
发布于 2014-05-23 22:45:00
如果你想让你的上轴是下轴刻度值的函数,你可以这样做。请注意:有时get_xticks()
会有一个可见范围之外的刻度,您必须在转换时考虑到这一点。
import matplotlib.pyplot as plt
fig, ax1 = plt.subplots()
ax1 = fig.add_subplot(111)
ax1.plot(range(5), range(5))
ax1.grid(True)
ax2 = ax1.twiny()
ax2.set_xticks( ax1.get_xticks() )
ax2.set_xbound(ax1.get_xbound())
ax2.set_xticklabels([x * 2 for x in ax1.get_xticks()])
title = ax1.set_title("Upper x-axis ticks are lower x-axis ticks doubled!")
title.set_y(1.1)
fig.subplots_adjust(top=0.85)
fig.savefig("1.png")
提供:
https://stackoverflow.com/questions/10514315
复制相似问题