หมุนข้อความฉลากในตัวประกอบปัจจัยทางทะเล


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, DPI ทั้งหมดโดยไม่ต้องใช้ matplotlib
Ted Petrou

คำตอบ:


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)

ป้อนคำอธิบายรูปภาพที่นี่

มีความคิดเห็นและคำตอบอื่นที่อ้างว่า "ใช้งานไม่ได้" อย่างไรก็ตามทุกคนสามารถเรียกใช้รหัสตามที่เขียนไว้ที่นี่และดูว่าทำงานได้หรือไม่ คำตอบอื่น ๆ ที่ไม่ได้ให้เป็นตัวอย่างที่สามารถทำซ้ำได้ของสิ่งที่ไม่ทำงานทำให้มันยากมากที่จะอยู่ แต่ฉันเดาว่าคนที่กำลังพยายามที่จะใช้วิธีการแก้ปัญหานี้เพื่อการส่งออกของฟังก์ชั่นที่ส่งกลับวัตถุแทน เหล่านี้เป็นสิ่งที่แตกต่างกันและวิธีการที่ไม่แน่นอนต้องมีรายชื่อของป้ายและไม่สามารถเพียงแค่เปลี่ยนคุณสมบัติของป้ายที่มีอยู่ในนั้น บทเรียนคือสิ่งสำคัญที่คุณต้องใส่ใจกับวัตถุประเภทใดที่คุณกำลังทำงานด้วยAxesFacet GridAxes.set_xticklabels()Axes


ฉันได้รับข้อผิดพลาด: IndexError: ดัชนีมากเกินไป รหัสของฉัน! g = sns.factorplot ("month_date", "num_proposals", "บัญชี", Sort_data, col = "บัญชี", col_wrap = 3, sharex = False); g.set_xticklabels (การหมุน = 30)
yoshiserry

10
@soupault - สิ่งนี้ใช้ได้กับฉันคล้ายกับสิ่งที่คุณคิดขึ้นมา แต่อาจจะดีกว่าสำหรับ ax ใน g.axes.flatten (): ax.set_xticklabels (ax.get_xticklabels (), การหมุน = 30)
odedbd

6
ใช้ha="right"เพื่อจัดแนวป้ายแกน x ให้ตรงกับเครื่องหมายขีด ieg.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
Max Power

1
วิธีการพล็อตของ Seaborn บางอันส่งคืนFacetGridออบเจ็กต์บางอันส่งคืนAxesออบเจ็กต์Matplotlib สำหรับอดีตการไม่ตั้งค่าป้ายกำกับจะใช้งานได้สำหรับกรณีหลังจะไม่ทำงาน คุณสามารถดูว่ามีFacetGridวัตถุโดยดูที่เอกสาร: seaborn.pydata.org/api.html ตัวอย่างเช่นหากคุณใช้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) เป็นเพียงตัวเดียวเท่านั้นที่ฉันสามารถทำงานได้
A Rob4


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

สำหรับ a seaborn.heatmapคุณสามารถหมุนได้โดยใช้@ ตามคำตอบของ @ Aman )

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
สิ่งนี้ได้ผลสำหรับฉันแค่ผ่านการหมุน Param ก็ไม่ได้ทำอะไรเลยฉันต้องผ่านป้ายกำกับด้วยเพื่อให้งานนี้
เสร็จ

0

แปลงของ seaborn ที่ถูก facetgrid จะไม่ทำงาน (เช่น catplot)

g.set_xticklabels(rotation=30) 

อย่างไรก็ตาม barplot, countplot ฯลฯ จะทำงานได้เนื่องจาก facetgrid ไม่รองรับ ด้านล่างจะทำงานสำหรับพวกเขา

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

นอกจากนี้ในกรณีที่คุณมี 2 กราฟซ้อนทับอยู่ด้านบนให้ลอง set_xticklabels บนกราฟที่รองรับ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.