在子图中关闭轴

Ser*_*nov 42 python image matplotlib

我有以下代码:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import matplotlib.cm as cm

img = mpimg.imread("lena.jpg")

f, axarr = plt.subplots(2, 2)
axarr[0,0].imshow(img, cmap = cm.Greys_r)
axarr[0,0].set_title("Rank = 512")

rank = 128
new_img = prune_matrix(rank, img)
axarr[0,1].imshow(new_img, cmap = cm.Greys_r)
axarr[0,1].set_title("Rank = %s" %rank)

rank = 32
new_img = prune_matrix(rank, img)
axarr[1,0].imshow(new_img, cmap = cm.Greys_r)
axarr[1,0].set_title("Rank = %s" %rank)

rank = 16
new_img = prune_matrix(rank, img)
axarr[1,1].imshow(new_img, cmap = cm.Greys_r)
axarr[1,1].set_title("Rank = %s" %rank)

plt.show()
Run Code Online (Sandbox Code Playgroud)

但是,由于轴上的值,结果非常难看:

在此输入图像描述

如何同时关闭所有子图的轴值?

Ffi*_*ydd 80

您可以按照Veedrac评论中的建议(链接到此处)通过一个小修改来关闭轴.

而不是使用plt.axis('off')你应该使用ax.axis('off')在哪里ax是一个matplotlib.axes对象.要为您的代码执行此操作,您只需axarr[0,0].axis('off')为每个子图添加等等.

下面的代码显示了结果(我删除了prune_matrix部分,因为我无法访问该功能,将来请提交完整的工作代码.)

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import matplotlib.cm as cm

img = mpimg.imread("stewie.jpg")

f, axarr = plt.subplots(2, 2)
axarr[0,0].imshow(img, cmap = cm.Greys_r)
axarr[0,0].set_title("Rank = 512")
axarr[0,0].axis('off')

axarr[0,1].imshow(img, cmap = cm.Greys_r)
axarr[0,1].set_title("Rank = %s" % 128)
axarr[0,1].axis('off')

axarr[1,0].imshow(img, cmap = cm.Greys_r)
axarr[1,0].set_title("Rank = %s" % 32)
axarr[1,0].axis('off')

axarr[1,1].imshow(img, cmap = cm.Greys_r)
axarr[1,1].set_title("Rank = %s" % 16)
axarr[1,1].axis('off')

plt.show()
Run Code Online (Sandbox Code Playgroud)

Stewie的例子

注意:要仅关闭x或y轴,您可以使用set_visible()例如:

axarr[0,0].xaxis.set_visible(False) # Hide only x axis
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢[格蕾丝·霍珀](https://www.britannica.com/biography/Grace-Hopper)。她太酷了!(皮秒(在 c)~ 细磨胡椒粒)[视频](https://www.youtube.com/watch?v=WyGtNvBZ6kk) (2认同)

Nir*_*mal 5

import matplotlib.pyplot as plt

fig, ax = plt.subplots(2, 2)
Run Code Online (Sandbox Code Playgroud)


要关闭所有子图的轴,请执行以下任一操作:

[axi.set_axis_off() for axi in ax.ravel()]
Run Code Online (Sandbox Code Playgroud)

要么

map(lambda axi: axi.set_axis_off(), ax.ravel())
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用的是 python 3,则“map”会被延迟计算,因此您必须将其包装在“list”中 (4认同)