сюжет із спеціальним текстом для осей x очок


106

Я малюю сюжет, використовуючи matplotlib та python, як зразок коду нижче.

x = array([0,1,2,3])
y = array([20,21,22,23])
plot(x,y)
show()

Оскільки це код вище на осі x, я побачу намальовані значення, 0.0, 0.5, 1.0, 1.5тобто ті ж самі значення моїх опорних значень x.

Чи все-таки потрібно зіставити кожну точку x з іншим рядком? Так, наприклад, я хочу, щоб на осі x відображалися імена місяців (рядків Jun, July,...) або інші рядки, наприклад, імена людей ( "John", "Arnold", ...) або час ( "12:20", "12:21", "12:22", ..).

Чи знаєте ви, що я можу зробити або яку функцію мати для перегляду?
Для моєї мети це могло б matplotlib.tickerдопомогти?

Відповіді:


195

Ви можете вручну встановити xticks (і yticks) за допомогою pyplot.xticks :

import matplotlib.pyplot as plt
import numpy as np

x = np.array([0,1,2,3])
y = np.array([20,21,22,23])
my_xticks = ['John','Arnold','Mavis','Matt']
plt.xticks(x, my_xticks)
plt.plot(x, y)
plt.show()


44
rotationтакож іноді корисний:plt.xticks(range(5), ["some", "words", "as", "x", "ticks"], rotation=45)
Adobe

4
І як рівномірно розподілити елементи по осі x? Скажімо, моя вісь x має 1 мільйон точок всередині, і я хочу відображати лише Джона, Арнольда, Мевіс і Метта вздовж осі рівномірно розподілених?
Стів К

@SirBenBenji: Використовуйте індексацію (наприклад x[idx]), щоб вибрати лише ті дані, які потрібно відобразити.
unutbu

Я не розумію, чому ви пишете pylab, що відповідало застарілим і на мою думку неправильним.
Маріо

1

Це працювало для мене. Щомісяця на осі X

str_month_list = ['January','February','March','April','May','June','July','August','September','October','November','December']
ax.set_xticks(range(0,12))
ax.set_xticklabels(str_month_list)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.