2017-05-11 8 views
0

pyplotでテキストを整列するのが難しいです。私は円形の樹形図の中に円形の様式で配置された点に注釈を付けることを試みているので、ラベルが点から遠ざかり、正しい角度を保つことが重要です。ここに私がこれまで持っていたものの関連部分があります。 dots in a circlematplotlibの円のラベルを整列させる

水平ラベルは魅力的に機能しますが、垂直ラベルは明らかにオフです。 horizontalalignment/verticalalignmentが元の座標と境界ボックスに適用されているようです。テキストの高さを計算し、それに応じてラベルを動かすなどのクレイジースタントを実行することなく、ラベルを正しく整列するオプション/方法はありますか?私は極座標で2番目のプロット/軸を重ね合わせてテキストを置くのが理にかなっているのだろうかと思っていましたが、どこにでもつながるかどうかはわかりません。それとも、私は本当に何かを明らかに行方不明です天気を...ここで

は、最小限の作業例です:

import matplotlib.pyplot as plt 

(fig, ax) = plt.subplots(figsize = (4,4)) 

def kex(N): 
    alpha = 360./N 
    coordX = [] 
    coordY = [] 
    alphas = [] 
    for i in range(0,N): 
     alpha_loop = alpha * i 
     coordX.append(math.cos(math.radians(alpha_loop))) 
     coordY.append(math.sin(math.radians(alpha * i))) 
     alphas.append(alpha_loop) 
    return [coordX, coordY, alphas] 

N = 10 
points = kex(N) 
ax.scatter(points[0], points[1]) 
for i in range(0,N): 
    x = points[0][i] 
    y = points[1][i] 
    a = points[2][i] 
    if x > 0: 
     ax.text(x + x * 0.1, y + y * 0.1, "AAA", rotation = a, 
        bbox=dict(facecolor = "none", edgecolor ="red")) 
    else: 
     ax.text(x + x * 0.1, y + y * 0.1, "AAA", rotation = a - 180, 
        bbox=dict(facecolor = "none", edgecolor ="red"), ha = "right") 

ax.axis("off") 

plt.show() 

すべてのヘルプは歓迎です!

+0

また、私はより良い問題を説明するためのオフセットを設定していないhttp://stackoverflow.com/questions/43894987/networkx-node-labels-relative-position – ImportanceOfBeingErnest

答えて

2

ポイントと重複しないようにテキストをオフセットすることができます。この考え方は、テキストを中央揃え(ha="center", va="center")し、グラフの中間点とそれが注釈を付ける点との間の拡張(仮想)線上に置かれるようにすることである。

import matplotlib.pyplot as plt 
import numpy as np 

(fig, ax) = plt.subplots(figsize = (4,4)) 

def kex(N): 
    alpha=2*np.pi/N 
    alphas = alpha*np.arange(N) 
    coordX = np.cos(alphas) 
    coordY = np.sin(alphas) 

    return np.c_[coordX, coordY, alphas] 

N = 10 
r = 1.2 
points = kex(N) 
ax.scatter(points[:,0], points[:,1]) 

for i in range(0,N): 
    a = points[i,2] 
    x,y = (r*np.cos(a), r*np.sin(a)) 
    if points[i,0] < 0: a = a - np.pi 
    ax.text(x,y, "AAA", rotation = np.rad2deg(a), ha="center", va="center", 
        bbox=dict(facecolor = "none", edgecolor ="red")) 

ax.axis("off") 

plt.show() 

enter image description here

+0

を参照してください。しかし、「ha」と「va」の両方を「center」に設定することは、そのトリックを行います。どうもありがとう! –

+0

違いが何であるかを理解するまでには時間がかかりました。問題に直面した他の人たちを忘れないように、私はそれを強調したがっていました。 –

関連する問題