Matplotlib - 设置刻度标签的背景颜色

5

我的子图的刻度标签与数据重叠了。我想将x轴刻度标签设置为有背景颜色(例如白色)。目前我只能找到如何更改标签的颜色,但无法更改背景。我知道如何使用文本对象来实现此效果,如下所示。(注意 - 我不想让整个子图的边距被着色,而只是刻度标签)。

最小工作示例

enter image description here

import matplotlib as mpl

rc_fonts = {
    "text.usetex": True,
    'text.latex.preview': True,
    "font.size": 50,
    'mathtext.default': 'regular',
    'axes.titlesize': 55,
    "axes.labelsize": 55,
    "legend.fontsize": 50,
    "xtick.labelsize": 50,
    "ytick.labelsize": 50,
    'figure.titlesize': 55,
    'figure.figsize': (10, 6.5),  # 15, 9.3
    'text.latex.preamble': [
        r"""\usepackage{lmodern,amsmath,amssymb,bm,physics,mathtools,nicefrac,letltxmacro,fixcmex}
        """],
    "font.family": "serif",
    "font.serif": "computer modern roman",
}
mpl.rcParams.update(rc_fonts)
import matplotlib.pylab as plt
from mpl_toolkits.axes_grid1.inset_locator import inset_axes, InsetPosition, mark_inset
from numpy import linspace, sin


x = linspace(0, 1, 100)
plt.clf()
ax1 = plt.gca()
ax2 = plt.axes([0, 0, 1, 1], label=str(2))
ip = InsetPosition(ax1, [0.08, 0.63, 0.45, 0.3])
ax2.set_axes_locator(ip)
ax1.plot(x, x)
ax1.plot(x, x + 0.3)
ax1.set_xlim(0, 1)
ax1.set_ylim(0, 1)
ax2.xaxis.set_tick_params(labelcolor='r')
ax1.text(0.3, 0.3, '$1$', transform=ax1.transAxes, horizontalalignment='center', verticalalignment='center', color='black', backgroundcolor='white')
2个回答

9
要设置标签的背景颜色,您可以使用与文本相同的属性,因为标签本质上就是文本。
plt.setp(ax2.get_xticklabels(), backgroundcolor="limegreen")

在此输入图片描述

如果您需要更复杂的背景,您也可以使用bbox属性。

bbox = dict(boxstyle="round", ec="limegreen", fc="limegreen", alpha=0.5)
plt.setp(ax2.get_xticklabels(), bbox=bbox)

enter image description here


太棒了。如果我想将其设置为具有 alpha 值(背景而非文本),这可以实现吗? - oliversm
没有backgroundalpha,但是你可以使用bbox参数,就像更新后的答案中一样。 - ImportanceOfBeingErnest
将任何颜色添加alpha的简单解决方案是将您的颜色转换为十六进制代码,并添加两个更多的十六进制数字以获得所需的alpha(从没有alpha的“00”到完全透明的“ff”)。 liemgreen的十六进制代码为“#32cd32”,因此答案的第一部分可以变为:plt.setp(ax2.get_xticklabels(), backgroundcolor="#32cd327f"),以添加0.5的alpha。或者只需使用bbox参数。 - qRTPCR
@qRTPCR 是的,但问题并没有问关于alpha的事情。 - ImportanceOfBeingErnest
你是正确的,但oliversm所说的是 - 你的回答只展示了如何使用bbox参数添加alpha值。我只是想强调一种替代方案,如果你只关心带有alpha的背景颜色。当然,你的回答没有问题。 - qRTPCR

6

enter image description here

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()

ax.plot(np.linspace(0, 1, 5), np.random.rand(5))

# set xticklabels
xtl = []
for x in ax.get_xticks():
    xtl += ['lbl: {:.1f}'.format(x)]
ax.set_xticklabels(xtl)

# modify labels
for tl in ax.get_xticklabels():
    txt = tl.get_text()
    if txt == 'lbl: 1.0':
        txt += ' (!)'
        tl.set_backgroundcolor('C3')
    tl.set_text(txt)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接