【问题标题】:Scatter plot move labels散点图移动标签
【发布时间】:2018-03-14 20:13:28
【问题描述】:

我创建了一些大型港口的地图。使用 'x' 和 'y' 纬度和经度以及 'text' 端口名称。

x,y = map(lonA, latA)
map.scatter(x, y, s=Size, c=color, marker='o', label = 'Ports',alpha=0.65, zorder=2)
for i in range (0,n):
  plt.annotate(text[i],xy=(x[i],y[i]),ha='right')

我绘制的点(更大的端口代表更大的点)与标签重叠。我如何将它们绘制得更远一点以增加可读性?

【问题讨论】:

    标签: python label scatter annotate


    【解决方案1】:

    可以使用xytext参数调整文字位置:

    plt.annotate(text[i],xy=(x[i],y[i]),xytext=(x[i]+10,y[i]+10), ha='right')
    

    在这里,我在您的 xy 位置上加了 10。 有关更多信息,您可以在此处查看建议: https://matplotlib.org/users/annotations_intro.html

    【讨论】:

    • 我试过了,但是不行。 :( 即使我做 +100 (xytext=(x[i]+100,y[i]+100)) 也没有区别...
    • 您的xy 轴是否有可能覆盖很大的范围,例如数百万,而100 的移动会很小?
    • 不,通常不。我的坐标轴是纬度和经度,所以 +10 就是 +10 度。通常,它们应该移动很远,但它们根本不动。
    • 我不知道你的脚本中的 map 是什么对象,但你正在使用 scatter 方法。是否也可以使用annotate 方法? map.annotate 而不是 plt.annotate?
    • 这只是名字。如果我做 map.annotate,它不会打印任何标签
    【解决方案2】:

    @KiralySandor 你是对的,但你需要将文本坐标更改为数据。

    for i in range (0,n):
      plt.annotate(text[i],xy=(x[i],y[i]),textcoords='data',xytext=(x[i]-9000,y[i]),ha='right')
    

    现在名称稍微靠左一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-21
      • 1970-01-01
      • 2013-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-24
      • 1970-01-01
      相关资源
      最近更新 更多