【问题标题】:Python scatter-plot: Conditions for marker styles?Python散点图:标记样式的条件?
【发布时间】:2013-05-22 09:26:36
【问题描述】:

我有一个数据集,我希望使用 matplotlib 绘制为散点图,以及一个大小相同的向量,用于对数据点进行分类和标记(离散地,例如从 0 到 3)。我想为不同的标签使用不同的标记(例如,'x' 代表 0,'o' 代表 1 等等)。我怎样才能优雅地解决这个问题?我很确定我只是错过了一些东西,但并没有真正找到它,而且我的幼稚方法到目前为止都失败了......

【问题讨论】:

    标签: python matplotlib scatter-plot


    【解决方案1】:

    像这样遍历所有标记怎么样:

    import numpy as np
    import matplotlib.pyplot as plt
    
    x = np.random.rand(100)
    y = np.random.rand(100)
    category = np.random.random_integers(0, 3, 100)
    
    markers = ['s', 'o', 'h', '+']
    for k, m in enumerate(markers):
        i = (category == k)
        plt.scatter(x[i], y[i], marker=m)
    
    plt.show()
    

    【讨论】:

      【解决方案2】:

      Matplotlib 不接受每个绘图的不同标记。

      但是,对于大型数据集,一个不那么冗长且更健壮的解决方案是使用 pandasseaborn 库:

      import numpy as np
      import pandas as pd
      import matplotlib.pyplot as plt
      import seaborn as sns
      
      x = [48.959, 49.758, 49.887, 50.593, 50.683 ]
      y = [122.310, 121.29, 120.525, 120.252, 119.509]
      z = [136.993, 133.128, 143.710, 129.088, 139.860]
      kmean = np.array([0, 1, 0, 2, 2])
      
      df = pd.DataFrame({'x':x,'y':y,'z':z, 'km_z':kmean})
      sns.scatterplot(data = df, x='x', y='y', hue='km_z', style='km_z')
      

      产生以下输出

      此外,您可以使用pandas.cut 函数来绘制箱(这是我经常需要生成的图表,我可以使用第三个连续值作为参数)。使用方法是:

      import numpy as np
      import pandas as pd
      import matplotlib.pyplot as plt
      import seaborn as sns
      x = [48.959, 49.758, 49.887, 50.593, 50.683 ]
      y = [122.310, 121.29, 120.525, 120.252, 119.509]
      z = [136.993, 133.128, 143.710, 129.088, 139.860]
      
      df = pd.DataFrame({'x':x,'y':y,'z':z})
      df['bins'] = pd.cut(df.z, bins=3)
      sns.scatterplot(data = df, x='x', y='y', hue='bins', style='bins')
      

      它会生成以下示例:


      我使用后一种方法生成如下图:

      【讨论】:

        猜你喜欢
        • 2019-09-19
        • 2012-02-23
        • 2021-10-10
        • 2013-03-05
        • 1970-01-01
        • 2020-02-20
        • 2022-01-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多