【发布时间】:2015-04-27 17:40:05
【问题描述】:
我正在尝试制作一个 3D 散点图以对 CSV 文件中的数据(用于分配)进行分类。
我有三个属性,我想根据前三个属性值查看它们属于哪个类(类 1 或类 2)。
到目前为止,我已经设法制作了一个简单的散点图(标签等稍后添加),我想看看我是否可以根据类对我的图进行颜色编码。比如说我希望 1 类地块为红色,2 类地块为绿色。
我已经设法编写了一些代码,但在
上不断收到“TypeError:列表索引必须是整数,而不是列表”ax.scatter(x,y,z, zdir='z', c=colormap[categories])
我有点理解错误,但真的想不出修复它的正确方法。我尝试定义一个函数来对绘图进行颜色编码,但它也没有成功。
另外,由于一些非常奇怪的原因,我在数组中的值是以科学计数法打印的。这不是问题,但我的眼睛看起来很痛。如果我只是希望将它打印为 0.00 而不是 0.0000000e+SomeNumberHere,我不确定该为 loadtxt 的 dtype 参数添加什么。
有人可以解释一下,或许可以提供一些帮助来纠正吗?谢谢你。 这是我的代码:
import numpy as np
import matplotlib.pyplot as pyplot
import csv
myDataset2 = np.loadtxt(open('C:/DM1/DM201501.Assign1.Dataset02.csv', 'rb'),delimiter=',')
print myDataset2
a1=[]
a2=[]
a3=[]
for i in range(100):
a1.append(myDataset2[i][0])
a2.append(myDataset2[i][1])
a3.append(myDataset2[i][2])
from mpl_toolkits.mplot3d import Axes3D
colormap = [' ', 'r', 'g']
myClasses = []
for j in range(100):
if myDataset2[j][3]==1:
myClasses.append(1)
elif myDataset2[j][3]==2:
myClasses.append(2)
x=a1
y=a2
z=a3
fig = pyplot.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x,y,z, zdir='z', c=colormap[myClasses])
pyplot.show()
【问题讨论】:
-
如果将
colormap设为一个numpy 数组会怎样?例如colormap = np.array([' ', 'r', 'g'])? -
尴尬的是我不知道numpy.exists。唉,这是一个初学者的自我贬低之旅:)非常感谢!代码现在看起来很可爱 :) 我能够立即分辨出哪一个分别属于 1 类和 2 类。感谢您忍受我的文字/代码呕吐:D
标签: python matplotlib scatter-plot scatter3d