英文:
How to rescale axes with matplotlib?
问题
我正在使用 pcolormesh
绘制图形:
fig, ax = plt.subplots()
ax.pcolormesh(Omega_re, Omega_im, brightness, cmap="gray", shading="gouraud")
ax.set_xlabel(r"$Re(\omega)$")
ax.set_ylabel(r"$Im(\omega)$")
ax.set_aspect(1)
fig.show()
其中
Omega_re = array([[2. , 2.75, 3.5 , 4.25, 5. ], [2. , 2.75, 3.5 , 4.25, 5. ],
[2. , 2.75, 3.5 , 4.25, 5. ], [2. , 2.75, 3.5 , 4.25, 5. ],
[2. , 2.75, 3.5 , 4.25, 5. ]])
Omega_im = array([[0. , 0. , 0. , 0. , 0. ], [0.0005, 0.0005, 0.0005, 0.0005, 0.0005],
[0.001 , 0.001 , 0.001 , 0.001 , 0.001 ], [0.0015, 0.0015, 0.0015, 0.0015, 0.0015],
[0.002 , 0.002 , 0.002 , 0.002 , 0.002 ]])
brightness = array([[4.05649772, 3.7299948 , 2.61262439, 4.2841897 , 3.40368949],
[4.05649076, 3.72997624, 2.61258381, 4.2841071 , 3.40353591],
[4.05648399, 3.72995772, 2.61254052, 4.28402084, 3.40338229],
[4.05647716, 3.72993901, 2.6124984 , 4.28393373, 3.40322865],
[4.05647025, 3.72992049, 2.61245428, 4.2838476 , 3.40307499]])
但由于 x 轴范围从 0 到 5,y 轴范围从 0 到 0.002,结果看起来“扁平”:
有没有一种方法可以重新缩放 y 轴,使图形看起来更好?下面是当前显示的图片。
英文:
I am plotting a graph using pcolormesh
:
fig, ax = plt.subplots()
ax.pcolormesh(Omega_re, Omega_im, brightness, cmap="gray", shading="gouraud")
ax.set_xlabel(r"$Re(\omega)$")
ax.set_ylabel(r"$Im(\omega)$")
ax.set_aspect(1)
fig.show()
where
Omega_re = array([[2. , 2.75, 3.5 , 4.25, 5. ], [2. , 2.75, 3.5 , 4.25, 5. ],
[2. , 2.75, 3.5 , 4.25, 5. ], [2. , 2.75, 3.5 , 4.25, 5. ],
[2. , 2.75, 3.5 , 4.25, 5. ]])
Omega_im = array([[0. , 0. , 0. , 0. , 0. ], [0.0005, 0.0005, 0.0005, 0.0005, 0.0005],
[0.001 , 0.001 , 0.001 , 0.001 , 0.001 ], [0.0015, 0.0015, 0.0015, 0.0015, 0.0015],
[0.002 , 0.002 , 0.002 , 0.002 , 0.002 ]])
brightness = array([[4.05649772, 3.7299948 , 2.61262439, 4.2841897 , 3.40368949],
[4.05649076, 3.72997624, 2.61258381, 4.2841071 , 3.40353591],
[4.05648399, 3.72995772, 2.61254052, 4.28402084, 3.40338229],
[4.05647716, 3.72993901, 2.6124984 , 4.28393373, 3.40322865],
[4.05647025, 3.72992049, 2.61245428, 4.2838476 , 3.40307499]])
But since the x-axis ranges from 0 to 5 and the y-axis ranges from 0 to 0.002, the result appears "flattened.":
Is there a way to rescale the y-axis so that the graph looks visually better? Below is a picture of how it is currently being displayed.
答案1
得分: 0
轴线是“平的”,因为 ax.set_aspect(1)
,它将轴线的纵横比设置为相等。换句话说,1英寸(例如)在两个轴上的长度相同。如果删除这行代码,那么将会得到一个自动生成的纵横比,可以显示更多细节。
英文:
The axes are "flat" because of ax.set_aspect(1)
, which sets the aspect ratio of the axes to be equal. In other words, 1 inch (for example) is the same length on both axes. If you remove that line then you'll get an automatically-generated aspect ratio that will show more detail.
答案2
得分: 0
将以下内容中的代码部分翻译如下:
将
ax.set_aspect(1)
替换为
ax.set_aspect("auto")
或者直接删除这行代码。
set_aspect(1)
(或等效地set_aspect("equal")
)会强制坐标轴在x和y方向上使用相同的比例。使用set_aspect("auto")
(默认值)允许matplotlib自动确定适合填充图形的比例。
结果
英文:
Replace
ax.set_aspect(1)
with
ax.set_aspect("auto")
or simply remove the line entirely.
set_aspect(1)
(or equivalently set_aspect("equal")
) forces the axes to use the same scaling for x and y. Using set_aspect("auto")
(the default) allows matplotlib to infer a good scaling to fill the plot.
Result
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论