Подтвердить что ты не робот

Строки matplotlib как метки по оси x

Я создаю небольшой инструмент для анализа данных, и я подошел к делу, где мне приходится составлять подготовленные данные. Код до этого создает следующие два списка с равной длиной.

t11 = ['00', '01', '02', '03', '04', '05', '10', '11', '12', '13', '14', '15', '20', '21', '22', '23', '24', '25', '30', '31', '32', '33', '34', '35', '40', '41', '42', '43', '44', '45', '50', '51', '52', '53', '54', '55']

t12 = [173, 135, 141, 148, 140, 149, 152, 178, 135, 96, 109, 164, 137, 152, 172, 149, 93, 78, 116, 81, 149, 202, 172, 99, 134, 85, 104, 172, 177, 150, 130, 131, 111, 99, 143, 194]

Исходя из этого, я хочу построить гистограмму с matplotlib.plt.hist. Однако есть несколько проблем:  1. t11 [x] и t12 [x] связаны для всех x. Где t11 [x] - фактически строка. Он представляет собой определенную комбинацию детектора. Например: "01" сообщает, что обнаружение было выполнено в 0-м сегменте первого детектора и 1-м сегменте второго детектора. Моя цель состоит в том, чтобы каждая запись из t11 была помечена как точка на оси x. Запись t12 будет определять высоту полосы над входом t11 (по логарифмической оси y).

Как настроить такую ​​ось x?  2. Это все очень ново для меня. Я не мог найти ничего связанного в документации. Скорее всего потому, что я не знал, что искать. SO: Есть ли "официальное" имя для того, чего я пытаюсь достичь. Это также очень помогло бы мне.

4b9b3361

Ответ 1

Используйте команду xticks.

import matplotlib.pyplot as plt

t11 = ['00', '01', '02', '03', '04', '05', '10', '11', '12', '13', '14', '15',
       '20', '21', '22', '23', '24', '25', '30', '31', '32', '33', '34', '35',
       '40', '41', '42', '43', '44', '45', '50', '51', '52', '53', '54', '55']

t12 = [173, 135, 141, 148, 140, 149, 152, 178, 135, 96, 109, 164, 137, 152,
       172, 149, 93, 78, 116, 81, 149, 202, 172, 99, 134, 85, 104, 172, 177,
       150, 130, 131, 111, 99, 143, 194]


plt.bar(range(len(t12)), t12, align='center')
plt.xticks(range(len(t12)), t11, size='small')
plt.show()

Ответ 2

Для объектно-ориентированного API matplotlib можно построить собственный текст в x-ticks axis со следующим кодом:

x = np.arange(2,10,2)
y = x.copy()
x_ticks_labels = ['jan','feb','mar','apr','may']

fig, ax = plt.subplots(1,1) 
ax.plot(x,y)

# Set number of ticks for x-axis
ax.set_xticks(x)
# Set ticks labels for x-axis
ax.set_xticklabels(x_ticks_labels, rotation='vertical', fontsize=18)

введите описание изображения здесь

Ответ 3

В matplotlib lingo вы ищете способ установки пользовательских тиков.

Кажется, вы не можете достичь этого с помощью pyplot.hist ярлыка. Вам нужно будет создать свое изображение шаг за шагом. На Qaru уже есть ответ на вопрос, который очень похож на ваш, и вы должны начать: Matplotlib - помечать каждый бит

Ответ 4

Во-первых, вам нужно получить доступ к объекту оси:

fig, ax = plt.subplots(1,1)

то

ax.set_yticks([x for x in range(-10,11)])
ax.set_yticklabels( ['{0:2d}'.format(abs(x)) for x in range(-10, 11)])