2013-08-27 12 views
2

我试图用http://www.mathworks.com/matlabcentral/fileexchange/23841要做到这一点,如下所示:丕在XTickLabels

data=rand(5); 

plot(0:pi/4:pi, data,'LineWidth', 3); 

format_ticks(gca,{'0', '\pi/4', '\pi/2', '3\pi/4', '\pi'},[],0:pi/4:pi) 

ylim([0 1]); 
xlabel('My x label') 
ylabel('My y label') 

fontSize = 20; 

set(gca,'FontSize',fontSize) 

然而,x轴标签似乎重叠的X刻度标记?有没有人看到我做错了什么,或者你能建议一个更好的方法来做到这一点?此外,轴标签的字体大小似乎与y tick标签不一样?

----编辑-------- 不使用format_ticks,这似乎产生与xlabel重叠xticks的相同的行为:

data=rand(5); 

plot(0:pi/4:pi, data,'LineWidth', 3); 

format_ticks(gca,{'0', '\pi/4', '\pi/2', '3\pi/4', '\pi'},[],0:pi/4:pi) 

ylim([0 1]); 
xlabel('My x label') 
ylabel('My y label') 

fontSize = 20; 
set(gca,'FontSize',fontSize,'Font','symbol') 

回答

7

此代码应该显示带有pi符号的刻度。两个轴都将标记为符号字体。

x=[-2*pi():.1:2*pi()]; 
plot(x,pi*sin(x)) 

set(gca,... 
'xlim',[-2*pi() 2*pi()],... 
'xtick',[-2*pi():pi()/2:2*pi()],... 
'xticklabel',{'-2p' '-3p/2' '-p' '-p/2' '0' 'p/2' 'p' '3p/2' '2p'},... 
'ylim',[-pi() pi()],... 
'ytick',[-pi():pi()/2:pi()],... 
'yticklabel',{'-p' '-p/2' '0' 'p/2' 'p'},... 
'fontname','symbol',... 
'fontsize',20) 

xlabel('angle \phi from -2\pi to 2\pi',... 
'fontname','helvetica',... 
'fontsize',30) 
ylabel('\pi*sin(\phi)',... 
'fontname','helvetica') 

same fonts for bot axes

针对不同的轴不同的字体:

x=[-2*pi():.1:2*pi()]; 
ax1=axes; 
ax2=axes; 
plot(x,sin(x),'parent',ax1) 

set(ax1,... 
'xlim',[-2*pi() 2*pi()],... 
'xtick',[],... 
'xticklabel',{},... 
'ylim',[-1 1],... 
'ytick',[-1:.5:1],... 
'yticklabel',{'-a' '-a/2' '0' 'a/2' 'a'},... 
'fontsize',20) 

ylabel(ax1,'a\cdotsin(\phi)',... 
'fontname','helvetica',... 
'fontsize',30) 

set(ax2,... 
'xlim',[-2*pi() 2*pi()],... 
'xtick',[-2*pi():pi()/2:2*pi()],... 
'xticklabel',{'-2p' '-3p/2' '-p' '-p/2' '0' 'p/2' 'p' '3p/2' '2p'},... 
'ylim',[-1 1],... 
'ytick',[],... 
'yticklabel',{},... 
'fontname','symbol',... 
'fontsize',20,... 
'position',get(ax1,'position'),... 
'color','none') 

xlabel(ax2,'angle \phi from -2\pi to 2\pi',... 
'fontname','helvetica') 

Dfferent fonts for each axis

+0

啊我看到了,我认为set(gca,'FontName','helvetica')会重置它,但我必须在xlabel调用中包含它。谢谢! –

+0

