You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 04:43:14