XTickLabels中的Pi

时间:2013-08-27 20:42:22

标签: matlab

我尝试使用http://www.mathworks.com/matlabcentral/fileexchange/23841执行此操作,如下所示:

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刻度标签不相同?

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

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')

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

使用MATLAB-help我会这样解决:

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来执行text()。

更自动:

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')

答案 2 :(得分:1)

David多次与Matlab的数据可视化工具进行了斗争,我建议将图像保存为图像并在photoshop,microsoft word或您选择的编辑器中创建数据标签。这将是更少的时间,更少的头痛,并最终看起来更好(抗锯齿文本等)。

答案 3 :(得分:1)

对Peterm职位的讨论:

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