问题不在于建模,而在于数据。这是一个可用的数据库。 http://www.stellar-database.com/isdb.mdb - 但可能你需要专门挖掘你想要的东西。
这里有一个简单的SQL查询拉出一些明星的数据:
SELECT Positions.OwnerID, Positions.RA_hr, Positions.RA_min, Positions.RA_sec, Positions.Dec_deg, Positions.Dec_arcmin, Positions.Dec_arcsec, Positions.Distance, Spectra.SpectralClass, Spectra.LuminosityClass, qryProps.Name
FROM (Positions LEFT JOIN Spectra ON Positions.OwnerID = Spectra.OwnerID) LEFT JOIN qryProps ON Positions.OwnerID = qryProps.OwnerID
WHERE (((Positions.Distance)>=0));
然后将其保存为CSV和其导入:
stars<-read.csv("qNamedStars.txt",header=T)
head(stars)
编写一个函数来翻译COORDS到X,Y,Z
celCoords<-function(Rh,Rm,Rs,Da,Dm,Ds,Distance){
R.angle<-((Rh/24)+(Rm/(24*60))+(Rm/(24*60*60)))*2*pi
D.angle<-(Da/90)+(Dm/(90*60))+(Ds/(90*60*60))*0.5*pi
Z<-cos(D.angle)*Distance
hyp.XY<-sin(D.angle)*Distance
X<-sin(R.angle)*hyp.XY
Y<-cos(R.angle)*hyp.XY
return(c(X,Y,Z))
}
starcoords<-cbind(stars,
matrix(celCoords(stars$RA_hr,
stars$RA_min,
stars$RA_sec,
stars$Dec_deg,
stars$Dec_arcmin,
stars$Dec_arcsec,
stars$Distance
),,ncol=3,byrow=T)
)
colnames(starcoords)<-c(colnames(stars),"X","Y","Z")
滤波器data.frame
sf<-starcoords[abs(starcoords$Z)<2000 & abs(starcoords$X)<1000,] # apply a filter
然后绘制使用rgl
require(rgl)
plot3d(sf$X,sf$Y,sf$Z,col=rainbow(nrow(sf)),size=10)

可以明显的亮度,大小,类型等添加更多的数据(如果可用),然后使用这些参数来设置大小,颜色等
问题不是代码,而是数据:找到数据,然后你可以写一些代码。 – plannapus
'rgl'提供了3D渲染。如果你得到了x,y,z坐标或星星之间的距离(=>'cmdscale()'),应该可以没有太多的努力(?)。 – lukeA
用'rgl'在3D立方体内绘制点是比较容易的。矢量场的2d投影?可能与ggplot:http://stackoverflow.com/questions/14936504/vector-field-visualisation-r。除此之外,没有任何想法。 – tonytonov