2013-08-03 26 views
6

Kristalografik düzlem yönlerini tanımlamak için Miller indekslerinin kullanıldığı XRD analizlerini çizmek için MATLAB kullanıyorum. Bu indeksler 3 veya 4 sayı içerir ve bu sayı üzerinde çubuk ile negatif değer gösterilir.MATLAB'de Miller indeksleri nasıl gösterilir?

LaTeX'te \([1\bar{1}1]\) veya \([1\overline{1}1]\) komutu ile yazılabilir.

XRD standartlarının spektral çizgilerinin etiketlenmesi için bu komutu kullanıyorum: Negatif değerlerin dikkate alınmadığını unutmayın. Ben 'FontName' mülkiyet içerisinde muhtelif değiştirmek mümkün olmak istiyorum çünkü 'Interpreter','latex' özelliğini kullanmadan negatif bir sayı üzerinde çubuğu oluşturmak nasıl otomatikleştirebilirim

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 

. Leat'de etiketler ve kenelerdeki farklı fontlardan kaçınmak istiyorum.

DÜZENLEME: Miller indeksi üzerinde olumsuz beraberlik çizgi ise 5 metin alanları

  • içine 3 sütun matrisi olarak

    • Mağaza endeksleri
    • ayrı etiket: Magla yorumuna
      sayesinde bu fikir geldi (metin çerçevesinin üst çizgi) kod

    Gerçek parça:

    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 
    

    Hat uzunluğuna sığamıyorum. Tek haneli için çok uzun, iki basamak için uyuyor ve daha fazla (teorik olarak) çok kısa. Neyi yanlış yapıyorum? MATLAB, döndürülen metnin 'extent' özelliğini nasıl ölçer?

  • +0

    Yalnızca alt yazılarla ikinci bir metin alanı kullanır ve onu hedef numarayla eşleşecek şekilde çevirir veya döndürürüm. Bu çözüm, eşit aralıklı yazı tipiyle iyi çalışır (kurye yeni, tek aralıklı). – marsei

    +0

    @Magla: İyi nokta, '' _ \ newline [111] ''bu numarayı yapmalı. Ancak, dediğiniz gibi, sadece "fixedwidth" font için (iki boşluk olmalıdır). – Crowley

    +0

    "Lateks işaretleme etiketlerini kullanma" gibi birçok yanıtı, örn. http://stackoverflow.com/a/9328945/2180721.Bu, herhangi bir yazı tipinin kullanılmasına izin vermez, ancak Magla tarafından önerilen çözüm yalnızca sizin özel isteğiniz için geçerlidir ve görüntülenecek karmaşık bir lateksiniz varsa, grafik nesneleri kullanmak olanaksız hale gelir. – Oleg

    cevap

    3

    Negatif basamakların üstünde üst üste gelen satırları gösteren bir kod parçası. Bu çözüm, farklı yazı tiplerini seçebilmemiz için 'interpreter','latex' kullanmaz. Kodun, her biri alt çizgi üzerinde (char(95) veya pozitif basamaklar için ' ') alt satırda ve ilişkili satırda görüntülenecek şekilde birveya char(10) olan tek bir metin kutusu kullandığını unutmayın. Alt çizgi ile sayı arasında belirli bir mesafe ayarlamak için iki farklı metin kutusu seçebilir. Bu kod parçası, tüm yazı tipleri için çalışmıyor (sistem yazı tiplerinin% 90'ının iyi çalıştığını söyleyebilirim).

    Aşağıdaki kod

    %Miller indices 
    miller_ind = [1 -1 -2 3 -3]; 
    
    %font definition 
    c = listfonts; 
    ind_perm = randperm(length(c)); 
    font_names = {'Arial','Times','Courier New',c{ind_perm}}; 
    font_size = 16; 
    
    figure('Color','w','Position',[10 10 600 1000]); 
    py = 0.05; 
    for ind_font = 1:12 
    
        %font name 
        text(0.03,py,font_names{ind_font},'FontName',font_names{ind_font},'FontSize',font_size); 
    
        %plot miller textbox 
        px = 0.6; 
        for ii = 1:length(miller_ind) 
         if miller_ind(ii)<0 
          text(px,py,[char(95) char(10) num2str(-1*miller_ind(ii)) ],... 
           'FontName',font_names{ind_font},'FontSize',font_size,'interpreter','none'); 
         else 
          text(px,py,[' ' char(10) num2str(miller_ind(ii)) ],... 
           'FontName',font_names{ind_font},'FontSize',font_size,'interpreter','none'); 
         end 
         px = px + 0.03; 
        end 
        py = py + 0.09; 
    end 
    

    bu bir sonuç açıklaması nedeniyle @Oleg Komarov için

    enter image description here

    DÜZENLEME Tanklarının verir. Resim şimdi doğrudan olarak kaydedilir. tiff ve .eps aracılığıyla değil.

    +0

    Aslında farklı yazı tipi türleri olarak gösterdiğiniz şeyler aslında aynıdır. – Oleg

    +0

    oops - bu doğru - en azından şeklin üst kısmı için. Neyse ki, alt kısımda Arial, Courier New ve Times'ı ekledim ve farklı şekilde ortaya çıktığını görebiliyorum. Yolunda düzenle! – marsei

    +0

    Aslında, 12 yazı tipinin tamamı Matlab'ın figüründe doğru bir şekilde yazılmıştır. Görünüşe göre 'eps ​​olarak kaydet' işe yaramadı - kötüyüm. Resim düzenlendi! Bunu gösterdiğiniz için teşekkürler @Oleg Komarov. – marsei

    İlgili konular