Python Matplotlib:如何根据列值为散点图圆指定颜色
我的数据由3列组成: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'
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要快得多。是的,现在要快得多。我已选择它作为可接受的解决方案。