How to plot XRD data as 3D plot?

5 次查看(过去 30 天)
I have a series of XRD diffractograms from a single sample, at different depths. I want to plot the spectra as a 3D line plot, as seen as below:
(From https://link.springer.com/article/10.1016%2FS1672-6529%2806%2960003-6)
I use the following code to view my XRD data in Matlab:
data = importdata('example_data.dat') ; % load the data from text file
semilogy(data(:,1),data(:,2)) ; % plot the data
How do I go from here?
TIA

采纳的回答

Star Strider
Star Strider 2021-9-7
编辑:Star Strider 2021-9-7
When I click on the link, I get a ‘DOI Not Found’ error. (EDIT — The new link is to an article behind a paywall, so I do not have access to it.)
That problem aside, if the data are in a matrix, it is likely possible just use surf to plot the matrix. The axis tick labels might need to be added manually in separate statements, however this is not difficult.
If you want to upload / attach the .XRD file, it would be necessary to put it into a .zip file first. Any information you have on its contents and format would be helpful, since I dioubt many here are familiar with that format (I am not, since .dat files can contain anything).
The complete matrix, with the values imported and plotted —
Uz = unzip('Plot3D[1].zip')
Uz = 1×103 cell array
{'Plot3D/569965_0-0.dat'} {'Plot3D/569965_0-1.dat'} {'Plot3D/569965_0-10.dat'} {'Plot3D/569965_0-100.dat'} {'Plot3D/569965_0-101.dat'} {'Plot3D/569965_0-102.dat'} {'Plot3D/569965_0-11.dat'} {'Plot3D/569965_0-12.dat'} {'Plot3D/569965_0-13.dat'} {'Plot3D/569965_0-14.dat'} {'Plot3D/569965_0-15.dat'} {'Plot3D/569965_0-16.dat'} {'Plot3D/569965_0-17.dat'} {'Plot3D/569965_0-18.dat'} {'Plot3D/569965_0-19.dat'} {'Plot3D/569965_0-2.dat'} {'Plot3D/569965_0-20.dat'} {'Plot3D/569965_0-21.dat'} {'Plot3D/569965_0-22.dat'} {'Plot3D/569965_0-23.dat'} {'Plot3D/569965_0-24.dat'} {'Plot3D/569965_0-25.dat'} {'Plot3D/569965_0-26.dat'} {'Plot3D/569965_0-27.dat'} {'Plot3D/569965_0-28.dat'} {'Plot3D/569965_0-29.dat'} {'Plot3D/569965_0-3.dat'} {'Plot3D/569965_0-30.dat'} {'Plot3D/569965_0-31.dat'} {'Plot3D/569965_0-32.dat'} {'Plot3D/569965_0-33.dat'} {'Plot3D/569965_0-34.dat'} {'Plot3D/569965_0-35.dat'} {'Plot3D/569965_0-36.dat'} {'Plot3D/569965_0-37.dat'} {'Plot3D/569965_0-38.dat'} {'Plot3D/569965_0-39.dat'} {'Plot3D/569965_0-4.dat'} {'Plot3D/569965_0-40.dat'} {'Plot3D/569965_0-41.dat'} {'Plot3D/569965_0-42.dat'} {'Plot3D/569965_0-43.dat'} {'Plot3D/569965_0-44.dat'} {'Plot3D/569965_0-45.dat'} {'Plot3D/569965_0-46.dat'} {'Plot3D/569965_0-47.dat'} {'Plot3D/569965_0-48.dat'} {'Plot3D/569965_0-49.dat'} {'Plot3D/569965_0-5.dat'} {'Plot3D/569965_0-50.dat'} {'Plot3D/569965_0-51.dat'} {'Plot3D/569965_0-52.dat'} {'Plot3D/569965_0-53.dat'} {'Plot3D/569965_0-54.dat'} {'Plot3D/569965_0-55.dat'} {'Plot3D/569965_0-56.dat'} {'Plot3D/569965_0-57.dat'} {'Plot3D/569965_0-58.dat'} {'Plot3D/569965_0-59.dat'} {'Plot3D/569965_0-6.dat'} {'Plot3D/569965_0-60.dat'} {'Plot3D/569965_0-61.dat'} {'Plot3D/569965_0-62.dat'} {'Plot3D/569965_0-63.dat'} {'Plot3D/569965_0-64.dat'} {'Plot3D/569965_0-65.dat'} {'Plot3D/569965_0-66.dat'} {'Plot3D/569965_0-67.dat'} {'Plot3D/569965_0-68.dat'} {'Plot3D/569965_0-69.dat'} {'Plot3D/569965_0-7.dat'} {'Plot3D/569965_0-70.dat'} {'Plot3D/569965_0-71.dat'} {'Plot3D/569965_0-72.dat'} {'Plot3D/569965_0-73.dat'} {'Plot3D/569965_0-74.dat'} {'Plot3D/569965_0-75.dat'} {'Plot3D/569965_0-76.dat'} {'Plot3D/569965_0-77.dat'} {'Plot3D/569965_0-78.dat'} {'Plot3D/569965_0-79.dat'} {'Plot3D/569965_0-8.dat'} {'Plot3D/569965_0-80.dat'} {'Plot3D/569965_0-81.dat'} {'Plot3D/569965_0-82.dat'} {'Plot3D/569965_0-83.dat'} {'Plot3D/569965_0-84.dat'} {'Plot3D/569965_0-85.dat'} {'Plot3D/569965_0-86.dat'} {'Plot3D/569965_0-87.dat'} {'Plot3D/569965_0-88.dat'} {'Plot3D/569965_0-89.dat'} {'Plot3D/569965_0-9.dat'} {'Plot3D/569965_0-90.dat'} {'Plot3D/569965_0-91.dat'} {'Plot3D/569965_0-92.dat'} {'Plot3D/569965_0-93.dat'} {'Plot3D/569965_0-94.dat'} {'Plot3D/569965_0-95.dat'} {'Plot3D/569965_0-96.dat'} {'Plot3D/569965_0-97.dat'} {'Plot3D/569965_0-98.dat'} {'Plot3D/569965_0-99.dat'}
x = readmatrix(Uz{1}, 'Range','A:A')
x = 1432×1
2.4604 2.4967 2.5330 2.5693 2.6056 2.6419 2.6782 2.7145 2.7508 2.7871
ymtx = NaN(numel(x),numel(Uz));
for k = 1:numel(Uz)
ymtx(:,k) = readmatrix(Uz{k}, 'Range','B:B');
end
ymtx
ymtx = 1432×103
1.0e+03 * 1.2665 1.2390 1.2957 1.3295 1.2866 1.2756 1.3268 1.2701 1.2829 1.2226 1.2783 1.2601 1.2372 1.3058 1.2701 1.2336 1.2683 1.3149 1.2665 1.2528 1.2866 1.2747 1.2875 1.2546 1.2372 1.2482 1.3030 1.2144 1.2601 1.2327 1.4501 1.4590 1.5009 1.4444 1.4293 1.4477 1.4837 1.4664 1.4704 1.4638 1.4245 1.4523 1.4647 1.4399 1.4495 1.4558 1.4585 1.4437 1.4214 1.4375 1.4426 1.4605 1.3969 1.4208 1.4349 1.4192 1.4393 1.3960 1.4216 1.4406 1.5363 1.5556 1.5773 1.5481 1.5332 1.5465 1.5618 1.5608 1.5676 1.5171 1.5129 1.5126 1.5346 1.5261 1.5019 1.5353 1.5379 1.5365 1.5386 1.5538 1.5134 1.5041 1.4984 1.5068 1.5035 1.5194 1.5506 1.5214 1.5161 1.5338 1.5478 1.5654 1.5978 1.5399 1.5437 1.5322 1.5942 1.6009 1.5492 1.5622 1.5534 1.5291 1.5382 1.5195 1.5467 1.5613 1.5274 1.5388 1.5266 1.5480 1.5368 1.5309 1.5295 1.5255 1.5020 1.5091 1.5594 1.5322 1.5028 1.5248 1.4311 1.4366 1.4876 1.4550 1.4216 1.4367 1.4829 1.4560 1.4595 1.4462 1.4493 1.4380 1.4247 1.4277 1.4316 1.4370 1.4438 1.4556 1.4439 1.4534 1.4486 1.4815 1.4257 1.4244 1.4333 1.4281 1.4484 1.4249 1.4361 1.4369 1.2854 1.2920 1.3296 1.2637 1.2814 1.2909 1.3275 1.3605 1.3120 1.2900 1.2933 1.2971 1.2904 1.2928 1.2848 1.2823 1.3208 1.2892 1.2776 1.2796 1.2881 1.2830 1.2718 1.2602 1.2691 1.2963 1.2687 1.2730 1.2636 1.2779 1.0883 1.0985 1.1391 1.1115 1.1109 1.0882 1.1312 1.1230 1.1519 1.1412 1.1091 1.1299 1.1354 1.1099 1.1019 1.0860 1.1173 1.1026 1.1176 1.1082 1.1124 1.1322 1.0924 1.1117 1.1133 1.1100 1.0867 1.1197 1.1160 1.1154 0.9009 0.8975 0.9614 0.9353 0.9231 0.9332 0.9357 0.9385 0.9338 0.9446 0.9514 0.9479 0.9511 0.9505 0.9511 0.8918 0.9264 0.9319 0.9417 0.9383 0.9411 0.9382 0.9312 0.9162 0.9311 0.9320 0.8924 0.9365 0.9382 0.9440 0.7658 0.7547 0.8386 0.8016 0.7964 0.8062 0.8311 0.8224 0.8386 0.8390 0.8350 0.8314 0.8377 0.8427 0.8188 0.7682 0.8285 0.8411 0.8219 0.8207 0.8176 0.8246 0.8032 0.8206 0.8204 0.8089 0.7647 0.8138 0.8006 0.7879 0.6761 0.6596 0.7479 0.7089 0.7084 0.7049 0.7126 0.7284 0.7231 0.7455 0.7445 0.7436 0.7518 0.7280 0.7464 0.6505 0.7565 0.7515 0.7362 0.7359 0.7348 0.7378 0.7407 0.7288 0.7355 0.7176 0.6595 0.7250 0.7209 0.7094
figure
surf(ymtx, 'EdgeColor','none')
grid on
xticklabels = string(x);
yt = yticks;
NrYticks = 9; % Choose Any Integer Divisor of '54'
set(gca, 'YTick',linspace(min(yt), max(yt), NrYticks), 'YTickLabel',linspace(0, -54, NrYticks))
xlabel('x')
ylabel('y')
zlabel('z')
view(60,30)
% shading('interp')
Experiment to get different results.
.
  10 个评论
Sam
Sam 2022-1-11
Oh wow, thank you so much for such a quick response. As I'm not too familar with the language used at the start, I was struggling on this for quite a while.
Star Strider
Star Strider 2022-1-11
As always, my pleasure!
If you have further questions and have problems figuring out how the code works, don’t struggle longer than necessary. Just ask, and I’ll do my best to provide an appropriate solution (or explain the reason a solution isn’t possible).

请先登录,再进行评论。

更多回答(2 个)

KSSV
KSSV 2021-9-7
Read about surf. This is your function.

Sam
Sam 2021-9-7
Thank you for pointing this out, I have edited this!
My data is in three columns, the third column is redundant (errors), but the first and second column are my x and y, respectively.
The z values are in the file title, i.e. 569965_0-2.dat = 569965 (scan name); 0 (line number); 2 (spot/depth number, there are 102 spots for depth, this will be the z I assume)
I have attached one line here in my zip.

类别

Help CenterFile Exchange 中查找有关 MATLAB 的更多信息

产品


版本

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by