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



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

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 根据第三列中的值为点着色?

你需要使用 plt.scatter(( 而不是 plt.plot((。也无需重命名数据帧列,第一个参数是 x 值,第二个参数是 y 值。c = z 将使颜色由 z 值确定。CMAP将确定颜色是什么。以下是选项 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()

在您的情况下更改

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) 

最新更新