seaborn factorplot에서 레이블 텍스트 회전


152

간단한 요소 그림이 있습니다

import seaborn as sns
g = sns.factorplot("name", "miss_ratio", "policy", dodge=.2, 
    linestyles=["none", "none", "none", "none"], data=df[df["level"] == 2])

여기에 이미지 설명을 입력하십시오

문제는 x 레이블이 모두 함께 실행되어 읽을 수 없다는 것입니다. 레이블을 읽을 수 있도록 텍스트를 어떻게 회전합니까?


29
import matplotlib.pylab as plt. plt.xticks(rotation=‌​45)
rafaelvalle

Dexplot 라이브러리는 , TEH 그림 크기를 설정 라벨, 포장하기 matplotlib를 사용하지 않고 모든 dpi로 기능이 있습니다.
테드 페트로 우

답변:


137

Aman은 일반적인 matplotlib 명령을 사용할 수있는 것이 맞지만 다음과 같이 내장되어 있습니다 FacetGrid.

import seaborn as sns
planets = sns.load_dataset("planets")
g = sns.factorplot("year", data=planets, aspect=1.5, kind="count", color="b")
g.set_xticklabels(rotation=30)

여기에 이미지 설명을 입력하십시오

이 "작동하지 않는다"고 주장하는 일부 의견과 다른 답변이 있지만, 누구나 여기에 작성된 코드를 실행하여 작동한다는 것을 알 수 있습니다. 다른 대답은 작동하지 않는 것에 대한 재현 가능한 예를 제공하지 않으므로 해결하기가 매우 어렵지만 사람들은이 솔루션을 a 대신 객체 를 반환 하는Axes 함수의 출력에 적용하려고 합니다 Facet Grid. 이것들은 서로 다르며,이 Axes.set_xticklabels()방법에는 실제로 라벨 목록이 필요하며에있는 기존 라벨의 속성을 간단히 변경할 수 없습니다 Axes. 교훈은 어떤 종류의 작업을하고 있는지주의를 기울이는 것입니다.


오류가 발생했습니다 : IndexError : 인덱스가 너무 많습니다. 내 코드! g = sns.factorplot ( "month_date", "num_proposals", "account", sorted_data, col = "account", col_wrap = 3, sharex = False); g.set_xticklabels (rotation = 30)
yoshiserry

10
@soupault-이것은 나에게 도움이되었지만 g.axes.flatten ()의 도끼와 비슷하지만 약간 더 깨끗합니다. ax.set_xticklabels (ax.get_xticklabels (), rotation = 30)
odedbd

6
ha="right"x 축 레이블을 눈금에 가운데 정렬하는 데 사용 합니다. 즉g.set_xticklabels([label1, label2], rotation=30, ha='right')
Manavalan Gajapathy

72
나는 변경 될 때까지 위의 몇 가지 코멘트와 유사한이 나에게 오류를 준 g.set_xticklabels(rotation=30)g.set_xticklabels(g.get_xticklabels(), rotation=30)이 답변에 감사 : stackoverflow.com/a/39689464/1870832
최대 전력

1
일부 Seaborn 플로팅 방법은 FacetGrid객체를 반환하고 일부는 Matplotlib Axes객체를 반환 합니다. 전자의 경우 레이블을 설정하지 않으면 작동하지만 후자의 경우 레이블이 작동하지 않습니다. seaborn.pydata.org/api.htmlFacetGrid 문서를 보면 어떤 객체인지 확인할 수 있습니다 . 예를 들어, 이것을 사용 하면 작동하지만 객체를 반환하기 때문에 작동 하지 않습니다 . g = sns.catplot()sns.barplot()Axes
getup8

252

@mwaskorn의 답변에 문제가있었습니다.

g.set_xticklabels(rotation=30)

레이블도 필요하기 때문에 실패합니다. @Aman의 답변보다 조금 더 쉽습니다.

plt.xticks(rotation=45)

33
당신은 또한 그렇게 레이블을 얻을 수 있습니다 g.set_xticklabels(g.get_xticklabels(), rotation=30). 출력을 억제하려면 변수에 지정하십시오.
joelostblom

3
설정 plt.xtics이 나를 위해 일할 때 이것이 맞다고 생각합니다 .
muammar

바이올린 음모에 대한 위의 모든 옵션을 시도하고 plt.xticks (rotation = n)은 내가 일할 수있는 유일한 도구입니다
Rob4

29

이것은 여전히 ​​matplotlib 객체입니다. 이 시도:

# <your code here>
locs, labels = plt.xticks()
plt.setp(labels, rotation=45)

8

누구나 clustermap CorrGrids (주어진 예제의 일부)에 대해이 방법을 궁금해하는 경우 :

import seaborn as sns
import matplotlib.pyplot as plt
sns.set(context="paper", font="monospace")

# Load the datset of correlations between cortical brain networks
df = sns.load_dataset("brain_networks", header=[0, 1, 2], index_col=0)
corrmat = df.corr()

# Set up the matplotlib figure
f, ax = plt.subplots(figsize=(12, 9))

# Draw the heatmap using seaborn
g=sns.clustermap(corrmat, vmax=.8, square=True)
rotation = 90 
for i, ax in enumerate(g.fig.axes):   ## getting all axes of the fig object
     ax.set_xticklabels(ax.get_xticklabels(), rotation = rotation)


g.fig.show()

6

plt.setp다음과 같이 사용할 수도 있습니다 .

import matplotlib.pyplot as plt
import seaborn as sns

plot=sns.barplot(data=df,  x=" ", y=" ")
plt.setp(plot.get_xticklabels(), rotation=90)

라벨을 90도 회전시킵니다.


5

의 경우 seaborn.heatmap다음을 사용하여 회전 할 수 있습니다 ( @ Aman 's answer 기반 )

pandas_frame = pd.DataFrame(data, index=names, columns=names)
heatmap = seaborn.heatmap(pandas_frame)
loc, labels = plt.xticks()
heatmap.set_xticklabels(labels, rotation=45)
heatmap.set_yticklabels(labels[::-1], rotation=45) # reversed order for y

1
이것은 나를 위해 일했다, 단지 회전 매개 변수를 전달하는 것은 아무것도하지 않았다, 나는이 작업을 얻기 위해 레이블을 전달해야했다
Raveen Beemsingh

0

패싯 그리드에 의해 지원되는 모든 선조 플롯은 작동하지 않습니다 (예 : catplot).

g.set_xticklabels(rotation=30) 

그러나 bartlot, countplot 등은 facetgrid에서 지원하지 않으므로 작동합니다. 아래는 그들을 위해 일할 것입니다.

g.set_xticklabels(g.get_xticklabels(), rotation=30)

또한 두 개의 그래프가 서로 겹쳐져있는 경우이를 지원하는 그래프에서 set_xticklabels를 시도하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.