431

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')
4

13 に答える 13

201

簡単な方法

here で説明されているように、matplotlib.pyplot figureクラスには、日付を適切に自動的にローテーションする既存のメソッドがあります。

データをプロットした後に呼び出すことができます(つまりax.plot(dates,ydata)

fig.autofmt_xdate()

ラベルをさらにフォーマットする必要がある場合は、上記のリンクを確認してください。

非日時オブジェクト

languitarのコメントによると、非日時に対して提案した方法はxticks、ズームなどの際に正しく更新されませんdatetime。x 軸データとして使用されるオブジェクトでない場合は、 Tommyの回答に従う必要があります。

for tick in ax.get_xticklabels():
    tick.set_rotation(45)
于 2014-04-11T10:04:49.417 に答える
67

pyplot.setp を試してください。次のようなことができると思います。

x = range(len(time))
plt.xticks(x,  time)
locs, labels = plt.xticks()
plt.setp(labels, rotation=90)
plt.plot(x, delay)
于 2012-06-12T14:34:35.537 に答える
52

私は似たような例を思いつきました。繰り返しますが、回転キーワードは..まあ、それが鍵です。

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 ) ;
于 2012-06-12T14:48:56.823 に答える
43

軸オブジェクトに回転を適用する場合、最も簡単な方法は を使用することtick_paramsです。例えば。

ax.tick_params(axis='x', labelrotation=90)

Matplotlib のドキュメント リファレンスはこちらです。

これは、によって返される軸の配列がある場合に便利です。その場合、目盛りラベルも設定する必要があるため、plt.subplots使用するよりも便利です。また、目盛りを反復するものよりも便利です (明らかな理由により)。set_xticks

于 2019-01-24T18:23:26.520 に答える
36

使用する場合plt:

plt.xticks(rotation=90)

pandas または seaborn を使用してプロットする場合ax、プロットの軸として次のように仮定します。

ax.set_xticklabels(ax.get_xticklabels(), rotation=90)

上記を行う別の方法:

for tick in ax.get_xticklabels():
    tick.set_rotation(45)
于 2018-03-20T03:09:05.353 に答える
32

私の答えは cjohnson318 の答えに触発されていますが、ハードコードされたラベルのリストを提供したくありませんでした。既存のラベルを回転させたい:

for tick in ax.get_xticklabels():
    tick.set_rotation(45)
于 2015-09-09T11:45:41.137 に答える
12

最も簡単な解決策は、次を使用することです。

plt.xticks(rotation=XX)

だけでなく、

# Tweak spacing to prevent clipping of tick-labels
plt.subplots_adjust(bottom=X.XX)

たとえば、日付については、rotation=45 と bottom=0.20 を使用しましたが、データのテストを行うことができます

于 2020-05-08T09:03:24.770 に答える
8
import pylab as pl
pl.xticks(rotation = 90)
于 2016-11-23T17:15:37.110 に答える
3

それはあなたが何をプロットしているかによって異なります。

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)

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

于 2018-05-23T23:00:21.900 に答える