2014-01-29 154 views
0

R代码是否可用于创建我们星系或宇宙的3D图?过去六个月里我搜查了几次,但都没有找到。星系或宇宙的3D图

这新闻文章包括像他们可能已经有R创造了一些非常漂亮的3D绘图:

http://www.dailymail.co.uk/sciencetech/article-2341750/The-beautiful-3D-map-space-plots-nearest-galaxies--reminds-tiny-Earth-is.html

一个简短的视频可以在上面的链接来查看,但我没有看到链接到R代码。该视频由里昂大学和夏威夷大学的人创建。这里是一个链接到相关的同一个项目一个较长的视频:

http://irfu.cea.fr/cosmography

我想这一定是整洁,从R中3D绘图中的探索空间,但我无法找到任何相关的代码。

对象的位置很可能在Redshift目录中找到,也许可以下载,但我不知道如果我尝试创建自己的3D地图,是否需要以各种方式调整这些位置数据。下面是数据的一个可能的来源,如果我是尝试创建自己的地图:

https://www.cfa.harvard.edu/~dfabricant/huchra/zcat/

我所读过的东西,大意是请求相关的包不会使一个合适的职位。很抱歉,如果这篇文章不合适。

+1

问题不是代码,而是数据:找到数据,然后你可以写一些代码。 – plannapus

+0

'rgl'提供了3D渲染。如果你得到了x,y,z坐标或星星之间的距离(=>'cmdscale()'),应该可以没有太多的努力(?)。 – lukeA

+0

用'rgl'在3D立方体内绘制点是比较容易的。矢量场的2d投影?可能与ggplot:http://stackoverflow.com/questions/14936504/vector-field-visualisation-r。除此之外,没有任何想法。 – tonytonov

回答

2

问题不在于建模,而在于数据。这是一个可用的数据库。 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) 

enter image description here

可以明显的亮度,大小,类型等添加更多的数据(如果可用),然后使用这些参数来设置大小,颜色等

+0

这是一个很好的答案。尽管我从未使用SQL。你能推荐一个免费的SQL源,还是我只需要安装一个R包来进行查询? –

+1

她的文本文件(可能更简单), Troy

+1

这里是一个具有较大星系数据的文件(尽管并非全部名称等) Troy