【发布时间】:2017-11-29 13:04:56
【问题描述】:
我正在尝试在轴上绘制文本并将此文本对齐到一个圆圈。
更准确地说,有一些具有不同坐标 (x,y) 的点位于该圆内并使用以下方法创建:
ax.scatter(x,y,s=100)
我想用圆圈连接并标记每个点 (Cnameb)。文本的坐标用 (xp,yp) 定义。
因此点和圆之间的箭头长度不同,但圆心到圆的整体距离如下图所示 --> (注意:蓝线是应该打印的线点和圆之间。红线仅用于说明。):
因为我已经定义了半径并且我知道点的坐标以及中心点的坐标,所以我应该能够执行以下步骤:
- 计算单点到中心的距离DxMP
- 计算单点与圆的距离
- 计算角度 alpha
- 计算点 xp 和 yp 应该是文本的坐标(圆上的坐标)
因此我使用了以下代码:
def legpoints(x,y):
DxMP = np.sqrt(((x - 521953) ** 2) + (y - 435179) ** 2)#521953, 435179 are the x and y coordinates of the center of the circle
DxCirc = np.sqrt((900000 - DxMP)**2)#The distance between the point x and the circle
alpha = np.arccos((np.sqrt((x - 521953)**2)) / (DxMP))
xp = x + (np.cos(alpha) * DxCirc)
yp = y + (np.sin(alpha) * DxCirc)
return xp,yp
xp=legpoints(x,y)[0]
yp=legpoints(x,y)[1]
压缩后的数据形状为 (Cnameb,x,y,xp,yp):
[( '柏林',735951.59991561132,617707.36153527966,1206703.3293253453,1019231.2121256208),( '柏林',735965.58122088562,617712.48195467936,1206714.0793803122,1019218.6083879157),( '不来梅',425896.14258295257,673875.68843362806,665833.6191604546,1270108.8219153266),( '多特蒙德' ,330448.62508515653,502638.58154814231,987816.52265995357,734203.8568234311),( '杜伊斯堡',281456.9370223835,495636.46544709487,913803.62749559013,654599.89177739131),( '杜塞尔多夫',283849.70917473407,471649.47447504522,935371.04632360162,571443.52693890885),( 'Essen的鲁尔',298590.41880710673,497973.49884993531,941640.19382135477 ,678755.74152428762),( '法兰克福',412037.5979210182,345052.92773266998,998077.35579369171,825581.23014117288),( '汉堡',505147.96843631176,726635.42284052074,540149.82358692121,1333686.6774791477),( '汉诺威',487540.73893698538,594957.33199132804,642620.87620513374,1315004.3411755674),(”科隆, 292146.52126941859, 439340.70884408138, 9621 92.49751825235,451474.98930779565),( '慕尼黑',623290.92919537693,125422.12264187855,801795.74103644479,671052.90026201855),( '斯图加特',445743.44744934322,196109.08652145317,642879.16415181267,814525.24510293454)] P>
通过以下代码,我想将文本添加到轴上并对齐为一个圆圈:
[ax.annotate(s=nme,xy=(x,y),xytext=(xpoint,ypoint),textcoords="data",arrowprops={"arrowstyle":"->"},color="black",alpha=0.8,fontsize=12) for nme,x,y,xpoint,ypoint in zip(Cnameb,x,y,xp,yp)]
但结果并不理想,因为文本没有对齐为圆形而是未定义......
谁能帮帮我...?
【问题讨论】:
标签: python matplotlib matplotlib-basemap