【发布时间】:2021-01-21 14:40:11
【问题描述】:
我有一个条形图,我试图在 x 轴刻度不重叠的情况下进行绘制。我已经确定了 45 度的角度,并且最大。 50 的刻度数,因为这大约是最大值。可以在不重叠的情况下显示的内容(如果刻度倾斜 45 度)。
但是,在我的尝试中,我遇到了 Matplotlib 的问题,无论我尝试什么,都没有将 x 轴设置为我想要的。我需要绘制多个数据集,所有这些数据集的时间从 -15.8 到 1200-1800 左右。
我尝试了几种我在网上找到的解决方案,但都无济于事。下面的代码不起作用,因为它没有显示正确的刻度。该范围在timepoints 列表中的最后一个数字之前停止。
import numpy as np
from matplotlib import pyplot as plt
# Mock data
timepoints = list(np.arange(-15.8, 1276.2, 4))
patient_counts = np.random.randint(300, 600, len(timepoints))
x_tick_pos = [i + 0.5 for i in range(len(timepoints))]
# Plot barplot
fig, ax = plt.subplots(figsize=(16, 10))
ax.bar(x_tick_pos, patient_counts, align='center', width=1.0)
# Set x axis ticks
ax.set_xticklabels(timepoints, rotation=45)
ax.locator_params(axis='x', nbins=20)
plt.show()
显然,x 轴没有接近预期值。
编辑
为了扩展,这个问题是this thread 的后续问题。基于该问题答案的代码如下
# Plot barplot
fig, ax = plt.subplots(figsize=(16, 10))
ax.bar(x_tick_pos, patient_counts, align='center', width=1.0)
# Set x axis ticks
ax.set_xticks(x_tick_pos)
ax.set_xticklabels(x_ticks, rotation=45)
这似乎设置了正确的 x-ticks,除了它们重叠很多 - 因此我只希望最多显示 50 个刻度:
【问题讨论】:
-
去掉
ax.set_xticklabels(timepoints, rotation=45)会得到i.stack.imgur.com/beM78.png,看起来很清晰。 -
如果你想要超过 50 个刻度并且你不想让字体变小那么我想你需要把数字变大吗?但是你真的想要超过 50 个刻度标签吗?
-
@BigBen 感谢您的回复。我使用的真实数据具有从 -15.8 到 1276.2 的 X 值。如果我按照你的建议去做,我最终会得到一个从 0 到 340 的 x 轴,这自然没有多大意义。我将尝试编辑我的帖子以更准确地显示问题
标签: python matplotlib subplot