关闭图形的所有子图的坐标轴

5

我正在创建一个大的子图数组,我想关闭所有子图的坐标轴。 目前我是通过以下方式实现的:

fig, ax = plt.subplots(7, len(clusters))
fig.subplots_adjust(wspace=0, top=1.0, bottom=0.5, left=0, right=1.0)

for x in ax.ravel():
    x.axis("off")

但是循环遍历子图以逐个关闭轴线是不雅观的。是否有一种方法可以告诉subplots在创建时关闭轴线,或者在Figurepyplot上设置全局关闭轴线的选项。 pyplot.axis('off')仅关闭最后一个子图上的轴线。


1
为什么这看起来很丑呢?你可以将它放在一个函数中隐藏起来,如 remove_numbers = lambda ax: [x.axis('off') for x in ax.ravel()] - tacaswell
1个回答

6

我同意@tcaswell的观点,你可能应该使用你已经在使用的内容。另一个将其作为函数使用的选项是使用numpy.vectorize()

import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(7, len(clusters))
np.vectorize(lambda ax:ax.axis('off'))(ax)

如果需要多次调用它,则可以将vectorized函数赋值给一个变量:

axoff_fun = np.vectorize(lambda ax:ax.axis('off'))
# ... stuff here ...
fig, ax = plt.subplots(7, len(clusters))
axoff_fun(ax)

请注意,这与@tcaswell建议的是相同的事情,只是在更华丽的设置下(可能更慢)。而且它本质上与您现在使用的相同。


然而,如果您坚持以其他方式进行操作(即您是一种特殊的懒惰),您可以设置matplotlib.rcParams一次,然后每个随后的轴将自动关闭。也许有更简单的方法来模拟axis('off'),但是这是我成功的方法:

import matplotlib as mpl

# before
mpl.pyplot.figure()
mpl.pyplot.plot([1,3,5],[4,6,5])

# kill axis in rcParams
mpl.rc('axes.spines',top=False,bottom=False,left=False,right=False);
mpl.rc('axes',facecolor=(1,1,1,0),edgecolor=(1,1,1,0));
mpl.rc(('xtick','ytick'),color=(1,1,1,0));

# after
mpl.pyplot.figure()
mpl.pyplot.plot([1,3,5],[4,6,5])

结果前/后:

rcparams之前rcparams之后

希望没有遗漏需要覆盖的地方,但在实际应用中很快会变得明显。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接