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

Sas*_*sha 38 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]
Run Code Online (Sandbox Code Playgroud)

基于此,我想用matplotlib.plt.hist建立一个直方图.但是,存在一些问题:1.对于所有x,连接t11 [x]和t12 [x].其中t11 [x]实际上是一个字符串.它代表某种探测器组合.例如:'01'表示检测是在第一个探测器的第0段和第二个探测器的第一段进行的.我的目标是将t11中的每个条目作为x轴上的标记点.t12条目将定义t11条目上方的条形高度(在对数y轴上)

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

Ste*_*rry 59

使用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()
Run Code Online (Sandbox Code Playgroud)

  • `bar` 有一个参数 `tick_label` 可以用来代替 `plt.xticks`,即 `plt.bar(..., tick_label=t11)`。 (3认同)
  • 为什么你在两行中使用`len(t12)`?不应该是`len(t11)`? (2认同)

小智 25

对于matplotlib的面向对象的API可以绘制的自定义文本x-ticksaxis使用下面的代码:

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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述