python matplotlib에서 축 텍스트 회전
X 축에서 텍스트를 회전시키는 방법을 알 수 없습니다. 타임 스탬프이므로 샘플 수가 증가함에 따라 겹칠 때까지 점점 가까워집니다. 샘플이 서로 가까워 질수록 텍스트가 겹치지 않도록 텍스트를 90도 회전하고 싶습니다.
아래는 내가 가지고있는 것입니다 .X 축 텍스트를 회전시키는 방법을 알 수 없다는 점을 제외하고는 잘 작동합니다.
import sys
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import datetime
font = {'family' : 'normal',
'weight' : 'bold',
'size' : 8}
matplotlib.rc('font', **font)
values = open('stats.csv', 'r').readlines()
time = [datetime.datetime.fromtimestamp(float(i.split(',')[0].strip())) for i in values[1:]]
delay = [float(i.split(',')[1].strip()) for i in values[1:]]
plt.plot(time, delay)
plt.grid(b='on')
plt.savefig('test.png')
이것은 나를 위해 작동합니다 :
plt.xticks(rotation=90)
쉬운 방법
여기 에 설명 된 것처럼 matplotlib.pyplot
figure
클래스 에는 기존 날짜가 적절하게 자동으로 회전하는 그림이 있습니다.
데이터를 플로팅 한 후 호출 할 수 있습니다 (예 ax.plot(dates,ydata)
:
fig.autofmt_xdate()
레이블을 추가로 포맷해야하는 경우 위의 링크를 확인하십시오.
날짜 이외의 객체
당 languitar 의 코멘트, I가 제시 한 방법 비는-날짜는 xticks
등, 줌 때이 아니라면 제대로 업데이트되지 것입니다 datetime
귀하의 x 축 데이터로 사용되는 객체가 수행해야 할, 토미 의 답을 ' :
for tick in ax.get_xticklabels():
tick.set_rotation(45)
pyplot.setp를 사용해보십시오. 나는 당신이 이런 식으로 할 수 있다고 생각합니다.
x = range(len(time))
plt.xticks(x, time)
locs, labels = plt.xticks()
plt.setp(labels, rotation=90)
plt.plot(x, delay)
에서 아파트
plt.xticks(rotation=90)
이것은 또한 가능하다 :
plt.xticks(rotation='vertical')
비슷한 예를 생각해 냈습니다. 다시 말하지만 회전 키워드는 중요합니다.
from pylab import *
fig = figure()
ax = fig.add_subplot(111)
ax.bar( [0,1,2], [1,3,5] )
ax.set_xticks( [ 0.5, 1.5, 2.5 ] )
ax.set_xticklabels( ['tom','dick','harry'], rotation=45 ) ;
내 답변은 cjohnson318의 답변에서 영감을 얻었지만 하드 코딩 된 레이블 목록을 제공하고 싶지 않았습니다. 기존 레이블을 회전하고 싶었습니다.
for tick in ax.get_xticklabels():
tick.set_rotation(45)
사용하는 경우 plt
:
plt.xticks(rotation=90)
플롯의 ax
축으로 가정하여 팬더 또는 seaborn을 사용 하여 플롯하는 경우 :
ax.set_xticklabels(ax.get_xticklabels(), rotation=90)
위의 다른 방법 :
for tick in ax.get_xticklabels():
tick.set_rotation(45)
axes 객체에 회전을 적용하려면 가장 쉬운 방법은을 사용하는 것 tick_params
입니다. 예를 들어.
ax.tick_params(axis='x', labelrotation=90)
Matplotlib 설명서 참조 here .
이것은로 반환 된 축 배열이있을 때 유용하며 plt.subplots
, set_xticks
이 경우 눈금 레이블을 설정해야하고 눈금 위에 반복되는 눈금이 더 편리하기 때문에 사용하는 것보다 편리합니다 (명백한 이유로)
여기에 많은 "올바른"답변이 있지만 몇 가지 세부 사항이 몇 가지로 남아 있다고 생각하므로 하나 더 추가하겠습니다. OP는 90도 회전을 요청했지만 0 또는 90이 아닌 각도를 사용할 때 수평 정렬도 변경해야하기 때문에 45 도로 변경합니다. 그렇지 않으면 라벨이 중심을 벗어나고 약간 오도 될 것입니다 (그리고 여기에 오는 많은 사람들이 축을 90 이외의 것으로 회전시키고 싶어합니다).
가장 쉬운 코드
옵션 1
plt.xticks(rotation=45, ha='right')
앞에서 언급했듯이 객체 지향 접근 방식을 사용하려는 경우 바람직하지 않을 수 있습니다.
옵션 2
또 다른 빠른 방법 (날짜 개체를 대상으로하지만 모든 레이블에서 작동하는 것 같습니다.
fig.autofmt_xdate(rotation=45)
fig
당신은 보통 다음에서 얻을 것입니다 :
fig = plt.figure()
fig, ax = plt.subplots()
fig = ax.figure
객체 지향 / 직접 다루기 ax
옵션 3a
라벨 목록이있는 경우 :
labels = ['One', 'Two', 'Three']
ax.set_xticklabels(labels, rotation=45, ha='right')
옵션 3b
현재 플롯에서 레이블 목록을 얻으려면 다음을 수행하십시오.
# Unfortunately you need to draw your figure first to assign the labels,
# otherwise get_xticklabels() will return empty strings.
plt.draw()
ax.set_xticklabels(ax.get_xticklabels(), rotation=45, ha='right')
옵션 4
위와 비슷하지만 대신 수동으로 반복하십시오.
for label in ax.get_xticklabels():
label.set_rotation(45)
label.set_ha('right')
옵션 5
우리는 여전히 pyplot
( plt
)를 사용 하지만 특정 ax
객체 의 속성을 변경하기 때문에 객체 지향적 입니다.
plt.setp(ax.get_xticklabels(), rotation=45, ha='right')
옵션 6
이 옵션은 간단하지만 AFAIK에서는이 방법으로 레이블을 수평 정렬 할 수 없으므로 각도가 90이 아닌 경우 다른 옵션이 더 나을 수 있습니다.
ax.tick_params(axis='x', labelrotation=45)
편집 : 이 정확한 "버그"에 대한 토론이 있으며 수정 사항은 잠재적으로 예정되어 있습니다 v3.2.0
: https://github.com/matplotlib/matplotlib/issues/13774
import pylab as pl
pl.xticks(rotation = 90)
무엇을 플로팅하고 있는지에 따라 다릅니다.
import matplotlib.pyplot as plt
x=['long_text_for_a_label_a',
'long_text_for_a_label_b',
'long_text_for_a_label_c']
y=[1,2,3]
myplot = plt.plot(x,y)
for item in myplot.axes.get_xticklabels():
item.set_rotation(90)
팬더와 seaborn의 경우 Axes 객체를 제공합니다.
df = pd.DataFrame(x,y)
#pandas
myplot = df.plot.bar()
#seaborn
myplotsns =sns.barplot(y='0', x=df.index, data=df)
# you can get xticklabels without .axes cause the object are already a
# isntance of it
for item in myplot.get_xticklabels():
item.set_rotation(90)
레이블을 회전해야하는 경우 글꼴 크기도 변경해야 할 수도 있습니다 font_scale=1.0
.
ax.get_xticklabels ()에서 눈금에 대해 x 축 레이블을 90 도로 회전 시키려면 : tick.set_rotation (45)
참고 URL : https://stackoverflow.com/questions/10998621/rotate-axis-text-in-python-matplotlib
'Programing' 카테고리의 다른 글
Java로 "unixtime"얻기 (0) | 2020.04.06 |
---|---|
Java에서 이진 형식으로 정수 인쇄 (0) | 2020.04.06 |
pg_dump에 비밀번호를 전달하는 방법은 무엇입니까? (0) | 2020.04.06 |
web.config에서 연결 문자열 읽기 (0) | 2020.04.06 |
PG :: ConnectionBad-서버에 연결할 수 없습니다 : 연결이 거부되었습니다 (0) | 2020.04.06 |