matlab对柱状图的平移保持y刻度不变,给出精细修改和实例
问题是这样的,双坐标图表示也没问题!但是不想让他们重合,说在上x轴画柱状图,下方画折线图:
这样表示也能懂,但是想要下面这样:但是不想让他们重合,说在上x轴画柱状图,下方画折线图:如下:
移动的距离可以根据实际情况安排:
解决思路,柱状图平移:
于是搜到柱状图有个基线画法:doc bar可以看到。
但是他的坐标轴刻度更改了。不是零开始了。于是基于此,作出如下更改!
图表中的所有条形序列具有相同的基线。通过设置任一条形序列的 BaseValue
属性将基线的值更改为 2。使用圆点表示法设置属性。
但是他的坐标轴刻度更改了。不是零开始了。于是基于此,作出如下更改!
两步:
第一步骤:
% 这里备注,数据加上13,代表数据往上平移的距离,为了和折线避开
sst_ano=sst_ano+30,元数据加上一个平移的距离:
x1(1).BaseValue = 30;% 基准线更改,和平移距离保持一致:
x1=bar(year,sst_ano+30,0.2,"grouped","LineWidth",2,'FaceColor',[0.8 0.8 0.8]);
x1(1).BaseValue = 30;% 这里的13和上面保持一致,为了从那里开始画图
x1(1).BaseLine.LineStyle = '-';% 这里和下面三个设置基础线条,
x1(1).BaseLine.Color = 'k';
x1(1).BaseLine.LineWidth = 1;
第二步骤:
自己重新设置ytick以及yticklabel.
set(gca,'ytick',25:1:35,'YTickLabel',25-30:1:35-30)% 这里是对y刻度重新设置,因为数据往上平移30,因此,在标注刻度时候,减去30,就等于真实数。
结果:
数据和代码如下:
clc,clear;
% 构造数组,数据
sst_ano=[-1 -1 -3 1 3 4 -1 -2 2 -4 5 -3 -1 2 -1 -5 1 -2];
PC=[0.550000000000000 0.660000000000000 0.690000000000000 0.600000000000000 0.710000000000000 0.540000000000000 0.520000000000000 0.690000000000000 0.550000000000000 0.560000000000000 0.520000000000000 0.560000000000000 0.590000000000000 0.600000000000000 0.650000000000000 0.500000000000000 0.540000000000000 0.540000000000000];
year = 2005:2022;
%% picture one no adjust_没有调整的图片
close all
figure
set(gcf,'position',[50 50 1250 850],'color','w')
yyaxis left
% 这里给你备注,数据加上13,代表数据往上平移的距离,为了和折线避开
x1=bar(year,sst_ano,0.2,"grouped","LineWidth",2,'FaceColor',[0.8 0.8 0.8]);
set(gca,'ytick',-6:2:6,'YTickLabel',-6:2:6)% 这里是对y刻度重新设置,因为数据往上平移13,因此,在标注刻度时候,减去13,就等于真实数。
set(gca,'xtick',[2005:5:2022],'xticklabel',2005:5:2022)%x轴刻度
ylim([-6 6]);
ylabel('SST Ano','color','k');
set(gca,'fontsize',12,'fontname','宋体','fontweight','bold','linewidth',2,'ycolor','k')
box off
yyaxis right
y1=plot(year,PC,'-','color','r','linewidth',1.5);
hold on;
ylim([0.45 0.75]);
set(gca,'ytick',0.45:0.05:0.75,'YTickLabel',0.45:0.05:0.75);
set(gca,'XColor','k','YColor','r');
box on
xlabel('年份');
ylabel('PC of eof','color','r');
set(gca,'fontsize',12,'fontname','宋体','fontweight','bold','linewidth',2)
export_fig('未移动的图片.jpg')
%% picture one have adjust_调整的图片
close all
figure
set(gcf,'position',[50 50 1250 850],'color','w')
yyaxis left
% 这里给你备注,数据加上13,代表数据往上平移的距离,为了和折线避开
x1=bar(year,sst_ano+17,0.2,"grouped","LineWidth",2,'FaceColor',[0.8 0.8 0.8]);
x1(1).BaseValue = 17;% 这里的13和上面保持一致,为了从那里开始画图
x1(1).BaseLine.LineStyle = '-';% 这里和下面三个设置基础线条,
x1(1).BaseLine.Color = 'k';
x1(1).BaseLine.LineWidth = 1;
set(gca,'ytick',12:1:22,'YTickLabel',12-17:1:22-17)% 这里是对y刻度重新设置,因为数据往上平移13,因此,在标注刻度时候,减去13,就等于真实数。
set(gca,'xtick',[2005:2:2022],'xticklabel',2005:2:2022)%x轴刻度
ylim([10 22]);
posy=ylabel('SST ano','color','k');
posy1 = get(posy,'position');
posy1(2)=posy1(2)+1;
set(posy,'position',posy1)
set(gca,'fontsize',12,'fontname','宋体','fontweight','bold','linewidth',2,'ycolor','k')
box off
yyaxis right
y1=plot(year,PC,'-','color','r','linewidth',1.5);
hold on;
ylim([0.4 1.4]);
set(gca,'ytick',0.4:0.1:0.7,'YTickLabel',0.4:0.1:0.7);
set(gca,'XColor','k','YColor','r');
box on
xlabel('年份');
posyy=ylabel('PC of eof','color','r');
posyy1 = get(posyy,'position');
posyy1(2)=posyy1(2)-0.3;
set(posyy,'position',posyy1)
set(gca,'fontsize',12,'fontname','宋体','fontweight','bold','linewidth',2)
export_fig('移动的图片1.jpg')