如何调整字符串 x 轴的“刻度频率”

新手上路,请多包涵

我有一个清单要画。有没有办法显示部分 x 轴标签,例如 x[0], x[10], ... ,但保持图形不变?

 x = ['alice', 'bob', ...] # string list, len > 100
y = [23, 323, ...] # int list
plt.plot(x, y)
plt.show()

旋转90度后

编辑 1:还有一些其他问题,例如 Changing the “tick frequency” on x or y axis in matplotlib? 处理 int 标签。但对我不起作用。

编辑 2:旋转 x 轴标签无济于事。

原文由 Joe Lu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 498
2 个回答

一种方法是减少 x 轴上的刻度数。您可以使用 ax.set_xticks() 设置刻度。在这里,您可以使用切片符号 [::2]x 列表进行切片,以在每个第二个条目处设置一个刻度。然后使用 ax.set_xticklabels() 设置 x 刻度标签 — 在设置刻度时使用相同的切片。

例如:

 x = ["Ant", "Bob", "Crab", "Donkey", "Elephant", "Fire", "Giant","Hello",
     "Igloo", "Jump", "Kellogg","Llama", "More", "Night"]
y = np.random.randint(0,10,14)

fig, (ax1, ax2) = plt.subplots(1,2, figsize=(9,5))
ax1.plot(x,y)
ax1.set_title("Crowded x axis")

ax2.plot(x,y)
ax2.set_xticks(x[::2])
ax2.set_xticklabels(x[::2], rotation=45)
ax2.set_title("Every 2nd ticks on x axis")

plt.show()

在此处输入图像描述

原文由 DavidG 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果我理解正确,你提到减少显示的刻度数。根据您的情节,有多种方法可以做到这一点,例如:

代码示例

 import matplotlib.pyplot as plt
import numpy as np

x = [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]

y = [1, 4, 9, 6, 2, 4, 5, 6, 7, 2, 1,
     4, 6, 5, 2, 3, 1, 4, 9, 6, 2, 4,
     5, 6, 7, 2, 1, 4, 6, 5, 2, 3]

labels = ["Ant", "Bob", "Crab", "Donkey", "Elephant", "Fire", "Giant","Hello",
          "Igloo", "Jump", "Bull","Even", "More", "Words", "other", "Bazboo",
          "Ant", "Bob", "Crab", "Donkey", "Hippo", "Fire", "Giant","Hello",
          "Igloo", "Hump", "Kellogg","Even", "More", "Words", "Piano", "Foobar"]

plt.xticks(x, labels[::2], rotation='vertical')
plt.locator_params(axis='x', nbins=len(x)/2)
plt.plot(x, y, 'g-', color='red')
plt.tight_layout(pad=4)
plt.subplots_adjust(bottom=0.15)
plt.show()

使用 plt.locator_params 和列表的长度可以将其分成两半,例如:

 plt.xticks(x, labels[::2], rotation='vertical') # set divisor
plt.locator_params(axis='x', nbins=len(x)/2)  # set divisor

地块 1

这应该显示一半的刻度数( x / 2 ),同时保持你的情节统一。这将适用于字符串和整数,因为 x 的长度 (len) 来自列表。

 plt.xticks(x, labels, rotation='vertical')
plt.locator_params(axis='x', nbins=len(x))

地块 2

如果您想要更紧密的间距,请不要使用除数或进行相应调整。

原文由 l‘L’l 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题