【问题标题】:Changing marker style in scatter plot according to third variable根据第三个变量更改散点图中的标记样式
【发布时间】:2013-09-19 00:07:02
【问题描述】:

我正在处理一个多列字典。我想绘制两列,然后根据第三列和第四列更改标记的颜色和样式。

我很难改变 pylab 散点图中的标记样式。我的方法适用于颜色,但不幸的是不适用于标记样式。

x=[1,2,3,4,5,6]
y=[1,3,4,5,6,7]
m=['k','l','l','k','j','l']

for i in xrange(len(m)):
    m[i]=m[i].replace('j','o')
    m[i]=m[i].replace('k','x')
    m[i]=m[i].replace('l','+')

plt.scatter(x,y,marker=m)
plt.show()

【问题讨论】:

    标签: python dictionary matplotlib marker scatter


    【解决方案1】:

    问题在于marker 只能是单个值,而不是标记列表,就像color 参数一样。

    您可以按标记值进行分组,以便拥有具有相同标记的 x 和 y 列表并绘制它们:

    xs = [[1, 2, 3], [4, 5, 6]]
    ys = [[1, 2, 3], [4, 5, 6]]
    m = ['o', 'x']
    for i in range(len(xs)):
        plt.scatter(xs[i], ys[i], marker=m[i])
    plt.show()
    

    或者您可以绘制每个点(我不推荐):

    x=[1,2,3,4,5,6]
    y=[1,3,4,5,6,7]
    m=['k','l','l','k','j','l']
    
    mapping = {'j' : 'o', 'k': 'x', 'l': '+'}
    
    for i in range(len(x)):
        plt.scatter(x[i], y[i], marker=mapping[m[i]])
    plt.show()
    

    【讨论】:

    • 啊哈,这就是我刚刚发现自己正在努力解决的问题 - 文档说标记可以是类似数组的,这似乎有点误导。感谢您清楚地说明这一点。
    【解决方案2】:

    添加到 Viktor Kerkez 的答案并使用一点 Numpy,您可以执行以下操作:

    x = np.array([1,2,3,4,5,6])
    y = np.array([1,3,4,5,6,7])
    m = np.array(['o','+','+','o','x','+'])
    
    unique_markers = set(m)  # or yo can use: np.unique(m)
    
    for um in unique_markers:
        mask = m == um 
        # mask is now an array of booleans that can be used for indexing  
        plt.scatter(x[mask], y[mask], marker=um)
    

    【讨论】:

      【解决方案3】:

      对我来说最简单的解决方案是使用pandasseaborn

      import pandas as pd   # '0.25.3'
      import seaborn as sns # '0.9.0'
      
      data = pd.DataFrame(
          dict(x=[1,2,3,4,5,6],
          y=[1,3,4,5,6,7],
          m=['k','l','l','k','j','l'],)
      )
      
      sns.scatterplot(data=data, x='x', y='y', style='m')
      

      seaborn 自动为您选择标记样式。

      【讨论】:

        猜你喜欢
        • 2018-12-08
        • 1970-01-01
        • 2021-01-26
        • 1970-01-01
        • 1970-01-01
        • 2021-10-10
        • 2013-03-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多