matplotlib字符串作为x轴标签

59

我正在构建一个用于数据分析的小工具,我已经到了绘制准备好的数据的阶段。在这之前的代码产生了以下两个等长列表。

t11 = ['00', '01', '02', '03', '04', '05', '10', '11', '12', '13', '14', '15', '20', '21', '22', '23', '24', '25', '30', '31', '32', '33', '34', '35', '40', '41', '42', '43', '44', '45', '50', '51', '52', '53', '54', '55']

t12 = [173, 135, 141, 148, 140, 149, 152, 178, 135, 96, 109, 164, 137, 152, 172, 149, 93, 78, 116, 81, 149, 202, 172, 99, 134, 85, 104, 172, 177, 150, 130, 131, 111, 99, 143, 194]

基于此,我想使用matplotlib.plt.hist构建一个直方图。但是,有几个问题: 1. 对于所有的x,t11[x]和t12[x]都是相连的。其中,t11[x]实际上是一个字符串。它表示某个探测器组合。例如:"01"表示检测发生在第一个探测器的第0段和第二个探测器的第1段。我的目标是将t11中的每个条目作为带标签的点显示在x轴上。t12条目将定义在t11条目上方的条形图的高度(在对数y轴上)。 2. 这对我来说都很新。我在文档中找不到任何相关内容。最可能是因为我不知道该搜索什么。那么:我正在尝试实现的东西是否有“官方”名称?这也会对我有很大帮助。

4个回答

80

使用xticks命令。

import matplotlib.pyplot as plt

t11 = ['00', '01', '02', '03', '04', '05', '10', '11', '12', '13', '14', '15',
       '20', '21', '22', '23', '24', '25', '30', '31', '32', '33', '34', '35',
       '40', '41', '42', '43', '44', '45', '50', '51', '52', '53', '54', '55']

t12 = [173, 135, 141, 148, 140, 149, 152, 178, 135, 96, 109, 164, 137, 152,
       172, 149, 93, 78, 116, 81, 149, 202, 172, 99, 134, 85, 104, 172, 177,
       150, 130, 131, 111, 99, 143, 194]


plt.bar(range(len(t12)), t12, align='center')
plt.xticks(range(len(t11)), t11, size='small')
plt.show()

2
为什么两行中都使用了 len(t12)?其中一个不应该是 len(t11) 吗? - User
@用户 一般来说,你是对的。在调用 xticks 时,通常希望刻度线的数量等于标签的数量。但在这种情况下,两个列表的长度相同,所以并不重要。 - hoffee
3
bar 函数有一个参数 tick_label,可以替代 plt.xticks 使用,即 plt.bar(..., tick_label=t11) - luator

51

使用matplotlib的面向对象API,可以使用以下代码在axisx-ticks上绘制自定义文本:

x = np.arange(2,10,2)
y = x.copy()
x_ticks_labels = ['jan','feb','mar','apr']

fig, ax = plt.subplots(1,1) 
ax.plot(x,y)

# Set number of ticks for x-axis
ax.set_xticks(x)
# Set ticks labels for x-axis
ax.set_xticklabels(x_ticks_labels, rotation='vertical', fontsize=18)

在这里输入图片描述


3

首先,您需要访问轴对象:

fig, ax = plt.subplots(1,1)

那么:

ax.set_yticks([x for x in range(-10,11)])
ax.set_yticklabels( ['{0:2d}'.format(abs(x)) for x in range(-10, 11)])

3
在Matplotlib中,您正在寻找一种设置自定义刻度的方法。
看起来您无法使用pyplot.hist快捷方式实现此目的。相反,您需要逐步构建图像。这里有一个与您非常相似的问题的答案,应该能帮助您入门:Matplotlib - label each bin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接