pylab 中的顶部和底部轴(例如 w/不同的单位)(或左右)
Posted
技术标签:
【中文标题】pylab 中的顶部和底部轴(例如 w/不同的单位)(或左右)【英文标题】:both a top and a bottom axis in pylab (e.g. w/ different units) (or left and right) 【发布时间】:2010-10-19 14:10:00 【问题描述】:我正在尝试使用 pylab/matplotlib 绘制绘图,并且 x 轴有两组不同的单位。所以我希望该图有两个带有不同刻度的轴,一个在顶部,一个在底部。 (例如,一个有英里,一个有公里左右。)
类似于下图(但我想要多个 X 轴,但这并不重要。)
有人知道 pylab 是否可以做到这一点?
【问题讨论】:
【参考方案1】:这可能有点晚了,但看看这样的事情是否会有所帮助:
http://matplotlib.sourceforge.net/examples/axes_grid/simple_axisline4.html
【讨论】:
谢谢!显然这是 matplotlib 0.99 中的新功能。对我来说,最简单/最干净的安装方法是在新前缀中创建一个新的 python 安装(w/numpy)。【参考方案2】:在“原始”框架旁边添加多个轴,如示例图片所示,可以通过添加带有twinx
的附加轴并配置它们的spines
属性来实现。
我认为这看起来与示例图片非常相似:
import matplotlib.pyplot as plt
import numpy as np
# Set font family
plt.rcParams["font.family"] = "monospace"
# Get figure, axis and additional axes
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax3 = ax1.twinx()
ax4 = ax1.twinx()
# Make space on the right for the additional axes
fig.subplots_adjust(right=0.6)
# Move additional axes to free space on the right
ax3.spines["right"].set_position(("axes", 1.2))
ax4.spines["right"].set_position(("axes", 1.4))
# Set axes limits
ax1.set_xlim(0, 7)
ax1.set_ylim(0, 10)
ax2.set_ylim(15, 55)
ax3.set_ylim(200, 600)
ax4.set_ylim(500, 750)
# Add some random example lines
line1, = ax1.plot(np.random.randint(*ax1.get_ylim(), 8), color="black")
line2, = ax2.plot(np.random.randint(*ax2.get_ylim(), 8), color="green")
line3, = ax3.plot(np.random.randint(*ax3.get_ylim(), 8), color="red")
line4, = ax4.plot(np.random.randint(*ax4.get_ylim(), 8), color="blue")
# Set axes colors
ax1.spines["left"].set_color(line1.get_color())
ax2.spines["right"].set_color(line2.get_color())
ax3.spines["right"].set_color(line3.get_color())
ax4.spines["right"].set_color(line4.get_color())
# Set up ticks and grid lines
ax1.minorticks_on()
ax2.minorticks_on()
ax3.minorticks_on()
ax4.minorticks_on()
ax1.tick_params(direction="in", which="both", colors=line1.get_color())
ax2.tick_params(direction="in", which="both", colors=line2.get_color())
ax3.tick_params(direction="in", which="both", colors=line3.get_color())
ax4.tick_params(direction="in", which="both", colors=line4.get_color())
ax1.grid(axis='y', which='major')
plt.show()
【讨论】:
以上是关于pylab 中的顶部和底部轴(例如 w/不同的单位)(或左右)的主要内容,如果未能解决你的问题,请参考以下文章
将 UIScrollView 中的内容视图固定到其底部而不是其顶部边缘
Python、Matplotlib、subplot:如何设置轴范围?