代码之家  ›  专栏  ›  技术社区  ›  SaadH

matplotlib:如何根据列值为散点图圆形指定颜色

  •  1
  • SaadH  · 技术社区  · 6 年前

    我有三列数据:

    zone | pop1 | pop2
    ----   ----   ----
    3      4500   3800
    2      2800   3100
    1      1350   1600
    2      2100   1900
    3      3450   3600
    

    我想画一张散点图 pop1 pop2 ,圆的颜色基于 zone .

    到目前为止,我有以下代码:

    df = pd.read_csv(file_path)
    plt.scatter(df['pop1'],df['pop2'], s = 1)
    

    我怎样才能给出不同的颜色,比如红色、绿色和蓝色,分别对应于区域值1、2和3?

    2 回复  |  直到 6 年前
        1
  •  1
  •   krm    6 年前

    如果不使用其他库,您还可以执行以下操作:

    colors = {1:'red', 2:'green', 3:'blue'}
    
    for i in range(len(df)):
        plt.scatter(df['pop1'].iloc[i], df['pop2'].iloc[i],
                    c=colors[df['zone'].iloc[i]])
    

    编辑:您不需要使用循环,您可以使用如下内容:

    colors = {1:'red', 2:'green', 3:'blue'}
    
    plt.scatter(df['pop1'], df['pop2'], 
                c=[colors[i] for i in df['zone']])
    

    其输出:

    enter image description here

    这要求您为中的值创建颜色字典 zones 不过。另外,您还需要花一些额外的时间来理解列表。

        2
  •  1
  •   Ankish Bansal    6 年前

    您可以使用Seaborn包,它使用matplotlib包装。它有各种各样的特点和美丽的土地。下面是您的问题的简单示例。

    import matplotlib.pyplot as plt
    %matplotlib inline 
    import seaborn as sns
    import pandas as pd
    
    data = pd.DataFrame({'col1':[4500,2800,1350,2100,3450],
                 'col2':[3800,3100 ,1650,1900,3600],
                 'col3':[3,2,1,2,3]})
    
    sns.lmplot(data=data, x='col1', y='col2', hue='col3', 
                       fit_reg=False, legend=True)
    #fit_reg is use to fit a line for regression, we need only dots.
    

    enter image description here