2

我尝试使用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,这似乎会产生与 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')
4

4 回答 4

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

机器人轴的相同字体

对于不同轴的不同字体:

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

每个轴的不同字体

于 2013-08-28T12:41:22.063 回答
1

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

于 2013-08-28T03:09:42.393 回答
1

对 Peterm 帖子的讨论:

可以以正常方式绘制图形。之后,您使用图形窗口中提供的绘图工具 GUI 编辑绘图。在那里您可以将对象拖到其他位置,编辑线条等。完成后,您可以通过选择 Menu->File->Generate Code 从中生成代码。现在您将在 MATLAB 编辑器中找到一段代码,您可以将其复制粘贴到您的应用程序/代码中以重复使用它。所以编辑整个情节而不是自己编码会更容易。

于 2013-08-29T20:43:38.567 回答
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')
于 2013-08-27T20:53:05.003 回答