我有一个大的数据集,格式为x,y,value1,value2 .... value#是位置x,y的变量值。从csv文件读入数据,其中x y值是半随机顺序。 x y值不在直线网格上。我拥有数百万个数据点。
我想要做的是创建值#变量的图像。
是否有内置机制来执行此操作?如果没有内置机制,我如何使用正确的顺序构建一个两个vaule数组。
答案 0 :(得分:0)
你只有x和y的单个实例吗?你的所有价值都是等长吗?如果是这些情况,那对你来说会容易得多。据我所知,没有简单的方法告诉imshow这样做,但希望这里的其他人比我更了解这个。您可能需要重新构建数据。如果你想使用大型数据集,我会尽可能多地学习Python的Pandas包。与R一样,它允许创建数据帧。我认为imshow需要将您的数据整形为x x,并将您的值作为您的单元格值。以下是使用Pandas的示例。可能有更优雅的方式来解决这个问题,但你应该明白这一点。
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame(columns=['x','y','data_value'])
df['x'] = [1,2,1,2]
df['y'] = [1,1,2,2]
df['data_value'] = [1,2,3,4]
print(df) # so you see what's going on
df2 = pd.DataFrame(columns=df['x'].unique(), index = df['y'].unique())
print(df2) # so you see what's going on
# making x columns and y rows
for i in df2.index:
for j in df2.columns:
df2.ix[i,j] = (df[(df['y']==i) & (df['x']==j)]['data_value']).values[0]
print(df2)
哦,然后去绘制这个(imshow不喜欢这里的彗星)
plt.imshow(np.array(df2.astype(float)))
plt.show()