【发布时间】:2017-01-21 08:34:12
【问题描述】:
我脑子里一片空白。
我想做我认为很简单的事情。
假设我有一些测试数据:
import pandas as pd
import numpy as np
k=10
df = pd.DataFrame(np.array([range(k),
[x + 1 for x in range(k)],
[x + 4 for x in range(k)],
[x + 9 for x in range(k)]]).T,columns=list('abcd'))
其中行对应时间,列对应角度,如下所示:
a b c d
0 0 1 4 9
1 1 2 5 10
2 2 3 6 11
3 3 4 7 12
4 4 5 8 13
5 5 6 9 14
6 6 7 10 15
7 7 8 11 16
8 8 9 12 17
9 9 10 13 18
然后出于某些原因,我将其转换为有序字典:
def highDimDF2Array(df):
from collections import OrderedDict # Need to preserve order
vels = [1.42,1.11,0.81,0.50]
# Get dataframe shapes
cols = df.columns
trajectories = OrderedDict()
for i,j in enumerate(cols):
x = df[j].values
x = x[~np.isnan(x)]
maxTimeSteps = len(x)
tmpTraj = np.empty((maxTimeSteps,3))
# This should be fast
tmpTraj[:,0] = range(maxTimeSteps)
# Remove construction nans
tmpTraj[:,1] = x
tmpTraj[:,2].fill(vels[i])
trajectories[j] = tmpTraj
return trajectories
然后我把它全部画出来
import matplotlib.pyplot as plt
m = highDimDF2Array(df)
M = np.vstack(m.values())
plt.scatter(M[:,0],M[:,1],15,M[:,2])
plt.title('Angle $[^\circ]$ vs. Time $[s]$')
plt.colorbar()
plt.show()
现在我要做的就是将所有这些放入具有属性的 2D numpy 数组中:
- 时间映射到 x 轴(或 y 无关紧要)
- 角度映射到 y 轴
- 矩阵中的条目对应于散点图中彩色点的值
- 所有其他条目都被视为
NaNs(即那些未由散点图中的点定义的条目)
在 3D 中,颜色将对应于高度。
我正在考虑使用这样的东西:3d Numpy array to 2d,但不太确定如何使用。
【问题讨论】:
标签: python arrays numpy matplotlib