2011-09-26 111 views
32

我正在构建一个用于数据分析的小工具,我已经到了必须绘制准备好的数据的地步。之前的代码生成以下两个等长的列表。matplotlib字符串作为x轴上的标签

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段和第2个检测器的第1段进行的。我的目标是将t11中的每个条目都作为x轴上的标记点。 t12条目将定义t11条目上方的条的高度(在对数y轴上)

如何配置这样的x轴? 2.这对我来说都是非常新的。我在文档中找不到任何相关内容。很可能是因为我不知道要搜索什么。 SO:我想要达到什么样的“官方”名称?这也会帮助我很多。

回答

52

使用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(t12)), t11, size='small') 
plt.show() 
+2

你为什么在两行中都使用'len(t12)'?不应该是'len(t11)'? – User

3

在matplotlib术语中,您正在寻找设置自定义滴答的方法。

看来你不能用pyplot.hist快捷键实现这个。您需要逐步构建您的图像。 Stack Overflow已经有了一个答案,这个问题与你的非常相似,应该让你开始:Matplotlib - label each bin

11

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

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

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) 

enter image description here

0

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

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

then :

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