python matplotlib将xy数据对绘制为图像

时间:2015-02-19 18:23:06

标签: python matplotlib

我有一个大的数据集,格式为x,y,value1,value2 .... value#是位置x,y的变量值。从csv文件读入数据,其中x y值是半随机顺序。 x y值不在直线网格上。我拥有数百万个数据点。

我想要做的是创建值#变量的图像。

是否有内置机制来执行此操作?如果没有内置机制,我如何使用正确的顺序构建一个两个vaule数组。

1 个答案:

答案 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()