以下是我目前使用相关代码生成的图表:
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之间),然后在适当的索引中将{1}添加到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()
:即使在弄乱它之后,这也绝对没有。
答案 0 :(得分:0)
首先我要说一下,你用plt.xticks
中的第一个数组定义x轴的范围(即你的变量x_axis
),它从-250开始,然后你就是那种粘合剂不同的值(通过你的字符串列表),可能是为了解决你眼中看不到的问题。虽然这是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)
将绘制: