【Python】 Matplotlibで出力した文字が重なるのを解消する方法

重なる

こんにちは!

皆さんは、Matplotlibで出力した文字が重なって読めない、読みにくいと思ったことはありませんか?

例えば、以下の1枚目のグラフのように上のグラフのx軸のラベルとしたのグラフのタイトルが重なって読めなくなったり、2枚目のグラフのようにx軸の文字が重なって読めなくなったりということが挙げられます。

このような経験したことがある方は多いのではないでしょうか?

そこで今回は、Matplotlibで出力した文字が重なるのを解消する方法を紹介していきます。


1. 上のグラフのx軸のラベルと下のグラフのタイトルの重なりを解消する

上のグラフのx軸のラベルとしたのグラフのタイトルの重なりを解消するには、「tight_layout()」を使用します。

tight_layout()をグラフを表示させる前に記述することによって簡単に重なりを解消することができます。

以下のプログラムは、tight_layout()を用いて重なりを解消させるプログラムです。

import matplotlib.pyplot as plt

x1, y1 = range(0, 3), [32, 12, 47]
x2, y2 = range(0, 3), [21, 4, 29]
x3, y3 = range(0, 3), [2, 31, 42]
x4, y4 = range(0, 3), [14, 18, 3]

label = ["A", "B", "C"]
fig = plt.figure()

ax1 = fig.add_subplot(2, 2, 1)
ax1.bar(x1, y1, tick_label=label)
ax1.set_title("title1")

ax2 = fig.add_subplot(2, 2, 2)
ax2.bar(x2, y2, tick_label=label)
ax2.set_title("title2")

ax3 = fig.add_subplot(2, 2, 3)
ax3.bar(x3, y3, tick_label=label)
ax3.set_title("title3")

ax4 = fig.add_subplot(2, 2, 4)
ax4.bar(x4, y4, tick_label=label)
ax4.set_title("title4")

plt.tight_layout()
plt.show()

実行結果

show()でグラフを表示させる前にtight_layout()を記述することで簡単に重なりを解消することができましたね。


2. x軸のラベルの重なりを解消する

x軸のラベルの重なりを解消する実用的な方法は、主に以下の2つです。

  1. x軸のラベルの文字を縦にする
  2. x軸とy軸を入れ替える

それでは2つの方法について、1つずつ見ていきましょう。

2.1 x軸のラベルの文字を縦にする

x軸ラベルの文字を縦にするには、「xticks()」を使用します。

xticks(rotation=90)と記述することで、文字を縦にすることができます。

以下のプログラムは、x軸のラベルの文字を縦にしてグラフを描くプログラムです。

import matplotlib.pyplot as plt
label = ["aaaaaaaaaaaaaaaaaaaa", "bbbbbbbbbbbbbbbbbbbb", "cccccccccccccccccccc", "dddddddddddddddddddd", "eeeeeeeeeeeeeeeeeeee"]
y = [9, 6, 7, 8, 4,]
plt.bar(label, y)
plt.xticks(rotation=90)

plt.tight_layout()
plt.show()

実行結果

このプログラムでも、tight_layout()を使用していますが、その理由はx軸のラベルの文字が長い場合には画像に収まりきらないため、画像内に文字を全て入れるためです。

2.2 x軸とy軸を入れ替える

x軸とy軸を入れ替えるのは、使用するグラフによって方法が変わります。

棒グラフの場合は、「bar()」を「barh()」に変えて横棒グラフにするだけです。

その他のグラフでも、x軸とy軸に指定するリストなどを入れ替えるだけなので簡単に入れ替えることができます。

以下のプログラムは、横棒グラフに変更して文字の重なりを解消するプログラムです。

import matplotlib.pyplot as plt
label = ["aaaaaaaaaaaaaaaaaaaa", "bbbbbbbbbbbbbbbbbbbb", "cccccccccccccccccccc", "dddddddddddddddddddd", "eeeeeeeeeeeeeeeeeeee"]
x = [9, 6, 7, 8, 4,]
plt.barh(label, x)

plt.tight_layout()
plt.show()

実行結果

このプログラムでも、先ほどの理由と同様にtight_layout()を使用しています。


3. まとめ

いかがでしたか?
文字が重なるのを解消する方法について理解できたでしょうか?

文字が重なるのを解消する方法として、tight_layout()を使用する、x軸のラベルの文字を縦にする、x軸とy軸を入れ替えるという方法を紹介しました。

目的に応じて使い分けて、重なりを解消し、見やすいグラフを作れるようになりましょう!


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です