我有一个包含一百万个点的数据集,例如:
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着色点?
答案 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']
与x
和y
变量的长度相同。
正如评论中指出的那样,(显然)不需要创建新的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()