使用Python(matplotlib)创建自定义标记

3
我想知道如何生成黑色线条的标记,如图所示。(来源:NCEP和NOAA)这是标准天气地图中风暴或飓风的标记。

enter image description here

我可以生成标记符号的图像文件,但是我不知道如何告诉matplotlib使用该图像作为标记。

1个回答

6
标志看起来像一个 6。如果是这样的话,您可以按照以下方式使用 6 作为标记符号:
import matplotlib.pyplot as plt

x = [1,2,3,4]
y = [2,3,1,4]

plt.scatter(x,y, s= 100,marker="$6$")

plt.show()

在这里输入图片描述

如果这不是一个选项,你可以使用路径来定义自己的标记。为此,需要知道路径的坐标。下面我发明了一些值,也许它们已经满足了这里的需求。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.path as mpath

def get_hurricane():
    u = np.array([  [2.444,7.553],
                    [0.513,7.046],
                    [-1.243,5.433],
                    [-2.353,2.975],
                    [-2.578,0.092],
                    [-2.075,-1.795],
                    [-0.336,-2.870],
                    [2.609,-2.016]  ])
    u[:,0] -= 0.098
    codes = [1] + [2]*(len(u)-2) + [2] 
    u = np.append(u, -u[::-1], axis=0)
    codes += codes

    return mpath.Path(3*u, codes, closed=False)

hurricane = get_hurricane()
plt.scatter([1,1,2],[1.4,2.3,2.8], s=350, marker=hurricane, 
            edgecolors="crimson", facecolors='none', linewidth=2)
plt.scatter([0,1,2],[1,3,1], s=150, marker=hurricane, 
            edgecolors="k", facecolors='none')
plt.scatter([0,1.8,3],[0,2,4], s=150, marker="o", 
            edgecolors="k", facecolors='none')

plt.show()

enter image description here


标记用于表示飓风,它是一个特定的符号。我怀疑所建议的符号是否有效。 - Kushal
我们在哪里可以找到有关该符号的信息? 如果您想要帮助创建标记,必须以某种方式定义标记需要如何看。 - ImportanceOfBeingErnest
该解决方案展示了如何使用坐标对来到达自定义标记。它使用一些值来获取符号的一半,然后将其镜像以获得完整的符号。您可以填充符号(例如facecolor=red),但那样看起来不好。相反,您可以使用第二个散点图提供填充部分。可以通过提供坐标或仅使用圆形作为标记来实现。 - ImportanceOfBeingErnest
1
我发明了一些点来定义一个半螺旋。然后将该半螺旋移动,使其镜像点为原点(在x方向上移动0.098)。在matplotlib中,路径由两部分组成:坐标和代码。代码1表示“移动到”,代码2表示“连线到”。坐标中的因子3是为了使符号与圆形标记的大小相同。当然,如果你愿意,你可以直接将值0.098和因子3硬编码到坐标中。 - ImportanceOfBeingErnest
非常感谢您的解释!现在我理解得更好了! - Kushal
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接