echarts x轴像直尺一样设置刻度_Matlab绘制多x轴和多y轴图(双x双y轴/单x双y轴/双x单y轴图等),及坐标轴参数汇总

Matlab绘制双x双y轴/单x双y轴/双x单y轴图,看别的教程是用line语句,但其实用plot和scatter都是可以(自己已经实践)。绘制轴数量、轴位置(XAxisLocationYAxisLocation)、轴颜色,其实本质和绘制函数曲线的颜色、形式(scatter或plot)是一样的,都是利用句柄参数来实现的。

参考这些不错的例子就能明白<Matlab绘制双x轴-双y轴图形攻略><请问我要画上下两个x轴的图,为什么不能用plot函数><创建包含多个 x 轴和 y 轴的图>

1.调整plot的坐标轴的显示位置

一般plot命令生成的图形中,x轴和y轴都是默认分别显示在正下方和左侧的。现在想要,让x轴显示到正上方,y轴还是显示在左侧。

所以,问题就是如何调整x轴的显示位置?(y轴同理)

c6e50428bfe5cd9d762a9b3cc7b52ded.png

使用以下语句

set(gca,'XAxisLocation','top')

gca就是图片句柄,使用gca命令可访问Axes对象。通过设置XAxisLocation这个参数为top,就可以了

2.一些通用的设置(参见matlab官方文档)

(1)更改坐标轴范围

xlim([0 10])
ylim([-0.4 0.8])

% 将 x 轴范围最大值设为 0,y 轴范围最小值设为 -1。其他范围则由 MATLAB 选择。
% 对于自动计算的最小值或最小值范围,分别使用 -inf 或 inf 来表示。
xlim([-inf 0]) 
ylim([-1 inf])

% 还原为默认范围
xlim auto
ylim auto
zlim auto

(2)反转坐标轴方向

% 使用 gca 命令可访问 Axes 对象。通过设置 Axes 对象的 XDir 和 YDir 属性,可控制x轴和y轴值递增的方向。
% 这些属性可以设置为 'reverse' 或 'normal'(默认值)。
stem(1:10)
ax = gca;
ax.XDir = 'reverse';
ax.YDir = 'reverse';
%% 精简写法 
set(gca,'XDir','reverse','YDir ','reverse')

f267ff05ec0e2891cb25e79e7a0b2b36.png

(3)显示通过原点的轴线

% 默认情况下,x 轴和 y 轴沿坐标区的外边界显示。
% 通过设置 Axes 对象的 XAxisLocation 和 YAxisLocation 属性来更改轴线位置,以使轴线在原点 (0,0) 处交叉
% 将 XAxisLocation 设置为 'top'、'bottom' 或 'origin'。
% 将 YAxisLocation 设置为 'left'、'right' 或 'origin'。这些属性仅适用于二维视图中的坐标区。

x = linspace(-5,5); y = sin(x); plot(x,y)
ax = gca; ax.XAxisLocation = 'origin'; ax.YAxisLocation = 'origin';
box off   %删除坐标区框轮廓。

%% 精简写法 
set(gca,'XAxisLocation','origin','YAxisLocation','origin')

0e8ad59a833fc86123d75cdc51c96976.png

3.创建包含多个 x 轴和 y 轴的图

创建过程为:(1)先创建第一套坐标系(第1个x轴、y轴)和使用这个坐标系的函数。同时可根据意愿设定该坐标系颜色尺度等参数(2)再使用axes()命令创建第二套坐标系(实质是基于第一套坐标系位置,指定第2个x轴、y轴的位置,并可选择设定坐标系颜色尺度等参数)(3)在第二套坐标系中,画出使用这个坐标系的函数

实际上在第(1)步,使用plot等语句绘制函数,就会直接默认创建第一套坐标系,只不过,特别地我们要根据意愿设定坐标系颜色尺度等参数。注意在(3)中绘制使用第二坐标系函数前,最好hold on 一下,保持(1)中绘制的函数,免得把它给刷掉了

这里我使用例子讲解

