如何在Matplotlib pyplot隐藏坐标轴时设置绘图背景色
解决Matplotlib子图背景色在
axis(False)后失效的问题 问题根源
调用ax.axis(False)时,Matplotlib会自动将子图的背景补丁(ax.patch)设置为不可见,这直接导致你之前通过ax.set_facecolor("black")设置的背景色无法显示。另外,动画启用了blit=True,该模式仅更新update函数返回的艺术家对象,背景补丁不在返回列表中的话,也会出现渲染异常。
解决方案
方案1:替代ax.axis(False),手动隐藏坐标轴元素
不需要用ax.axis(False)一次性隐藏所有元素,而是针对性地隐藏边框、刻度和刻度标签,保留背景补丁的可见性:
# 替换原代码中的ax.axis(False) ax.spines[['top', 'right', 'bottom', 'left']].set_visible(False) ax.set_xticks([]) ax.set_yticks([])
方案2:保留ax.axis(False),手动恢复背景可见性
如果一定要使用ax.axis(False),需要手动恢复背景补丁的可见性,同时将其加入动画更新的元素列表:
- 在
ax.axis(False)后添加:
ax.patch.set_visible(True)
- 修改
update函数的返回值,把背景补丁包含进去:
def update(num, x, y, spiral, radius, dot): spiral.set_data(x[:num + 1], y[:num + 1]) radius.set_data([x[num], 0], [y[num], 0]) dot.set_data([x[num]], [y[num]]) return spiral, radius, dot, ax.patch
修改后的完整代码(方案1版本)
import matplotlib.pyplot as plt import matplotlib.animation as animation import numpy as np T = np.linspace(2*np.pi, 15*np.pi, 360) r = [k**-1 for k in T] x = [np.cos(a) * b for a, b in zip(T,r)] y = [np.sin(a) * b for a, b in zip(T,r)] fig, ax = plt.subplots() spiral, = ax.plot(x, y, color = "b") radius, = ax.plot(x, y, color = "k") dot, = ax.plot(x, y, color = "r", marker = "o") ax.set_facecolor("black") # 替换ax.axis(False)为以下代码 ax.spines[['top', 'right', 'bottom', 'left']].set_visible(False) ax.set_xticks([]) ax.set_yticks([]) def update(num, x, y, spiral, radius, dot): spiral.set_data(x[:num + 1], y[:num + 1]) radius.set_data([x[num], 0], [y[num], 0]) dot.set_data([x[num]], [y[num]]) return spiral, radius, dot ani = animation.FuncAnimation(fig, update, len(x), interval=5, fargs=[x, y, spiral, radius, dot], blit=True) ani.save('spiral_export.mp4', writer = "ffmpeg", fps = 60)
内容的提问来源于stack exchange,提问作者user8734068
相关产品推荐
相关产品推荐

