Matplotlib 绘图设置 x 轴刻度

20

如何将x轴标签设置为索引1、2、3....n的不同内容。

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: 'module' object has no attribute 'set_xticks'

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

1个回答

33

set_xticksset_xticklabels是轴(axes)方法,而不是在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 的面向对象方式。


或者,您可以通过调用 plt.xticks 来使用类似 Matlab 的 pylab 接口。 如果我们定义

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_cycle来避免在每次调用ax.plot时设置color参数:

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

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