Matplotlib:如何根据列值为散点图圆赋予颜色

时间:2019-01-09 04:24:51

标签: python matplotlib scatter-plot

我的数据包含3列:

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

我想绘制pop1pop2的散点图,圆的颜色基于zone的颜色。

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

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

我该如何给不同的颜色(例如红色,绿色和蓝色)分别对应区域值1、2和3?

2 个答案:

答案 0 :(得分:1)

您可以使用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

答案 1 :(得分:1)

您无需使用其他库,也可以进行以下操作:

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中的值创建颜色字典。另外,您将花费一些额外的时间来理解列表。