- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想用下面的代码生成 4 个相同大小的子图,并在我设置的 x 轴和 y 轴大小之间具有共同的纵横比。引用下面的例子,我希望所有的子图看起来都像第一个(左上角)。现在的问题是 y 轴的大小与其最大值相关。这是我想避免的行为。
import matplotlib.pyplot as plt
import numpy as np
def main():
fig = plt.figure(1, [5.5, 3])
for i in range(1,5):
fig.add_subplot(221+i-1, adjustable='box', aspect=1)
plt.plot(np.arange(0,(i)*4,i))
plt.show()
if __name__ == "__main__":
main()
令人惊讶的是,matplotlib 默认生成正确的东西(下图):
import matplotlib.pyplot as plt
import numpy as np
def main():
fig = plt.figure(1, [5.5, 3])
for i in range(1,5):
fig.add_subplot(221+i-1)
plt.plot(np.arange(0,(i)*4,i))
plt.show()
我只想添加一个功能来控制 x 轴和 y 轴长度之间的纵横比。
最佳答案
我不太清楚你想从你的问题中得到什么。
您是否希望所有图都具有相同的数据限制?
如果是这样,使用共享轴(我在这里使用 subplots
,但如果你想坚持使用 matlab 风格的代码,你可以避免它):
import matplotlib.pyplot as plt
import numpy as np
fig, axes = plt.subplots(nrows=2, ncols=2, sharey=True, sharex=True)
for i, ax in enumerate(axes.flat, start=1):
ax.set(aspect=1)
ax.plot(np.arange(0, i * 4, i))
plt.show()
如果您希望它们都共享它们的轴限制,但要有 adjustable='box'
(即非方形轴边界),请使用 adjustable='box-forced'
:
import matplotlib.pyplot as plt
import numpy as np
fig, axes = plt.subplots(nrows=2, ncols=2, sharey=True, sharex=True)
for i, ax in enumerate(axes.flat, start=1):
ax.set(aspect=1, adjustable='box-forced', xticks=range(i))
ax.plot(np.arange(0, i * 4, i))
plt.show()
编辑:抱歉,我还是有点糊涂。你想要这样的东西吗?
import matplotlib.pyplot as plt
import numpy as np
fig, axes = plt.subplots(nrows=2, ncols=2)
for i, ax in enumerate(axes.flat, start=1):
ax.set(adjustable='datalim', aspect=1)
ax.plot(np.arange(0, i * 4, i))
plt.show()
好吧,我想我终于明白你的问题了。我们都用“宽高比”表示完全不同的东西。
在 matplotlib 中,绘图的纵横比是指数据限制的相对比例。换句话说,如果绘图的纵横比为 1,则斜率为 1 的直线将以 45 度角出现。您假设纵横比应用于轴的轮廓,而不是轴上绘制的数据。
您只希望子图的轮廓是方形的。 (在这种情况下,它们都具有不同的纵横比,由 matplotlib 定义。)
在这种情况下,您需要一个方形图形。 (还有其他方法,但仅制作正方形图形要简单得多。Matplotlib 轴填充的空间与其所在图形的大小成正比。)
import matplotlib.pyplot as plt
import numpy as np
# The key here is the figsize (it needs to be square). The position and size of
# axes in matplotlib are defined relative to the size of the figure.
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(8,8))
for i, ax in enumerate(axes.flat, start=1):
ax.plot(np.arange(0, i * 4, i))
# By default, subplots leave a bit of room for tick labels on the left.
# We'll remove it so that the axes are perfectly square.
fig.subplots_adjust(left=0.1)
plt.show()
关于python - 具有各种 y 轴的子图中的纵横比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14907062/
我有一张 table 。我希望它的数据垂直和水平居中。 我使用了 align="center"valign="middle" ,但它没有用。
我是一名优秀的程序员,十分优秀!