我想使用Matplotlib创建5个子图,垂直堆叠正方形纵横比。对于每个子图,x轴的限值为0至100,y轴的限值为50至1000。有人能告诉我如何达到这个数字吗?我是Matplotlib的新手,对绘图不是很熟悉。
2uluyalo1#
下面的代码是一个示例,它将产生5个子图,垂直堆叠方形纵横比:
import matplotlib.pyplot as plt import numpy as np %matplotlib inline fig, (ax1, ax2, ax3, ax4, ax5) = plt.subplots(5, 1, figsize=(5, 15)) fig.set_figwidth(20) x = np.random.randint(0, 100, size=20) y = np.random.randint(50, 1000, size=20) ax1.set_xlim([0, 100]) ax1.set_ylim([50, 1000]) ax1.set_aspect(aspect = (0.105)) ax1.scatter(x, y) ax2.set_xlim([0, 100]) ax2.set_ylim([50, 1000]) ax2.set_aspect(aspect = (0.105)) ax2.scatter(x, y) ax3.set_xlim([0, 100]) ax3.set_ylim([50, 1000]) ax3.set_aspect(aspect = (0.105)) ax3.scatter(x, y) ax4.set_xlim([0, 100]) ax4.set_ylim([50, 1000]) ax4.set_aspect(aspect = (0.105)) ax4.scatter(x, y) ax5.set_xlim([0, 100]) ax5.set_ylim([50, 1000]) ax5.set_aspect(aspect = (0.105)) ax5.scatter(x, y)
字符串结果如下图所示:x1c 0d1x的数据set_aspect(aspect = (0.105))方法中的aspect = (0.105)是根据您的x和y范围计算的。如果你用100-0的x范围除以100 - 0 -50的y范围,你会得到0.105的数字,这个长宽比使你的图是正方形的。代码中的%matplotlib inline行是当你使用jupyter notebook作为IDE时使用的,否则你不需要这行代码。
set_aspect(aspect = (0.105))
aspect = (0.105)
%matplotlib inline
yshpjwxd2#
让我们回答你的问题的所有部分。1.要在单个图中创建5个子图并垂直堆叠,您可以使用plt.subplots(5,1),其中第一个参数是行数,第二个参数是列数。因此,5行1列意味着5个图都垂直堆叠。您可能还希望通过添加figsize参数来设置图形的大小,该参数应该是一个元组,其中第一个参数设置宽度,第二个参数设置高度。1.要使它们具有相同的纵横比,您需要获取每个轴并调用set_aspect,这是x与y的比率。因为你想在x中得到0-100,在y中得到50-1000,所以你可以将纵横比计算为(100 - 0)/(1000 - 50)。1.要设置限制,您可以为每个轴调用set_xlim和set_ylim方法,并在其中传递下限和上限(按此顺序)。为了有效地做到这一点,我们可以循环所有轴并绘制数据(使用numpy生成随机数)。我还为各种参数创建了变量(即极限、点数等)并计算纵横比。
plt.subplots(5,1)
figsize
set_aspect
(100 - 0)/(1000 - 50)
set_xlim
set_ylim
import matplotlib.pyplot as plt import numpy as np plt.close("all") xlim = (0, 100) ylim = (50, 1000) aspect = (xlim[1]-xlim[0])/(ylim[1]-ylim[0]) N = 100 rng = np.random.default_rng(42) fig, axes = plt.subplots(5, 1, figsize=(5, 25)) for ax in axes: x = rng.uniform(*xlim, N) y = rng.uniform(*ylim, N) ax.plot(x, y, ".") ax.set_xlim(xlim) ax.set_ylim(ylim) ax.set_aspect(aspect) fig.tight_layout() fig.show()
字符串或者,我们可以使用plt.setp来为所有轴一次性设置所有限制和纵横比。
plt.setp
import matplotlib.pyplot as plt import numpy as np plt.close("all") xlim = (0, 100) ylim = (50, 1000) aspect = (xlim[1]-xlim[0])/(ylim[1]-ylim[0]) N = 100 rng = np.random.default_rng(42) fig, axes = plt.subplots(5, 1, figsize=(5, 25)) for ax in axes: x = rng.uniform(*xlim, N) y = rng.uniform(*ylim, N) ax.plot(x, y, ".") plt.setp(axes, xlim=xlim, ylim=ylim, aspect=aspect) fig.tight_layout() fig.show()
型绘图结果:x1c 0d1x的数据
rkttyhzu3#
使用set_box_aspect即可
import matplotlib import matplotlib.pyplot as plt import numpy as np xlim = (0, 100) ylim = (50, 1000) aspect = (xlim[1]-xlim[0])/(ylim[1]-ylim[0]) N = 100 rng = np.random.default_rng(42) fig, axes = plt.subplots(5, 1, layout='constrained', figsize=(1.9,8)) for ax in axes: x = rng.uniform(*xlim, N) y = rng.uniform(*ylim, N) ax.plot(x, y, 'o') ax.set_box_aspect(1) plt.show()
字符串
的数据
3条答案
按热度按时间2uluyalo1#
下面的代码是一个示例,它将产生5个子图,垂直堆叠方形纵横比:
字符串
结果如下图所示:
x1c 0d1x的数据
set_aspect(aspect = (0.105))
方法中的aspect = (0.105)
是根据您的x和y范围计算的。如果你用100-0的x范围除以100 - 0 -50的y范围,你会得到0.105的数字,这个长宽比使你的图是正方形的。代码中的
%matplotlib inline
行是当你使用jupyter notebook作为IDE时使用的,否则你不需要这行代码。yshpjwxd2#
让我们回答你的问题的所有部分。
1.要在单个图中创建5个子图并垂直堆叠,您可以使用
plt.subplots(5,1)
,其中第一个参数是行数,第二个参数是列数。因此,5行1列意味着5个图都垂直堆叠。您可能还希望通过添加figsize
参数来设置图形的大小,该参数应该是一个元组,其中第一个参数设置宽度,第二个参数设置高度。1.要使它们具有相同的纵横比,您需要获取每个轴并调用
set_aspect
,这是x与y的比率。因为你想在x中得到0-100,在y中得到50-1000,所以你可以将纵横比计算为(100 - 0)/(1000 - 50)
。1.要设置限制,您可以为每个轴调用
set_xlim
和set_ylim
方法,并在其中传递下限和上限(按此顺序)。为了有效地做到这一点,我们可以循环所有轴并绘制数据(使用numpy生成随机数)。我还为各种参数创建了变量(即极限、点数等)并计算纵横比。
字符串
或者,我们可以使用
plt.setp
来为所有轴一次性设置所有限制和纵横比。型
绘图结果:
x1c 0d1x的数据
rkttyhzu3#
使用set_box_aspect即可
字符串
的数据