第一张图像被'export_fig'导出为pdf,然后导出到PNG。第二个是用标准的MATLAB工具直接导出到png。 我不知道为什么Y轴切断:( – Crowley

+0

我认为应该更清楚地指出,“诀窍”是,不要使用Tex来获取pi符号,而是字体。做这个 – Schorsch

1

与MATLAB的帮助下,我会这样解决:

figure(1) 
data=rand(5); 
plot(0:pi/4:pi, data,'LineWidth', 3); 
fontSize = 20; 
set(gca,'FontSize',fontSize) 
set(gca,'XTick',0:pi/4:pi) 
set(gca,'XTickLabel',{'0', 'pi/4', 'pi/2', 
'3pi/4', '\pi'}) 
ylim([0 1]); 
xlabel('My x label') 
ylabel('My y label') 

这里第二但不是很好的可能性。你不使用XTickLabel。你可以创建文字:

figure(1) 
data=rand(5); 
plot(0:pi/4:pi, data,'LineWidth', 3); 
fontSize = 20; 
set(gca,'FontSize',fontSize) 
set(gca,'XTick',0:pi/4:pi) 
set(gca,'XTickLabel',[]) 
text(0,0,'\pi','VerticalAlignment','Top') 
text(pi/4,0,'\pi/2','VerticalAlignment','Top') 
text(pi/2,0,'\pi/2','VerticalAlignment','Top') 
text(3*pi/4,0,'3\pi/4','VerticalAlignment','Top') 
text(pi,0,'\pi','VerticalAlignment','Top') 
ylim([0 1]); 
xlabel('My x label') 
ylabel('My y label') 

你也可以用for来做文本()。

更多自动:

figure(1) 
data=rand(5); 
plot(0:pi/4:pi, data,'LineWidth', 3); 
fontSize = 15; 
set(gca,'FontSize',fontSize) 
sep = 0:0.25:1; % only here you setup 
set(gca,'XTick',sep*pi) 
set(gca,'XTickLabel',[]) 
for n = 1:length(sep) 
    text(sep(n)*pi,0,[num2str(sep(n)),'\pi'],... 
     'VerticalAlignment','Top',... 
     'HorizontalAlignment','Center') 
end 
ylim([0 1]); 
xlabel('My x label') 
ylabel('My y label') 
+0

来自MATLAB: FontSize ... MATLAB不会以新的字体大小显示x,y和z轴文本标签,直到您手动重置它们(通过设置XLabel,YLabel或ZLabel属性或通过使用xlabel,ylabel或zlabel命令)。勾选标记标签立即更改。 我已经在答案中编辑了这个 – Alex44

+0

XTickLabel中的那些“pi”将不会显示为“pi”符号(但只是字母“p”和“i”)? –

+0

据我所知,在XTICKLABEL中不能使用latex解释器。所以你不能在这种情况下显示pi为希腊语。 如果你确实需要这个greeg,而你不想要photoshop,那么还有一个其他的hacky的可能性,我会在上面的答案中加上... – Alex44

1

大卫已经打了Matlab的数据可视化工具很多很多次,我会建议只是节省你的身材为图像和创建Photoshop中的数据标签,Microsoft Word或主编你的选择。这将是更少的时间,更少的头痛,并将最终看起来更好(反锯齿文本等)。

+2

我会不同意。在MATLAB中输出,并输出到'pdf'或'eps'中给出非常好的图像,见'export_fig'包。 – Crowley

+0

@Crowley但是有没有更好的方法在Matlab里使用\ pi? –

+0

如果你不介意不同的字体或者您对Computer Modern感到满意,您可以使用TeX解释器,否则您必须使用'Symbol'字体或“photoshop”您的图像。 – Crowley

1

要讨论到Peterm职位:

有可能绘制graphik以正常的方式。之后,您可以使用图形窗口中提供的绘图工具GUI编辑绘图。在那里你可以拖动对象到其他位置,编辑线条等。 完成后,可以通过选择菜单 - >文件 - >生成代码来生成代码。现在,您将在MATLAB-Editor中找到一段代码,您可以将粘贴复制到您的应用程序/代码以重用它。 因此,编辑整个绘图将更容易,而不是由您自己编写。

+0

啊,我总是忘记这一点,下次我会尝试一下。 –

相关问题