我正在创建大量子图,我想关闭所有子图的轴。目前我正在通过
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")
Run Code Online (Sandbox Code Playgroud)
但是循环遍历子图以单独转动轴是丑陋的。有没有办法告诉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)
Run Code Online (Sandbox Code Playgroud)
或者,如果您需要多次调用它,通过将vectorize
d 函数分配给一个变量:
axoff_fun = np.vectorize(lambda ax:ax.axis('off'))
# ... stuff here ...
fig, ax = plt.subplots(7, len(clusters))
axoff_fun(ax)
Run Code Online (Sandbox Code Playgroud)
再次注意,这与@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])
Run Code Online (Sandbox Code Playgroud)
之前/之后的结果:
希望没有任何我忘记覆盖的惊喜,但无论如何在实际应用程序中都会很快变得清晰。