如何在matplotlib pyplot中指定散点图点颜色?

时间:2019-04-26 13:23:34

标签: python matplotlib

我有一个包含一百万个点的数据集,例如:

1.0,9.5,-0.3
2.3,4.8,0.7
8.1,3.6,0.0
3.9,1.4,-0.1
4.7,5.3,0.0

和类似PyPlot的代码

import pandas
import matplotlib.pyplot as plt

headers =  ['A','B','C']
df = pandas.read_csv('my_data.csv',names=headers)
df['x'] = df['A']
df['y'] = df['B']
# df['color'] = df['C']
plt.xlim(min(df['x'])/2, max(df['x'])*2)
plt.ylim(min(df['y'])/2, max(df['y'])*2)
plt.xlabel("A")
plt.ylabel("B")
plt.plot(df['x'], df['y'], 'o', ms = 0.2) 
plt.show()

我可以根据第一列和第二列绘制点,但是所有点都具有相同的颜色。如何根据第三列中的值告诉PyPlot着色点?

2 个答案:

答案 0 :(得分:1)

如果您要更改

plt.plot(df['x'], df['y'], 'o', ms = 0.2) 

plt.scatter(df['x'], df['y'], 'o',c = df['color'], ms = 0.2)

应该工作,假设df['color']xy变量的长度相同。

正如评论中指出的那样,(显然)不需要创建新的df列。

您可以使用此

import pandas
import matplotlib.pyplot as plt

headers =  ['A','B','C']
df = pandas.read_csv('my_data.csv',names=headers)

plt.xlim(min(df['A'])/2, max(df['A'])*2)
plt.ylim(min(df['B'])/2, max(df['B'])*2)
plt.xlabel("A")
plt.ylabel("B")
plt.scatter(df['A'], df['B'], 'o', c = df['C'], ms = 0.2) 
plt.show()

编辑:

如果您确实要确保每个点都有唯一的颜色,则需要确保c输入也只包含唯一的值。

c = [i for i in range(0,len(df['C'])]
plt.plot(df['A'], df['B'], 'o', c = c, ms = 0.2) 

答案 1 :(得分:1)

您需要使用plt.scatter()而不是plt.plot()。也不需要重命名DataFrame列,第一个参数是x值,第二个参数是y值。 c = z将使颜色由z值决定。 cmap将确定颜色是什么。 Here are the options plt.colorbar()将为您绘制为z绘制的颜色提供色标参考。

import pandas as pd
import matplotlib.pyplot as plt
import random


x = [random.randint(0,100) for x in range(1000)]
y = [random.randint(0,100) for y in range(1000)]
z = [random.randint(0,100) for z in range(1000)]

df = pd.DataFrame({'A': x, 'B':y, 'C':z})

plt.scatter(df['A'], df['B'], c = df['C'], cmap = 'rainbow')
plt.colorbar()    
plt.show()