Matplotlib:如何根据列值为散点图圆圈着色

Matplotlib: How to give color to scatterplot circles based on column values

我的数据包含 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?

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

在不使用额外库的情况下,您也可以使用类似的东西:

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']])

给出输出:

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