Способ, которым pandas обрабатывает x-тики для штриховых рисунков, может быть довольно запутанным, если ваши x-метки имеют числовые значения. Давайте возьмем пример:
import pandas as pd
import numpy as np
x = np.linspace(0, 1, 21)
y = np.random.rand(21)
s = pd.Series(y, index=x)
ax = s.plot(kind='bar', figsize=(10, 3))
ax.figure.tight_layout()
Вы можете ожидать, что места клеща соответствовать непосредственно к значениям в x
, т.е. 0, 0,05, 0,1, ..., 1,0. Однако это не так:
print(ax.get_xticks())
# [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20]
Вместо панды устанавливает клещ местоположения в соответствии с индексами каждого элемента в x
, но затем устанавливает клещ метки согласно значений в x
:
print(' '.join(label.get_text() for label in ax.get_xticklabels()))
# 0.0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 1.0
из-за Тхи s, установка позиции клеща непосредственно (либо с помощью ax.set_xticks
) или передавая xticks=
аргумент pd.Series.plot()
не даст вам эффект вы ожидаете:
new_ticks = np.linspace(0, 1, 11) # 0.0, 0.1, 0.2, ..., 1.0
ax.set_xticks(new_ticks)
Вместо этого вы должны были бы обновить позиции и ярлыки вашего х-клещей отдельно:
# positions of each tick, relative to the indices of the x-values
ax.set_xticks(np.interp(new_ticks, s.index, np.arange(s.size)))
# labels
ax.set_xticklabels(new_ticks)
Такое поведение действительно имеет большой смысл в большинстве случаев. Для штриховых диаграмм обычно х-метки не являются числовыми (например, строки, соответствующие категориям), и в этом случае невозможно было бы использовать значения в x
для установки мест тика. Не вводя еще один аргумент для определения своих местоположений, наиболее логичным выбором было бы использовать их индексы.
Как вы создали этот сюжет? –
Я сделал это с помощью pandas DF, 'speed.plot (kind = 'bar', figsize = (15, 7))', но не сделал никаких указаний относительно интервала xtick – hselbie