在python

时间:2015-12-02 17:13:52

标签: python arrays matplotlib plot slice

A有一个包含多个值的结构化数组。我想在同一个图中绘制数组中包含的各种切片。

例如,我想要一个结构化数组的片段,如data[:500]用于y的一个,另一个片段用于另一个y的数据data[500:1000]

import matplotlib.pyplot as plt
import numpy as np
import os

path = '/users/username/Desktop/untitled folder/python files/file/'

os.chdir( path )

# Data  
data = np.load('file',mmap_mode='r')
# data.size: 167197
# data.shape: (167197,)
# data.dtype: dtype([('x', '<f4'), ('y', '<f4'), ('z', '<f4'),
# ('velx', '<f4'), ('vely', '<f4'), ('velz', '<f4'), ('m200', '<f4')])

x = np.arange(0,50000,500)
y = data[x]

plt.ticklabel_format(style='sci', axis='x', scilimits=(0,0))
plt.xlabel(r'$>10M_{\odot}$' )
plt.plot(x,y)
plt.show()

上面的代码只显示了一个数组图。

如果我试图绘制切片,我遇到的问题是我的y不会有相同的大小和形状,让我更加失望。

阵列的大小和形状是167197和(167197,)。因此,光线有很长的行列和一列。

我试过了:

x = np.arange(0,50000,500)
y = data[x,:500]
y1 = data[x,500:1000]

但它会给IndexError: too many indices for array

我该怎么做?

1 个答案:

答案 0 :(得分:1)

嗯,要解决此问题,您必须将x维度更改为(500,)而不是(100,)。让我们说:

x = np.arange(0,50000,100) 

然后我们按如下方式进行切片:

y = data[:500]
y2 = data[1000:1500]

之后我们在x和y2上的其他500个值上有500个不同的值。现在我们绘制:

plt.plot(x, y)
plt.plot(x, y2)
plt.show()

结果如下:

plot_result

我做了一个完整的例子here。我希望这能解决你的问题。

干杯!