在不改变rcParams全局字典的情况下设置轴线宽度

48 投票
4 回答
104139 浏览
提问于 2025-04-15 21:05

所以,看起来我们不能这样做(这样会报错,因为 axes 没有 set_linewidth 这个方法):

axes_style = {'linewidth':5}
axes_rect = [0.1, 0.1, 0.9, 0.9]

axes(axes_rect, **axes_style)

而是必须使用下面这个老办法:

rcParams['axes.linewidth'] = 5 # set the value globally

... # some code

rcdefaults() # restore [global] defaults

有没有简单或者干净的方法(比如可以单独设置 x 轴和 y 轴的参数等等)?

如果没有,为什么呢?

4 个回答

8

是的,有一种简单又干净的方法可以做到这一点。

在一个轴的实例中调用axhlineaxvline,看起来是MPL文档推荐的做法。

无论如何,这种方法很简单,可以让你对坐标轴的外观进行精细的控制。

举个例子,这段代码会创建一个图表,并把x轴的颜色设置为绿色,同时把x轴的线宽从默认的“1”增加到“4”;y轴的颜色设置为红色,y轴的线宽从“1”增加到“8”。

from matplotlib import pyplot as PLT
fig = PLT.figure()
ax1 = fig.add_subplot(111)

ax1.axhline(linewidth=4, color="g")        # inc. width of x-axis and color it green
ax1.axvline(linewidth=4, color="r")        # inc. width of y-axis and color it red

PLT.show()

axhline和axvline函数还接受其他参数,这样你几乎可以随心所欲地调整美观,特别是~matplotlib.lines.Line2D的属性都可以作为有效的参数(比如说,'alpha'、'linestyle'、capstyle、joinstyle)。

21

这段代码是用来做某些操作的,但具体的功能和效果需要根据上下文来理解。代码块通常包含了一些编程语言的语法和结构,可能涉及到变量、函数、循环等基本概念。

如果你是编程小白,可以把代码想象成一系列的指令,就像是给计算机下达任务。每一行代码都有它的目的,可能是计算一个数字、显示一段文字,或者处理一些数据。

在学习编程时,理解这些代码的意义和作用是非常重要的。你可以尝试逐行分析,看看每一部分是如何工作的,慢慢就能掌握其中的逻辑了。

记住,编程就像学习一种新的语言,开始时可能会觉得难,但只要多练习,就会越来越熟练。

plt.setp(ax.spines.values(), linewidth=5)
102
  • 这个回答不管用,评论里也有解释。我建议使用spines
  • 正如Czechnology在评论中提到的,考虑一下也改一下刻度。
import matplotlib.pyplot as plt

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4))

ax1.set_title('Normal spine and ticks')
ax2.set_title('Adjusted spine and ticks')

# change each spine separately:
# ax.spines['right'].set_linewidth(0.5)

# change all spines
for axis in ['top','bottom','left','right']:
    ax2.spines[axis].set_linewidth(4)

# increase tick width
ax2.tick_params(width=4)

plt.show()

在这里输入图片描述

撰写回答