python - 删除 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()
: 即使在搞砸之后,这也完全没有任何作用。
解决方案
首先让我说,您通过从-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)
将绘制:
推荐阅读
- javascript - 卸载组件时,一个特定的道具未定义
- haskell - Haskell 详细记忆类型签名
- php - PHP 链式类方法与其他类合并
- redis - Kubernetes集群中如何连接redis-ha集群?
- excel - 根据 2 个条件查找和连接字符串
- angular - ngFor over Array of Observables
- aframe - A-Frame 0.9.0 中的手控组件支持
- octave - sum elements of vector excluding the first element in Octave
- javascript - Angular在构建时没有嵌入所有脚本
- xml - WPF - Defining a xmlns based on another xmlns