主题:【第六届原创】用Wolfram Mathematica画出同步辐射in situ衍射谱

浏览0 回复13 电梯直达
iangie
结帖率:
100%
关注:0 |粉丝:0
新手级: 新兵
维权声明:本文为iangie原创作品,本作者与仪器信息网是该作品合法使用者,该作品暂不对外授权转载。其他任何网站、组织、单位或个人等将该作品在本站以外的任何媒体任何形式出现均属侵权违法行为,我们将追究法律责任。
先介绍一下in situ原位衍射数据的叠加图. 它是一张的横坐标为2theta 角度, 纵坐标可以是数据标号, 温度, 压强, 反应时间等表征原位实验进度的参数. 例子如下图( Scarlett, N.V.Y., Madsen, I.C. and Whittington, B.I., 2008. J. Appl. Crystallogr., 41(1): 572–583.)

所以, 这样的"accumulated XRD patterns" 可以观察随实验进程的物相变化.



但是, 什么样的软件才能画出这种叠加图来呢?. ....哪位版友要是知道有什么共享软件请告之下...  好多都很贵的....

我手头只有mathematica 9.0, 我决定自己画........

我的in situ data比较简单, 只有38个谱, 每个谱大约20000个数据点(角度, 强度, error) .xye格式

下面分享下我的matehmatica画图程序:

ClearAll["`*"]

data = ReadList[#, {Number, Number, Number}] & /@ FileNames["C:\\insitu\\Path\\Spain_00*_ss.xye"];    (*读入37个xye格式的文件\文件名是Spain_0001_ss.xye 到 Spain_0038_ss.xye \每个大概有850kb\所以一共是20多Mb的数据, 注意路径用两个反斜杠隔开*)

For[i = 1, i < 39, i++, {theta2, intensity, error} = Transpose[data[]]];    (*把每个xye数据转置分成角度列 强度列和误差列 注意这37个数据的长度还不一样, 20000+-, 每个谱也没有对正, 每个谱的2 theta 角度采样点也不一样*)

For[i = 1, i < 39, i++, XY = Transpose[{Take[theta2, {2000, 20000}], Take[intensity, {2000, 20000}]}]];  (*舍去误差列数据 把数据转置回来 只取中间18001个数据*)

For[i = 1, i < 39, i++, {f = Interpolation[XY], XYgrid = Table[f[t], {t, 15, 80, 0.01}]}]  array = Table[XYgrid, {i, 1, 38}];  (*把数据spline插值后, 只取均匀的6500个点来画图, 不然Core2 i5 CPU也很慢*)

ListDensityPlot[Log[array], ColorFunction -> "Rainbow", AspectRatio -> 1/GoldenRatio, FrameLabel -> {"2\[Theta]Degree", "Dataset"}, PlotRange -> All,  LabelStyle -> Directive[20, FontFamily -> "Times"], FrameTicks -> {{{0, 15}, {500, 20}, {1000, 25}, {1500, 30}, {2000, 35}, {2500, 40}, {3000, 45}, {3500, 50}, {4000, 55}, {4500, 60}, {5000, 65}, {5500, 70}, {6000, 75}, {6500, 80}}, {5, 10, 15,  20, 25, 30, 35}}]


最后用ListDensityPlot来画图, 画出下面这张图耗时45秒:



只要数据对正了 (每个谱中的强度点所对应的2theta 一致) 其实也可以用ArrayPlot或者Image命令来画, 耗时只有15s的样子 但是效果没有DensityPlot这么好, 因为前两个命令没有data点之间的过渡效果~

我的MMA水平很菜, 欢迎哪位MMA高手指正简化下命令....
为您推荐
您可能想找: 气相色谱仪(GC) 询底价
专属顾问快速对接
立即提交
可能感兴趣
iangie
结帖率:
100%
关注:0 |粉丝:0
新手级: 新兵
你们这些看帖不回帖的.......我画圈圈诅咒你们.......
自己挽尊吧.........
wulin321
结帖率:
100%
关注:0 |粉丝:0
新手级: 新兵
iangie
结帖率:
100%
关注:0 |粉丝:0
新手级: 新兵
原文由 wulin321(wulin321) 发表:

这个真不懂  支持一下


其实就是给大量数据画3维地形图....很简单的....
wulin321
结帖率:
100%
关注:0 |粉丝:0
新手级: 新兵
原文由 iangie(iangie) 发表:
原文由 wulin321(wulin321) 发表:

这个真不懂  支持一下


其实就是给大量数据画3维地形图....很简单的....


在你技术范围内你认为简单,我们门外汉就很难了
iangie
结帖率:
100%
关注:0 |粉丝:0
新手级: 新兵
原文由 wulin321(wulin321) 发表:
原文由 iangie(iangie) 发表:
原文由 wulin321(wulin321) 发表:

这个真不懂  支持一下


其实就是给大量数据画3维地形图....很简单的....


在你技术范围内你认为简单,我们门外汉就很难了


mathematica,matlab,maple称为数学建模三套车。完全是本科水平,所有工科理科的本科毕业生应该都会这个“技术”。
wulin321
结帖率:
100%
关注:0 |粉丝:0
新手级: 新兵
原文由 iangie(iangie) 发表:
原文由 wulin321(wulin321) 发表:
原文由 iangie(iangie) 发表:
原文由 wulin321(wulin321) 发表:

这个真不懂  支持一下


其实就是给大量数据画3维地形图....很简单的....


在你技术范围内你认为简单,我们门外汉就很难了


mathematica,matlab,maple称为数学建模三套车。完全是本科水平,所有工科理科的本科毕业生应该都会这个“技术”。


俺是高职的,怪不得不认得,心理平衡了
xujun16
结帖率:
100%
关注:0 |粉丝:0
新手级: 新兵
iangie
结帖率:
100%
关注:0 |粉丝:0
新手级: 新兵
原文由 xujun16(xujun16) 发表:

进来学习了


xujun提点意见啊~代码肯定还有改进的空间。。。

MMA的精华在map /@,  俺还不会。。。。
黄石道人
结帖率:
100%
关注:0 |粉丝:0
新手级: 新兵
做过原位的同步辐射XRD,当时是把一个时间一个时间的二维图积分成一维,然后再批量导入到origin里。
楼主这个方法,还是第一次听说。
iangie
结帖率:
100%
关注:0 |粉丝:0
新手级: 新兵
原文由 黄石道人(v2722760) 发表:
做过原位的同步辐射XRD,当时是把一个时间一个时间的二维图积分成一维,然后再批量导入到origin里。
楼主这个方法,还是第一次听说。



批量导入Origin画图慢不慢?
猜你喜欢最新推荐热门推荐更多推荐
品牌合作伙伴