【问题标题】:Edit marker shape in python在python中编辑标记形状
【发布时间】:2020-12-22 16:03:23
【问题描述】:

我在 CDF 图的 x 轴上使用菱形指针来显示一些数据的分布。由于数据数量多,这些点靠得很近,无法区分。我想知道是否有办法使散点图的菱形标记更

【问题讨论】:

    标签: python matplotlib scatter-plot


    【解决方案1】:

    虽然我喜欢@Stef 创建新标记符号的答案,但您也可以根据现有符号与其他点的距离调整现有符号的大小:

    import matplotlib.pyplot as plt
    import numpy as np
    from sklearn.neighbors import NearestNeighbors
    
    # create random data
    x = np.random.rand(10)
    y = np.ones(len(x))
    
    # open figure + axes
    fig,axs = plt.subplots(1,2)
    # standard scatter-plot
    MarkerSize = 40
    axs[0].scatter(x,y,s=MarkerSize)
    
    # re-arrange data
    xy = []
    for x1,y1 in zip(x,y):
        xy.append([x1,y1])
    # find nearest neighbors to itself (skip the first column because it finds the exact same element, i.e. with zero distance)
    dst,idx = NearestNeighbors(n_neighbors=2).fit(xy).kneighbors(xy)
    dst = dst[:,1]
    
    # create a vector for the marker-size
    S = dst/dst.max()*MarkerSize
    # scatter plot with adjusted marker-size
    axs[1].scatter(x,y,s=S)
    

    我使用 scikit-learn 的 sklearn.neighbors.NearestNeighbors() 来计算点之间的最小距离,并将其作为比例因子传递给 matplotlib.pyplot.scatter() 的大小参数 s=Therescatter() 中标记大小参数的小教程。

    【讨论】:

      【解决方案2】:

      您可以根据路径定义自己的标记,请参阅Marker Path Example

      import matplotlib.pyplot as plt
      import matplotlib.path as mpath
      
      pointed_diamond = mpath.Path([[0,-.5],[-.1,0],[0,.5],[.1,0],[0,-.5]], [1,2,2,2,79])
      plt.plot([1,2,3], marker=pointed_diamond, markersize=10)
      

      【讨论】:

        猜你喜欢
        • 2018-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-11
        • 1970-01-01
        • 2019-04-07
        • 2010-12-28
        相关资源
        最近更新 更多