首页 > 解决方案 > 删除 x 轴上的所有其他刻度

问题描述

这是我当前使用相关代码生成的图表:

在此处输入图像描述

values = [2240, 1990, 1460, 1600, 1440, 2240, 100, 5840]
values_count = [0] * 23

#there is a for loop with "if" statements counting up the
# data that lies within 2 bounds - left code out to minimize.

x_axis = np.arange(-250, 5251, 250)
barlist = plt.bar(x_axis, values_count, edgecolor = 'green', align = 'center', width = 290, zorder = 2)
ax = plt.gca()
ax.yaxis.grid(linestyle = '--', linewidth = 1, alpha = 0.2, zorder = -1)
plt.xticks(x_axis , ['', '0', '', '500', '', '1000', '', '1500', '', '2000', '', '2500', 
'', '3000', '', '3500', '', '4000', '', '4500', '', '5000'])
plt.show()

代码应该做什么:

它读入一个值列表,然后确定值的位置(即在 1500 和 2000 之间),然后values_count在适当的索引中添加一个。然后它绘制一个条形图,显示位于 2 个值之间的值的数量。代码执行此操作,但问题在于 x 轴刻度。

问题:

有刻度线直接位于柱下方(即低于 0、介于 0 和 500、500 和 1000 之间,等等 - 最好的例子是从 1000 到 2500)。我想删除这些刻度,同时保持条之间的刻度(即标记为 0、500、1000 等的刻度)。为清楚起见,我圈出了应该删除的刻度:

在此处输入图像描述

我试过的:

plt.xticks(x_axis):这将 x 轴从 -250 标记到 5250,这提供了标签的重叠。通过添加列表 ( ['', 0, '', '500', ..., '', '5000', '']) 作为第二个参数,它消除了所有其他标签,使图形的 x 轴像上面一样干净。

plticker.MultipleLocator():这并没有解决我的刻度线被删除的问题,而是当我为此输入一个值时添加的更少。

plticker.FixedLocator(): 即使在搞砸之后,这也完全没有任何作用。

标签: pythonmatplotlib

解决方案


首先让我说,您通过从-250 运行的第一个数组plt.xticks(即您的变量x_axis)定义 x 轴的范围,然后您将不同的值粘合在上面(通过您的字符串列表) ,可能是为了解决您眼中不正确的问题。虽然这是目的xticks(例如,在引擎盖下显示工作日仍然充当从 0 到 6 的数字),但您的方式是误用:如果我是您,我也看不清楚。
但是,恕我直言,您只是想要一个直方图,不是吗?

让我们检查一下:

plt.figure()
values = [2240, 1990, 1460, 1600, 1440, 2240, 100, 5840]
bins = np.arange(0,6001,500)
plt.hist(values, bins, rwidth=.9)
plt.xticks(bins)

将绘制:

在此处输入图像描述


推荐阅读