やりたいこと
総当たり的プロットをする際に、見やすいタイトルをつけたい。
下図の上下左右の青と橙のタイトル(dataX)のようなものをつけたいです。
やったこと
長くてすみません。
python
1import numpy as np 2import matplotlib.pyplot as plt 3 4label = ['data A','data B','data C','data D'] 5N = len(label) # データ種の数 6L = 20 # データ長 7 8data = [] 9for k in range(N): 10 data.append(np.random.normal(0, 1, (L,2))) 11 12pos = (0.2, 0.45, 0.45, 0.2) # 上下左右の位置 13 14fig = plt.figure() 15for i in range(N): 16 for j in range(N): 17 if i!=j: 18 ax = plt.subplot(N, N, i*N+j+1) 19 d1x = data[i][:,0] 20 d1y = data[i][:,1] 21 ax.scatter(d1x, d1y, s=5) 22 d2x = data[j][:,0] 23 d2y = data[j][:,1] 24 ax.scatter(d2x, d2y, s=5) 25 dx = np.hstack([d1x, d2x]) 26 dy = np.hstack([d1y, d2y]) 27 if i == 0: # 上 28 x = (max(dx)+min(dx))/2 29 y = max(dy)+(max(dy)-min(dy))*pos[0] 30 ax.text(x, y, '{}'.format(label[j]), ha='center', va='bottom', 31 weight='bold', color='w', backgroundcolor='C1') 32 elif i == N-1: # 下 33 x = (max(dx)+min(dy))/2 34 y = min(dy)-(max(dy)-min(dy))*pos[1] 35 ax.text(x, y, '{}'.format(label[j]), ha='center', va='top', 36 weight='bold', color='w', backgroundcolor='C1') 37 if j == 0: # 左 38 x = min(dx)-(max(dx)-min(dx))*pos[2] 39 y = (max(dy)+min(dy))/2 40 ax.text(x, y, '{}'.format(label[i]), ha='right', va='center', 41 weight='bold', color='w', backgroundcolor='C0', rotation='vertical') 42 elif j == N-1: # 右 43 x = max(dx)+(max(dx)-min(dx))*pos[3] 44 y = (max(dy)+min(dy))/2 45 ax.text(x, y, '{}'.format(label[i]), ha='left', va='center', 46 weight='bold', color='w', backgroundcolor='C0', rotation='vertical') 47plt.tight_layout() 48fig.subplots_adjust(top=0.9, bottom=0.1, left=0.1, right=0.9)
困っていること
- グラフ表示後にマウスで拡大したり動かしたりすると、titleも連動して動いてしまう。
- グラフ要素が増えたりすると、再度細かい調整が必要になってしまう。
- そもそもなんかスマートじゃない。たぶん将来的に不具合が出る。
教えてほしいこと
- このようなラベル付けができるモジュールがあれば、教えてください。
- もっとよい書き方があれば、教えてください。
以上、よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/26 06:01