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

График с не численными данными по оси x (например, даты)

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

import matplotlib.pyplot as pl
x=['a','b','c','d']
y=[1,2,3,4]
pl.plot(x,y)

Однако, при использовании пакетов plot matplotlib вы получаете предупреждение о том, что данные не являются float (ValueError: неверный литерал для float(): a).

В своем "How-to" они предлагают сначала поместить числовые данные по оси x, а затем отформатировать их. Есть ли способ сделать это напрямую (как указано выше)?

4b9b3361

Ответ 1

Используйте функцию xticks.

import matplotlib.pyplot as pl
xticks=['a','b','c','d']
x=[1,2,3,4]
y=[1,2,3,4]
pl.plot(x,y)
pl.xticks(x,xticks)
pl.show()

Ответ 2

import matplotlib.pyplot as plt
x = ['a','b','c','d']
y = [1,2,3,4]
plt.plot(y)
plt.xticks(range(len(x)), x)
plt.show()

enter image description here

На боковой ноте даты являются численными в этом смысле (т.е. имеют собственный порядок и интервал).

Matplotlib обрабатывает временные данные довольно хорошо и очень отличается от приведенного выше примера. Здесь пример в разделе примеров matplotlib , но он фокусируется демонстрируя несколько разных вещей. В общем, вы просто используете либо plot_date, либо просто создаете данные и вызываете ax.xaxis_date() (или yaxis_date), чтобы сообщить matplotlib, чтобы использовать различные локаторы и тикеры.

Ответ 3

диаграммы лучше в этой ситуации:

x = ['a','b','c','d']
y = [1,2,3,4]
plt.bar(x,y)