Xticks на pandas сюжет, переименуйте строку

У меня следующий DF:

A B  C
1 2 'name 1'
2 3 'name 2'
3 5 'name 3'

Что это за правильный порядок построения столбца A и использовать столбец C как xticks?

df['A'].plot(xticks = 'C')
df['A'].plot(xticks = df['C'])

не работают как... В любом случае его работала, например

df['A'].plot(xticks=[1,2,3])

Должен ли я действительно преобразовываться в последовательность? У меня есть также osme модификация вопроса. Я получил следующее сообщение об ошибке:

ValueError: could not convert string to float: name 3

У меня есть столбец строк и вы хотите использовать его как xticks по моему заговору.

PS

Он не работает с прямой функцией pandas. Я нашел решение здесь

Ответ 1

Ссылка, которую вы предоставили, является хорошим ресурсом, но показывает, что все это делается в matplotlib.pyplot и использует .subplots() для доступа к осям. Пока я делал это раньше, я продолжаю искать способы максимально использовать встроенную функцию pandas .plot(). Для меня это может упростить код и упростить использование DataFrame.

Кажется, что есть несколько вещей, которые нелегко сделать полностью внутри параметров df.plot() сами по себе. К счастью, он возвращает matplotlib.AxesSubplot, что открывает гораздо больший диапазон возможностей.

Я скопировал ваши данные в DataFrame:

df = pd.read_clipboard(quotechar="'")

Он выглядит примерно так:

   A B  C
0  1 2 'name 1'
1  2 3 'name 2'
2  3 5 'name 3'

Но, конечно, гораздо лучше в не-табличном калеке html. (Возможно, SO будет исправлять этот один день).

Тогда мне оставалось только:

ax = df.A.plot(xticks=df.index, rot=90)
ax.set_xticklabels(df.C)

Если вы используете IPython/Jupyter и %matplotlib inline, то оба они должны находиться в одной и той же ячейке. Я забыл, что сначала и потратил немало времени, пытаясь понять, что происходит не так.

enter image description here

Вы можете сделать все это с помощью переменной ax:

 ax = df.A.plot()
 ax.set_xticks(df.index)
 ax.set_xticklabels(df.C, rotation=90)

но, как я уже упоминал, я не нашел способ xticklabels внутри параметров функции df.plot(), что позволило бы сделать это все в одной строке.

Дополнительный шаг для поворота ярлыков xtick может быть посторонним в этом примере, но пригодится в том, над которым я работал, когда ища этот ответ.

И, конечно же, вы можете сгруппировать как столбцы A, так и B:

 ax = df.plot()
 ax.set_xticks(df.index)
 ax.set_xticklabels(df.C, rotation=90)

enter image description here