Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Matplotlib:如何根据列值为散点图圆指定颜色_Python_Matplotlib_Scatter Plot - Fatal编程技术网

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

Python Matplotlib:如何根据列值为散点图圆指定颜色,python,matplotlib,scatter-plot,Python,Matplotlib,Scatter Plot,我的数据由3列组成: zone | pop1 | pop2 ---- ---- ---- 3 4500 3800 2 2800 3100 1 1350 1600 2 2100 1900 3 3450 3600 我想画一个pop1和pop2的散点图,圆圈的颜色基于区域的值 到目前为止,我有以下代码: df = pd.read_csv(file_path) plt.scatter(df['pop1'],df['pop2'

我的数据由3列组成:

zone | pop1 | pop2
----   ----   ----
3      4500   3800
2      2800   3100
1      1350   1600
2      2100   1900
3      3450   3600
我想画一个
pop1
pop2
的散点图,圆圈的颜色基于
区域的值

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

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

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

您可以使用seaborn package,它使用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']])
它给出了输出:


这要求您为
区域中的值创建一个颜色字典。此外,您还将花费一些额外的时间制作列表

你能控制这里的颜色吗?也许这对于OP来说并不重要,但问题中指定了与特定值对应的颜色。对于大型数据集,这种方法将花费大量时间。您是正确的。我已经更新了答案以避免循环。仍然需要对列表进行理解,但我希望这比反复调用
plt.scatter要快得多。是的,现在要快得多。我已选择它作为可接受的解决方案。