如何从数组中选择数据以绘制图形

时间:2019-02-13 00:29:00

标签: python arrays

我有一个由9列和500万行组成的数组,用于一些有关恒星的实验数据。

列的索引号为:

0质量 1岁 2时间步长 3金属性 4有效温度 5光度 6原木表面重力 7半径 8最外层对流层。

我只想针对某些质量范围内的恒星绘制Python光度与温度的关系图。

我不想使用遍历数组的方法,而是想使用隐式数组索引,因为它被告知会更快?

我可以绘制整个质量范围,方法是拉动整个列的亮度,绘制整个列的温度,这很好,但是现在我想针对不同的质量范围分别绘制图,这就是我要坚持的地方

如果还有另一种适用于大文件的解决方案,那就太好了。不管如何解决问题,我只想学习如何从数据数组中选择关键数据位。

谢谢

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

1 个答案:

答案 0 :(得分:0)

我找到了一种解决方案。

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

它并没有真正做到我想要的。我可以使用下面的代码创建一个布尔数组,但是如果按列设置等于be中的范围,则会出现错误

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