如何从数组中选择数据到图形

问题描述 投票:0回答:1

我有一个包含九列和超过500万行的数组,用于获取有关恒星的一些实验数据。

列的索引号是:

0质量1年龄2时间步3金属度4有效温度5光度6对数表面重力7半径8最外层对流层的基础。

我想在Python Luminosity中针对温度绘制一些质量范围内的恒星。

而不是迭代数组,我想使用隐式数组索引,我被告知更快?

我可以通过拉出Luminosity的整个色谱柱来绘制整个质量范围,以及温度的整个列,这样就可以了,但现在我想为不同的质量范围做单独的绘图,这就是我被卡住的地方。

如果有另一个解决方案适用于大文件大小,那将是很好的。无论如何解决问题,我只想学习如何从数据阵列中选择关键位数据。

谢谢

import numpy as np
import matplotlib
from matplotlib import pyplot as plt
path="C://///.filename.txt"
mesa_data=np.loadtxt(path)
print(mesa_data.shape)
print(mesa_data)
luminosity = mesa_data[:,5]
teff = mesa_data[:,4]
plt.plot(teff,luminosity,'go')
plt.xlim(10000, 0)  # decreasing Temperature
plt.yscale('log')
plt.xlabel('Temperature (K)')
plt.ylabel('Luminosity (Solar Units)')
plt.title('HR Diagram for MESA model')

plt.show()
python arrays
1个回答
0
投票

我找到了各种各样的解决方案。

我创建了一个布尔数组,然后使用它来索引我从数据中提取的切片数组。

它并没有真正做我想做的事情。我可以使用下面的代码创建一个布尔数组,但如果我按列设置为等于一个范围,我会收到错误

m_half = mesa_data[:,0] < 0.501 and > 0.499

我收到错误消息。

“具有多个元素的数组的真值是不明确的。使用a.any()或a.all()”

我将研究建议的解决方案,但是有更好的方法。我觉得我过度复杂的事情可能很简单?

我想查询我的数据表以获得所有类型的组合,但目前我只知道如何为低于某个参数的值做这个,或者当然更大。

谢谢

import numpy as np
import matplotlib
from matplotlib import pyplot as plt
path="data.txt"
mesa_data=np.loadtxt(path)
print(mesa_data.shape)
print(mesa_data)
luminosity = mesa_data[:,5]   #Use implicit array indexing to slice the Luminosity values
teff = mesa_data[:,4]         #Use implicit array indexing to slice the Temperature values
m_half = mesa_data[:,0] < 0.501   #Create a Boolean Array for those Masses in a certain range
l_half = luminosity[m_half]      #Use Boolean to create a new data range of luminosities for those stars in mass range
teff_half = teff[m_half]           #Use Boolean to create a new data range of temperatures for those stars in mass range

plt.subplot (2,1,1)
plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=1.0)
plt.plot(teff,luminosity,'go')
plt.xlim(10000, 0)  # decreasing Temperature
plt.yscale('log')
plt.xlabel('Temperature (K)')
plt.ylabel('Luminosity (Solar Units)')
plt.title('HR Diagram for MESA model over all Masses')
plt.subplot (2,1,2)
plt.plot(teff_half,l_half,'go')
plt.xlim(4500, 3000)  # decreasing Temperature
plt.yscale('log')
plt.xlabel('Temperature (K)')
plt.ylabel('Luminosity (Solar Units)')
plt.title('HR Diagram for MESA model for 0.5 Solar Mass units')

plt.savefig ("HR_All.png", bbox_inches='tight')
plt.show()
© www.soinside.com 2019 - 2024. All rights reserved.