matplotlib绘图集x_ticks

2024-06-01 12:30:29 发布

您现在位置:Python中文网/ 问答频道 /正文

如何将索引1、2、3….n处的x_轴标签设置为不同的值。

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”对象没有“set xticks”属性

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


Tags: inforpltitemchunksbetacolorset
1条回答
网友
1楼 · 发布于 2024-06-01 12:30:29

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

一个方便的方法就是打电话 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接口。如果我们定义

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

相关问题 更多 >