案例1:我自己写论文用到的,要绘制多个分开的scatter、legend,对应2x2y轴

    figure
    
    title_str1 =['T=' num2str(data.T),'K, Power=3.2uW/mm^2']
    title(title_str1,'FontSize',20)
    
    %% 创建第一个坐标系,指定其参数
    xlabel('time/us','fontsize',18);
    ylabel('Responsivity / [uV/(nW/um^2)]','fontsize',18);
    set(gca,'FontSize',16);
    hold on

    p(1)=scatter(YBCOData002(:,1),YBCOData002(:,2),'^','r'), hold on; %2mA
        legend_str{1}=['Arpaia et al'];
    ax1 = gca; % current axes
    set(ax1,'XAxisLocation','top','XColor','r','YColor','r','YLim',[-5,35],'YTick',[-5:10:30])

    %% 创建第2个坐标系,指定其参数
    ax2 = axes('Position',get(ax1,'Position'),'XAxisLocation','bottom','YAxisLocation','right',...
    'Color','none', 'XColor','b','YColor','b','YLim',[-5e5,45e5],'YTick',[-5e5:10e5:38e5]); hold on;
    
    xlabel('time/ms','fontsize',18);
    ylabel('Responsivity / [uV/(nW/um^2)]','fontsize',18);
    set(gca,'FontSize',16);
    hold on
    %% 绘制第2个坐标系中的scatter函数
    p(2)=scatter(cut_timebase,cut_WFdata(21,:),'Parent',ax2,'o','b'), hold on; 
       legend_str{2}=['This work'];

%% 绘制2个分开的legend        
h1=legend(p(1),legend_str{1});
set(h1,'edgecolor','white','FontSize',16), hold on
ah=axes('position',get(gca,'position'),'visible','off'); %% this works to aviod only legend exist 
h2=legend(ah, p(2),legend_str{2});
set(h2,'edgecolor','white','FontSize',16), hold on
   
%      saveas(gcf,[title_str1,'.bmp'])

案例2:绘制2个plot,对应2x2y轴. 整理自<MATLAB论坛>

x1=1:10;
y1=1:10;
x2=1: 7;
y2=5:14;

hl1 = line(x1,y1,'Color','r');%第一条曲线的绘制,以默认的主xy轴为坐标
ax1 = gca;%设置主坐标轴的颜色,用默认的位置,设定颜色
set(ax1,'XColor','r','YColor','r')

%创建第二套坐标轴,设定颜色及位置
ax2=axes('Position',get(ax1,'Position'),...
           'XAxisLocation','top',...
           'YAxisLocation','right',...
           'Color','none',...
           'XColor','k','YColor','k');
hold on; % plot画图之前会清空坐标轴,所以画图之前可以先hold一下

hl2 = line(x2,sin(x2),'Color','k','Parent',ax2);%第二条曲线的绘制,以ax2为坐标系

案例3:绘制2个line,对应2x2y轴. 整理自<百度>

注意使用lineplotscatter,本质都是一样的, 区别仅是画出的是线还是散点,输入的x1/y1是函数表达式还是矩阵形式散点数据

x1 = [0:.1:40];
y1 = 4.*cos(x1)./(x1+2);
x2 = [1:.2:20];
y2 = x2.^2./x2.^3;

hl1 = line(x1,y1,'Color','r');
ax1 = gca;
set(ax1,'XColor','r','YColor','r')

ax2 = axes('Position',get(ax1,'Position'), 'XAxisLocation','top','YAxisLocation','right',...
           'Color','none', 'XColor','k','YColor','k');

hl2 = line(x2,y2,'Color','k','Parent',ax2);

案例4:x轴刻度相同的双轴图. 整理自<百度>

x1 = [0:.1:40];
y1 = 4.*cos(x1)./(x1+2);
x2 = [1:.2:20];
y2 = x2.^2./x2.^3;

hl1 = line(x1,y1,'Color','r');
ax1 = gca;
set(ax1,'XColor','r','YColor','r')

ax2 = axes('Position',get(ax1,'Position'), 'XAxisLocation','top','YAxisLocation','right',...
           'Color','none', 'XColor','k','YColor','k');

hl2 = line(x2,y2,'Color','k','Parent',ax2);

%% 手动指定刻度线位置
xlimits = get(ax1,'XLim');
ylimits = get(ax1,'YLim');
xinc = (xlimits(2)-xlimits(1))/5;
yinc = (ylimits(2)-ylimits(1))/5;
set(ax1,'XTick',[xlimits(1):xinc:xlimits(2)], 'YTick',[ylimits(1):yinc:ylimits(2)])

973140222b19348740573c58bd20f0c2.png
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值