14

我如何将索引 1,2,3....n 处的 x_axis 标签设置为不同的东西。

lam_beta = [(lam1,beta1),(lam1,beta2),(lam1,beta3),....(lam_n,beta_n)]
chunks = [chunk1,chunk2,...chunk_n]
ht_values_per_chunk = {chunk1:[val1,val2,...],chunk2:[val1,val2,val3,.....]...}
color='rgbycmk'
     j=0
     for chunk in chunks:
        plt.plot([hr_values_per_chunk[chunk][i] for i,item in enumerate(lam_beta)],[i for i,item in enumerate(lam_beta)],color=j%len(color))
        j+=1

     plt.set_xticks([i for i,item in enumerate(lam_beta)])
     plt.set_xticklabels([item for item in lam_beta],rotation='vertical')
     plt.show()

错误:

AttributeError:“模块”对象没有属性“set_xticks”

在这里,我无法将 lambda_beta 元组的值设置为 x 轴上每个刻度的值,因为它说 plt 没有这种方法。我将如何为 plt 实现这一目标?我使用 xticks 是因为我在 matplotlib 中生成直方图时就是这样做的。任何帮助,将不胜感激。提前致谢!

4

1 回答 1

28

set_xticksset_xticklabels是轴方法,而不是plt模块命名空间中的函数。这就是错误信息的意思,'module' object has no attribute 'set_xticks'

而且,

[i for i,item in enumerate(lam_beta)]

可以简化为

range(len(lam_beta))

[item for item in lam_beta]

可以简化为

lam_beta

一个方便的方法axes是调用 plt.subplots

所以:

fig, ax = plt.subplots()
...
ax.set_xticks(range(len(lam_beta)))
ax.set_xticklabels(lam_beta, rotation='vertical')

ax是一个Axes对象。调用Axes方法是使用 matplotlib 的面向对象的方法。


或者,您可以通过调用来使用 Matlab 风格的pylab界面plt.xticks。如果我们定义

loc = range(len(lam_beta))
labels = lam_beta

然后

plt.xticks(loc, labels, rotation='vertical')

相当于

fig, ax = plt.subplots()
ax.set_xticks(loc)
ax.set_xticklabels(labels, rotation='vertical')

plt.xticks将刻度位置和标签设置为当前轴。


列表理解

[hr_values_per_chunk[chunk][i] for i,item in enumerate(lam_beta)]

可以简化为

hr_values_per_chunk[chunk][:len(lam_beta)]

您可以避免使用ax.set_color_cyclecolor为每次调用设置参数:ax.plot

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
lam_beta = [(lam1,beta1),(lam1,beta2),(lam1,beta3),....(lam_n,beta_n)]
chunks = [chunk1,chunk2,...chunk_n]
ht_values_per_chunk = {chunk1:[val1,val2,...],chunk2:[val1,val2,val3,.....]...}
color='rgbycmk'
ax.set_color_cycle(colors)

for chunk in chunks:
    vals = hr_values_per_chunk[chunk][:len(lam_beta)]
    ax.plot(vals, range(len(lam_beta)))

ax.set_xticks(range(len(lam_beta)))
ax.set_xticklabels(lam_beta, rotation='vertical')
plt.show()
于 2013-12-02T18:46:10.880 回答