Pyplot / Matplotlib: двоичные данные со строками на оси X

Я знаю, что это такая простая вещь, но из-за нелепых временных ограничений и серьезности ситуации я вынужден спросить что-то вроде этого:

У меня есть два массива из 160 000 записей. Одна содержит строки (имена, которые мне нужно использовать), другая содержит соответствующие 1 и 0.

Я пытаюсь сделать простой «пошаговый» график в pyplot с массивом имен вдоль оси X и 0 и 1 вдоль оси Y.

У меня есть это в настоящее время:

import numpy as np
import matplotlib.pyplot as plt

data = [1, 2, 4, 5, 9]
bindata = [0,1,1,0,1,1,0,0,0,1]
xaxis = np.arange(0, data[-1] + 1)
yaxis = np.array(bindata)
plt.step(xaxis, yaxis)

plt.xlabel('Filter Degree Combinations')
plt.ylabel('Negative Or Positive')
plt.title("Car 1")

#plt.savefig('foo.png') #For saving
plt.show()

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

Но я хочу что-то вроде этого: введите описание изображения здесь

Я собрал воедино код из нескольких примеров, учебных пособий и вопросов о стековом потоке, но я сталкиваюсь с «ValueError: x и y должны иметь одно и то же первое измерение » так часто, что я никуда не попадаю, когда пытаюсь поэкспериментировать свой путь вперед.

Всего 1 ответ


Вы можете достичь желаемого графика, указав метки plt.xticks и их положение на оси x с помощью plt.xticks . Первый range(0, 10, 2) аргументов range(0, 10, 2) - это позиции, за которыми следуют строки

import numpy as np
import matplotlib.pyplot as plt

data = [1, 2, 4, 5, 9]
bindata = [0,1,1,0,1,1,0,0,0,1]
xaxis = np.arange(0, data[-1] + 1)
yaxis = np.array(bindata)
plt.step(xaxis, yaxis)
xlabels = ['Josh', 'Anna', 'Kevin', 'Sophie', 'Steve'] # <-- specify tick-labels
plt.xlabel('Filter Degree Combinations')
plt.ylabel('Negative Or Positive')
plt.title("Car 1")
plt.xticks(range(0, 10, 2), xlabels) # <-- assign tick-labels
plt.show()

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


Есть идеи?

10000