набор графиков matplotlib x_ticks

Как бы я установил метки x_axis в индексах 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: объект «модуль» не имеет атрибута «set_xticks»

Здесь я не могу установить значения кортежа lambda_beta как значения каждой из галочек на оси X, поскольку он говорит, что у plt нет такого метода. Как я смогу добиться этого для plt? Я использовал xticks, потому что именно так я сделал это при создании гистограммы в matplotlib. Любая помощь будет оценена по достоинству. Заранее спасибо!


person anonuser0428    schedule 02.12.2013    source источник


Ответы (1)


set_xticks и set_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:

So:

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

ax является объектом Axes. Вызов методов Axes — это объектно-ориентированный подход к использованию matplotlib.


В качестве альтернативы вы можете использовать интерфейс pylab в стиле Matlab, вызвав 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)]

И вы могли бы не устанавливать параметр color для каждого вызова ax.plot, используя ax. set_color_cycle:

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()
person unutbu    schedule 02.12.2013