matplotlib字符串作为x轴上的标签

时间:2011-09-26 18:03:15

标签: matplotlib

我正在构建一个用于数据分析的小工具,我已经到了这一点,我必须绘制准备好的数据。此前的代码生成以下两个长度相等的列表。

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. t11 [x]和t12 [x]连接所有x。其中t11 [x]实际上是一个字符串。它代表某种探测器组合。例如:'01'表示检测是在第一个探测器的第0段和第二个探测器的第一段进行的。我的目标是将t11中的每个条目作为x轴上的标记点。 t12条目将定义t11条目上方的条形高度(在对数y轴上)

如何配置这样的x轴?  这对我来说都很新鲜。我在文档中找不到任何相关内容。很可能是因为我不知道要搜索什么。那么:我正在努力实现的是“官方”名称。这也可以帮助我。

4 个答案:

答案 0 :(得分:56)

使用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()

答案 1 :(得分:22)

对于matplotlib的面向对象的API,可以使用以下代码在const poll = Polls.findOne( { _id:this.props.poll._id, voters: { $elemMatch: { voterId: Meteor.userId(), questionId: selectedQuestionId, optionId: selectedOptionId } },{ 'voters.$': 1 }); // guard against missing keys or no results const peopleId = poll && poll.voters && poll.voters.peopleId; 的{​​{1}}上绘制自定义文本:

x-ticks

enter image description here

答案 2 :(得分:3)

在matplotlib术语中,您正在寻找一种设置自定义刻度的方法。

使用pyplot.hist快捷方式似乎无法实现此目的。您需要逐步构建图像。 Stack Overflow上已经有一个答案可以解答哪个与你的非常相似,应该让你开始:Matplotlib - label each bin

答案 3 :(得分:0)

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

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)])