matplotlib:向极坐标图刻度标签添加填充/偏移

wbgh16ku  于 2022-11-15  发布在  其他
关注(0)|答案(2)|浏览(177)

是否有办法增加极坐标图刻度标签(theta)的填充/偏移?

import matplotlib
import numpy as np
from matplotlib.pyplot import figure, show, grid

# make a square figure
fig = figure(figsize=(2, 2))
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8], polar=True, axisbg='#d5de9c')
ax.set_yticklabels([])

r = np.arange(0, 3.0, 0.01)
theta = 2*np.pi*r
ax.plot(theta, r, color='#ee8d18', lw=3)
ax.set_rmax(2.0)
show()

我想让θ刻度标签远离极坐标图,这样它们就不会重叠。

iibxawm4

iibxawm41#

首先;因为您已经将figsize指定为(2,2),并且ax占据了80%的宽度和高度,所以您只剩下 * 非常少 * 的空间来填充刻度标签。这可能会导致刻度标签在图形的边缘被“截断”。这可以通过以下两种方法轻松地“修复”:

  • 指定更大的figsize
  • 使ax在(2,2)大小的图形上占用更少的空间
  • 对刻度标签使用较小的字体

或者这些的任何组合。另一个,在我看来更好的,解决这个“问题”的方法是使用子情节而不是指定Axes的边界;

ax = fig.add_subplot(111, polar=True, axisbg='#d5de9c')

因为这使得可以使用方法X1 M5 N1 X,该方法自动配置图形布局以很好地包括所有元素。
然后转向手头的真实的问题;在PolarAxes上,您可以设定返回角刻度的径向位置。这是通过将您希望刻度标签放置的极轴半径的分数指定为PolarAxesset_thetagrids()方法的frac参数来完成的。该参数应该是您希望刻度标签放置的轴半径的分数。I.即,对于frac〈1,刻度标签将被放置在轴内,而对于frac〉1,它们将被放置在轴外。
您的代码可能如下所示:

import numpy as np
from matplotlib.pyplot import figure, show, grid, tight_layout
# make a square figure
fig = figure(figsize=(2, 2))
ax = fig.add_subplot(111, polar=True, axisbg='#d5de9c')
ax.set_yticklabels([])

r = np.arange(0, 3.0, 0.01)
theta = 2*np.pi*r
ax.plot(theta, r, color='#ee8d18', lw=3)
ax.set_rmax(2.0)

# tick locations
thetaticks = np.arange(0,360,45)

# set ticklabels location at 1.3 times the axes' radius
ax.set_thetagrids(thetaticks, frac=1.3)

tight_layout()

show()

您应该尝试frac的不同值,以找出最符合您需求的值。
如果您没有像上面那样为参数frac指定一个值,即frac有默认值None,代码输出如下所示的绘图。注意绘图的半径是如何变大的,因为ticklabel不像上面的例子中那样“占用那么多空间”。

s2j5cfk0

s2j5cfk02#

从matplotlib 2.1.0开始,原始答案的功能是now deprecated-极轴现在服从ax.tick_params的参数:

ax.tick_params(pad=123)

应该可以。

相关问题