如何将XKCD绘图中的白色高亮框改为透明高亮?
解决Matplotlib XKCD风格绘图深色模式下的白色高亮框问题
我在博客中使用XKCD风格绘图时遇到了问题,示例代码如下:
import matplotlib.pyplot as plt import numpy as np with plt.xkcd(): fig = plt.figure() ax = fig.add_axes((0.1, 0.2, 0.8, 0.7)) ax.spines[['top', 'right']].set_visible(False) ax.set_xticks([]) ax.set_yticks([]) ax.set_ylim([-30, 15]) # Plot of function x = np.linspace(-5, 5, num=100) y = x ** 3 - 10 * x ax.plot(x, y, color='y') # Tangent space ax.plot(x, 2 * x - 16, color='m') ax.text(3, -10, r'$T_pC$', color='m') ax.scatter(2, -12, color='m') ax.text(2, -12, r'$p$', color='m') plt.tight_layout() plt.savefig('/first_example_tangent_space.png', transparent=True, dpi=300) plt.close()
该绘图在浅色模式下显示正常,但深色模式下会露出突兀的白色高亮框(曲线和文字的高亮显示正常),希望将这些框的白色高亮改为透明。
解决方案
默认XKCD风格会给所有图形元素添加白色描边来模拟手绘的粗糙质感,这就是深色背景下白框的来源。我们可以通过修改Matplotlib的路径效果,将白色描边替换为透明效果:
修改后的代码如下:
import matplotlib.pyplot as plt import numpy as np from matplotlib.patheffects import Stroke, Normal with plt.xkcd(): # 覆盖默认XKCD路径效果,将白色描边改为透明 plt.rcParams['path.effects'] = [Stroke(linewidth=4, foreground=(1, 1, 1, 0)), Normal()] fig = plt.figure() ax = fig.add_axes((0.1, 0.2, 0.8, 0.7)) ax.spines[['top', 'right']].set_visible(False) ax.set_xticks([]) ax.set_yticks([]) ax.set_ylim([-30, 15]) # Plot of function x = np.linspace(-5, 5, num=100) y = x ** 3 - 10 * x ax.plot(x, y, color='y') # Tangent space ax.plot(x, 2 * x - 16, color='m') ax.text(3, -10, r'$T_pC$', color='m') ax.scatter(2, -12, color='m') ax.text(2, -12, r'$p$', color='m') plt.tight_layout() plt.savefig('/first_example_tangent_space.png', transparent=True, dpi=300) plt.close()
说明
- 导入
Stroke和Normal路径效果类,自定义XKCD风格的描边颜色为(1,1,1,0)(即全透明的白色) - 保留
Normal()效果确保图形元素本身正常显示,同时消除了深色背景下的白色高亮框 - 修改后,绘图在浅色和深色模式下都能保持XKCD的手绘风格,且不会出现突兀的白框
内容的提问来源于stack exchange,提问作者Galen
相关产品推荐
相关产品推荐

