繁体   English   中英

如何编辑 matplotlib x-tickmarks 以匹配 x-labels

[英]How to edit matplotlib x-tickmarks to match x-labels

我正在尝试编辑 x 轴上的刻度线和标签以匹配我正在绘制的数据。 两个变量(x 和 bin_river)的形状为 68,因此我想减少绘制的刻度线数量并更改数组 [x] 中第一个和列表编号的标签。 数组 [x] 看起来像这样

print(x)
[-30 -29 -28 -27 -26 -25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10  -9  -8  -7  -6  -5  -4  -3  -2  -1   0   1   2   3   4   5 6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23 24  25  26  27  28  29  30  31  32  33  34  35  36  37]

这些数字几乎正确地代表了数据。 在数组[x]中,'-30'实际上代表所有数字'<-29','37'代表所有数字'>=37'。 所以我想改变刻度标签来表示这一点。 我试过

ax.xaxis.set_major_locator(plt.MaxNLocator(15))
ax.set_xticklabels(['<-29','-25','-20', '-15', '-10', '-5', '0', '5', '10', '15', '20', '25', '30', '35', '>=37'],fontsize=11) 
ax.plot(x,ar_prob, c=cmap(0.6))
ax.set_title('Atmospheric River Landfall Probability',fontsize=16)
plt.grid(True)
ax.set_xlabel('Blocking Index (dam)',fontsize=15)
ax.set_ylabel('AR Landfall Probability',fontsize=15)
ax.set_ylim(0, 100)
plt.show()

在此处输入图片说明

我想要的刻度线没有绘制并且线放错了位置。 由于间距发生变化,如何将线拟合到正确的刻度线并在 35 之后添加不规则刻度线?

在设置 xticklabels 时,它有助于设置也显式设置 xticks。 这样它们总是对齐的,在缩放时也是如此。

在下面的代码中,首先将刻度位置设置为 5 的倍数,包括最后一个位置,不要在 35 处放置刻度,因为它太接近了。

然后,标签的字符串被格式化,第一个和最后一个使用特殊格式。 使用 unicode '≥',因为它更短。

from matplotlib import pyplot as plt
import numpy as np

x = list(range(-30, 38))
ar_prob = np.random.uniform(0, 100, len(x))
fig, ax = plt.subplots()
ax.plot(x, ar_prob, c='crimson')
ticks = [i for i in x if i == x[-1] or (i % 5 == 0 and i < x[-1] - 3)]
tick_labels = [f'<{t}' if t == x[0] else f'≥{t}' if t == x[-1] else f'{t}' for t in ticks]
ax.set_xticks(ticks)
ax.set_xticklabels(tick_labels, fontsize=11)
ax.set_title('Atmospheric River Landfall Probability', fontsize=16)
ax.grid(True)
ax.set_xlabel('Blocking Index (dam)', fontsize=15)
ax.set_ylabel('AR Landfall Probability', fontsize=15)
ax.set_ylim(0, 100)
plt.show()

样地

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM