【问题标题】:Custom markers using Python (matplotlib)使用 Python (matplotlib) 自定义标记
【发布时间】:2017-11-27 08:14:10
【问题描述】:

我想知道如何为这张图片中显示的黑色线条生成标记。 (来源:NCEP 和 NOAA) 它是标准天气图中风暴或飓风的标志。

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

【问题讨论】:

    标签: python python-3.x matplotlib matplotlib-basemap cartopy


    【解决方案1】:

    标记看起来像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()
    

    【讨论】:

    • 标记用于表示飓风。它是一个特定的符号。我怀疑建议的符号是否有效。
    • 我们在哪里可以找到有关该符号的信息?如果您在创建标记时需要帮助,您必须以某种方式定义该标记的外观。
    • 很抱歉。 this image 中的第 2 和第 3 个符号是我想要得到的。
    • 感谢您的解决方案。如果你能解释你是如何得到这个符号的,我会很高兴的。另外,你所做的是为了一场热带风暴。对于热带气旋,需要填充热带风暴符号内的圆形区域。这也可能吗?
    • 我发明了一些点来定义半螺旋。然后移动该半螺旋,使其镜像点为原点(沿 x 方向移动 0.098)。 matplotlib 中的路径由坐标和代码两部分组成。代码 1 表示“移至”,代码 2 表示“行至”。坐标中的因子 3 是为了使符号与圆形标记的大小相同。当然,如果需要,您可以直接将值 0.098 和因子 3 硬编码到坐标中。
    猜你喜欢
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    相关资源
    最近更新 更多