2015-12-05 3 views
1

У меня есть простой сюжет, с й этикетками 1, 1,25, 1,5, 1,75, 2 и т.д. до 15:Как установить галочку для оси x для графика штрихов, созданного с помощью pandas DataFrame?

enter image description here

Участок был создан из pandas.DataFrame без указания интервала XTICK:

speed.plot(kind='bar',figsize=(15, 7)) 

Теперь я хотел бы х-интервал быть с шагом 1, а не 0,25, так что этикетки будут читать 1,2,3,4,5 и т.д.

Я уверен, что это легко, но я не могу я понимаю это.

Я нашел plt.xticks(), который кажется правильным, но, возможно, это set_xticks?

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

+0

Как вы создали этот сюжет? –

+0

Я сделал это с помощью pandas DF, 'speed.plot (kind = 'bar', figsize = (15, 7))', но не сделал никаких указаний относительно интервала xtick – hselbie

ответ

5

Способ, которым 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() 

enter image description here

Вы можете ожидать, что места клеща соответствовать непосредственно к значениям в 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) 

enter image description here


Вместо этого вы должны были бы обновить позиции и ярлыки вашего х-клещей отдельно:

# 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) 

enter image description here

Такое поведение действительно имеет большой смысл в большинстве случаев. Для штриховых диаграмм обычно х-метки не являются числовыми (например, строки, соответствующие категориям), и в этом случае невозможно было бы использовать значения в x для установки мест тика. Не вводя еще один аргумент для определения своих местоположений, наиболее логичным выбором было бы использовать их индексы.

+1

Спасибо, это полезно. – hselbie