график с произвольным текстом для точек оси 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 имеет 1 миллион точек внутри, и я хочу отображать только Джона, Арнольда, Мавис и Мэтта по оси, равномерно распределенной?
Steve K

@SirBenBenji: используйте индексирование (например x[idx]), чтобы выбрать только данные, которые вы хотите отобразить.
unutbu 05

Я не понимаю, почему вы пишете 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.