Вращение x-ticks matplotlib - PullRequest
0 голосов
/ 06 июля 2018

Не получается, чтобы метки на оси X повернулись на 90 градусов.

Пример df:

import pandas as pd
import matplotlib.pyplot as plt

d = ({
    'A' : ['1','1','2','2','3','3','3'],     
    'B' : ['A','B','C','C','D','B','C'],
    'C' : ['Foo','Bar','Foo','Bar','Cat','Bar','Cat'],            
    })

df = pd.DataFrame(data=d)

fig,ax = plt.subplots(figsize = (9,4))

df.assign(A=df.A.astype(int)).pivot_table(index="C", columns="B", values="A",aggfunc='count').rename_axis(None).rename_axis(None,1).plot(kind='bar')

plt.show()

Я попробовал основные:

plt.xticks(rotation = 90)

Также пробовал это, но он возвращает ошибку атрибута:

df.assign(A=df.A.astype(int)).pivot_table(index="C", columns="B", values="A",aggfunc='count').rename_axis(None).rename_axis(None,1).plot(kind='bar', rotation = 90)

У меня есть метки, чтобы вращаться через это:

xticklabels = df.C.unique()
ax.set_xticklabels(xticklabels, rotation = 0)

Но возвращается неправильный порядок. Это просто принимает значения, как они появляются. Вместо определения соответствующей метки

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Я запускаю приведенный ниже код, чтобы получить метки с углом 0. Я не понимаю, почему генерируются два графика, поэтому я удалил строку fig,ax = plt.subplots()

import pandas as pd
import matplotlib.pyplot as plt

d = ({
     'A' : ['1','1','2','2','3','3','3'],     
     'B' : ['A','B','C','C','D','B','C'],
     'C' : ['Foo','Bar','Foo','Bar','Cat','Bar','Cat'],            
     })

df = pd.DataFrame(data=d)

#fig,ax = plt.subplots()

df.assign(A=df.A.astype(int)).pivot_table(index="C", columns="B", 
values="A",aggfunc='count').rename_axis(None).rename_axis(None,1).plot(kind='bar')
plt.xticks(rotation = 0)

plt.show()

enter image description here

0 голосов
/ 06 июля 2018

Вы можете управлять ярлыками xticks, создавая вспомогательный участок и настраивая параметры ярлыков, например:

import pandas as pd
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)

d = ({
    'A' : ['1','1','2','2','3','3','3'],     
    'B' : ['A','B','C','C','D','B','C'],
    'C' : ['Foo','Bar','Foo','Bar','Cat','Bar','Cat'],            
    })
df = pd.DataFrame(data=d)

udf = (df.assign(A=df.A.astype(int))
 .pivot_table(index="C", columns="B", values="A",aggfunc='count')
 .rename_axis(None)
 .rename_axis(None,1))

udf.plot(kind='bar', ax=ax)

labels = ax.set_xticklabels(udf.index.values, rotation=0, fontsize=14)

Вывод будет: O rotation and bigger fontsize

Еще одна вещь, я думаю, вам нужно повернуть на 0 градусов, по умолчанию это 90.

PS: Длинные цепочки в операциях с пандами действительно ухудшают читаемость.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...