Matplotlib 未显示正确和所需的 x 轴
Matplotlib not showing correct and desired x-axis
我有一个条形图,我正在尝试绘制 x 轴刻度不重叠的条形图。我已经确定了 45 度的角度,并且最大。刻度数为 50,因为这是最大值。可以不重叠显示的内容(如果刻度线倾斜 45 度)。
然而,在我的尝试中,我 运行 遇到了 Matplotlib 的问题,无论我尝试什么,都没有将 x 轴设置为我想要的。我需要绘制多个数据集,所有这些数据集的时间从 -15.8 到 1200-1800 左右。
我尝试了网上找到的几种解决方案,但都无济于事。下面的代码不起作用,因为它没有显示正确的刻度。 运行ge 在 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 轴没有接近预期值。
编辑
扩展一下,这个问题是 的后续问题。基于该问题答案的代码如下
# 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 刻度,除了它们重叠很多 - 因此我只希望最多显示 50 个刻度:
这可能是修复 x_tick_pos
列表表达式的一个简单案例。在您的模拟示例中,如果我们将它们打印出来...
x_tick_pos = [i + 0.5 for i in range(len(timepoints))]
print(x_tick_pos[:5], x_tick_pos[-5:])
...我们得到您的数字所反映的内容:
[0.5, 1.5, 2.5, 3.5, 4.5] [318.5, 319.5, 320.5, 321.5, 322.5]
正在将分配更改为
x_tick_pos = [i + 0.5 for i 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
ticks_step = int(len(missings_df.index) / 50) # 50 here is the max. nr of ticks
x_ticks = [missings_df.index[i] for i in range(0, len(missings_df.index), int(len(missings_df)/50))]
x_tick_pos = [i + 0.5 for i in range(0, len(missings_df.index), int(len(missings_df)/50))]
ax.set_xticks(x_tick_pos)
ax.set_xticklabels(x_ticks, rotation=45)
这正确绘制了 x 轴:
我有一个条形图,我正在尝试绘制 x 轴刻度不重叠的条形图。我已经确定了 45 度的角度,并且最大。刻度数为 50,因为这是最大值。可以不重叠显示的内容(如果刻度线倾斜 45 度)。
然而,在我的尝试中,我 运行 遇到了 Matplotlib 的问题,无论我尝试什么,都没有将 x 轴设置为我想要的。我需要绘制多个数据集,所有这些数据集的时间从 -15.8 到 1200-1800 左右。
我尝试了网上找到的几种解决方案,但都无济于事。下面的代码不起作用,因为它没有显示正确的刻度。 运行ge 在 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 轴没有接近预期值。
编辑
扩展一下,这个问题是
# 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 刻度,除了它们重叠很多 - 因此我只希望最多显示 50 个刻度:
这可能是修复 x_tick_pos
列表表达式的一个简单案例。在您的模拟示例中,如果我们将它们打印出来...
x_tick_pos = [i + 0.5 for i in range(len(timepoints))]
print(x_tick_pos[:5], x_tick_pos[-5:])
...我们得到您的数字所反映的内容:
[0.5, 1.5, 2.5, 3.5, 4.5] [318.5, 319.5, 320.5, 321.5, 322.5]
正在将分配更改为
x_tick_pos = [i + 0.5 for i 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
ticks_step = int(len(missings_df.index) / 50) # 50 here is the max. nr of ticks
x_ticks = [missings_df.index[i] for i in range(0, len(missings_df.index), int(len(missings_df)/50))]
x_tick_pos = [i + 0.5 for i in range(0, len(missings_df.index), int(len(missings_df)/50))]
ax.set_xticks(x_tick_pos)
ax.set_xticklabels(x_ticks, rotation=45)
这正确绘制了 x 轴: