matplotlib 在圆中对齐标签

g2ieeal7  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(114)

我在pyplot中的文本对齐有困难。我试图在圆形树状图中注解以圆形方式排列的点,因此重要的是标签指向远离点并保持正确的Angular 。这是我到目前为止所拥有的相关部分。x1c 0d1x的数据
水平标签的工作就像一个魅力,但垂直的显然是关闭的。看起来horizontalalignment/verticalalignment被应用在原始坐标和边界框上。是否有任何选项/方法来正确对齐标签,而不执行一些疯狂的特技,如计算出文本的高度和相应地移动标签。我想知道用极坐标覆盖第二个图/轴并将文本放在上面是否有意义,但我不确定这是否会带我去任何地方。或者我错过了一些很明显的东西……
下面是一个最小的工作示例:

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()

字符串
任何帮助是赞赏!

n8ghc7c1

n8ghc7c11#

可以偏移足够的文字,使其不与点重叠。然后,将文本居中对齐(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()

字符串


的数据

相关问题