关闭图形的所有子图的轴


问题内容

我正在创建大量子图,并且我想关闭所有子图的轴。目前,我正在通过以下方式实现这一目标

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打开OD在创建时或轴的一些设置上Figure或者pyplot是转弯全球轴断。
pyplot.axis('off')仅在最后一个子图上关闭轴。


问题答案:

我同意@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一次,然后所有后续轴将自动为off。可能有一种更简单的仿真方法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之后

希望不会有我遗忘的意外,但是无论如何,在实际应用中,这很快就会变得很清楚。