Pythonのmatplotlibでラベル付き散布図を作成するのようにMatplotlibでプロットした要素にテキストのラベルを付与することがあるが、こういうときに各要素が近いと、ラベルが重なってしまうことがある。
このように重なってしまっているテキストラベルを、PythonライブラリのadjustTextを使うと簡単に重ならないようにできる。以下にその手順をまとめておく。
Windows10(1903)のWSL(Ubuntu 18.04)とJupyter Notebookを使用。
adjustTextはpipでインストールできる。
まずはadjustTextを使わずに散布図を作成する。
ラベルがけっこう重なってしまっている。
adjustTextを使って散布図を作成する。
adjustTextを使うとプロットに少し時間がかかるようになるが、良い感じに重なりがなくなった。
このように重なってしまっているテキストラベルを、PythonライブラリのadjustTextを使うと簡単に重ならないようにできる。以下にその手順をまとめておく。
環境
Windows10(1903)のWSL(Ubuntu 18.04)とJupyter Notebookを使用。
adjustTextのインストール
adjustTextはpipでインストールできる。
adjustTextでラベルが重ならない散布図を作成する
まずはadjustTextを使わずに散布図を作成する。
%matplotlib inline from IPython.core.pylabtools import figsize import numpy as np import matplotlib.pyplot as plt fig, ax = plt.subplots(figsize=(8,8)) ax.spines['top'].set_visible(False) ax.spines['right'].set_visible(False) np.random.seed(seed=1) data_x = np.random.rand(100) data_y = np.random.rand(100) labels = ['Label{:.2f}_{:.2f}'.format(x, y) for x,y in zip(data_x, data_y)] for x, y, l in zip(data_x, data_y, labels): ax.plot(x, y, marker='o', linestyle='', ms=2, color='blue') plt_text = ax.annotate(l, (x, y), fontsize=8, color='black')
ラベルがけっこう重なってしまっている。
adjustTextを使って散布図を作成する。
%matplotlib inline from IPython.core.pylabtools import figsize import numpy as np import matplotlib.pyplot as plt from adjustText import adjust_text fig, ax = plt.subplots(figsize=(8,8)) ax.spines['top'].set_visible(False) ax.spines['right'].set_visible(False) np.random.seed(seed=1) data_x = np.random.rand(100) data_y = np.random.rand(100) labels = ['Label{:.2f}_{:.2f}'.format(x, y) for x,y in zip(data_x, data_y)] # adjustTextに渡すテキストラベルのリスト texts = [] for x, y, l in zip(data_x, data_y, labels): ax.plot(x, y, marker='o', linestyle='', ms=2, color='blue') plt_text = ax.annotate(l, (x, y), fontsize=8, color='black') texts.append(plt_text) # arrowpropsでラベルからプロットした点を指す線などの形状や色を指定 adjust_text(texts, arrowprops=dict(arrowstyle='-', color='gray', lw=0.5))
adjustTextを使うとプロットに少し時間がかかるようになるが、良い感じに重なりがなくなった。
0 件のコメント:
コメントを投稿