我正在尝试绘制两个图形。第一个显示随机生成的像素,第二个显示随机生成的像素。
当我绘制这些子图时,第一个不显示网格,Y 轴编号也反转并且原点移动了一点。
你能建议我如何解决这些问题吗?
这是我的代码如下:
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from skimage.morphology import disk,erosion
x=np.random.randint(2,size=(10,10))
se=disk(1)
y=erosion(x,se)
fig, (ax0, ax1) = plt.subplots(1,2, figsize=(10,5))
cmap = mpl.colors.ListedColormap(['w', 'k'])
ax0.set_xticks(np.arange(0, 10, 1))
ax0.set_yticks(np.arange(0, 10, 1))
ax0.set_title("Input image")
ax1.set_xticks(np.arange(0, 10, 1))
ax1.set_yticks(np.arange(0, 10, 1))
ax1.set_title("Eroded Image")
ax0.imshow(x,interpolation='none', cmap=cmap, norm=norm)
ax1.imshow(y,interpolation='none', cmap=cmap, norm=norm)
plt.rc('grid', linestyle="-", color='red')
plt.grid(True)
plt.show()
最佳答案
这里是反转 y 轴的代码:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from skimage.morphology import disk,erosion
x=np.random.randint(2,size=(10,10))
se=disk(1)
y=erosion(x,se)
fig, (ax0, ax1) = plt.subplots(1,2, figsize=(10,5))
cmap = mpl.colors.ListedColormap(['w', 'k'])
ax0.set_xticks(np.arange(0, 10, 1))
ax0.set_yticks(np.arange(0, 10, 1))
ax0.set_title("Input image")
ax1.set_xticks(np.arange(0, 10, 1))
ax1.set_yticks(np.arange(0, 10, 1))
ax1.set_title("Eroded Image")
ax0.imshow(x,interpolation='none', cmap=cmap)
ax1.imshow(y,interpolation='none', cmap=cmap)
plt.rc('grid', linestyle="-", color='red')
ax0.invert_yaxis()
ax1.invert_yaxis()
plt.grid(True)
plt.show()
只需使用
.invert_yaxis()
绘制内容后的方法。这是结果:关于刻度:您正在通过
imshow()
绘制矩阵,因此 x 和 y 值沿其轴不连续,它们集中在矩阵的单元格中。 imshow()
的滴答声显示是指每个单元格的中心,因为这是您感兴趣的信息。在 Carthesian 平面中没有通过“x”和“y”轴的交点的“原点”,因为这是不是迦太基平面。您正在翻译图像中矩阵的内容,因此 imshow()
显示每个单元格中心的刻度。
关于python - Matplotlib 子图缺少网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62201441/