我正在使用 MATLAB 绘制 XRD 分析,其中米勒指数用于识别晶面方向。这些索引包含 3 或 4 个数字,负值在该数字上方显示有条形。
在 LaTeX 中,它可以由\([1\bar{1}1]\)
或\([1\overline{1}1]\)
命令编写。
为了标记 XRD 标准的光谱线,我使用了这个命令:请注意,不考虑负值。
std_text_hkl(j)=text(theta{i}(j)-r,0.1,['[' hkl{j} ']'],... % position and label
of j-th line of i-th standard; hkl{j} holds Miller index in string format
'parent',ax_std(i),... % association with axes of i-th standard
'rotation',90,...
'fontsize',12,...
'fontname',Font); % Font holds global font setup
如何在不使用'Interpreter','latex'
属性的情况下自动在负数上创建条形图,因为我也希望能够更改'FontName'
属性。至少我想避免标签和刻度中的不同字体。
编辑:
感谢 Magla 的评论,我得到了这个想法:
- 将索引存储为 3 列矩阵
- 将标签分成 5 个文本字段
- 如果米勒指数是负画线(文本框的顶行)
实际代码:
rr=get(ax_std(i),'xlim'); % read x-axis limits of i-th standard
r=(rr(2)-rr(1))/150; % x-offset of Miller indexes
for j=1:size(dhkl,1)
theta{i}(j)=asin(lambda/(2*dhkl(j,1)))*360/pi(); %calculating of lines
%positions (Bragg's law)
line('parent',ax_std(i),...
'xdata',[theta{i}(j) theta{i}(j)],...
'ydata',[0 dhkl(j,2)],... % j-th line's reflection intensity
'color',[colors(1+mod(i-1,size(colors,1)),1:3)],...
'linewidth',3)
% Miller indexes
if theta{i}(j)>rr(1)&&theta{i}(j)<rr(2) % test if line is inside axes
std_text_lbrace(j)=text(theta{i}(j)-r,0.1,'[',...
'parent',ax_std(i),...
'verticalalignment','bottom',...
'horizontalalignment','left',...
'rotation',90,...
'fontsize',12,...
'fontname',Font);
pos=get(std_text_lbrace(j),'position');
ext=get(std_text_lbrace(j),'extent');
std_text_h(j)=text(pos(1),pos(2)+ext(4)/1.5,int2str(abs(hkl(j,1))),...
'parent',ax_std(i),...
'verticalalignment','bottom',...
'horizontalalignment','left',...
'rotation',90,...
'fontsize',12,...
'fontname',Font); % write 1st Miller index
pos=get(std_text_h(j),'position');
ext=get(std_text_h(j),'extent')
if hkl(j,1)<0 % if negative, draw line over it
wdth=get(ax0,'xlim');
wdth=wdth(2)-wdth(1);
set(std_text_h(j),'color','b','edgecolor','g')
line('parent',ax_std(i),...
'xdata',[pos(1)-wdth/280*ext(3),pos(1)-wdth/280*ext(3)],...
'ydata',[pos(2),pos(2)+ext(4)/wdth*100],...
'color','r')
end
end
我无法适应线的长度。对于单个数字,它太长,对于两个数字它适合,而对于更多(理论上)它太短了。我究竟做错了什么?MATLAB 如何测量'extent'
旋转文本的属性?