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
我该怎么做?
答案 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()
结果如下:
我做了一个完整的例子here。我希望这能解决你的问题。
干杯!