如何在Matlab绘图中为某些x值切割y轴的部分

如何在Matlab绘图中为某些x值切割y轴的部分,matlab,plot,axis,Matlab,Plot,Axis,是否有(手动或自动)方法在Matlab绘图中为某些x值切割y轴的多个部分?我在其他编程语言中找到了解决方案(参见下面的2个链接),但在Matlab中没有,除了文件交换上的BreakAxis和BreakYaxis,但这只适用于一次中断 我也在下面发布我的代码,我想实现它。我希望为每个yNegData和yPosData设置一个y轴断点,即两个断点,分别位于[0.3*min(yNegData)0.7*min(yNegData)]和[0.3*max(yPosData)0.7*max(yPosData)]

是否有(手动或自动)方法在Matlab绘图中为某些x值切割y轴的多个部分?我在其他编程语言中找到了解决方案(参见下面的2个链接),但在Matlab中没有,除了文件交换上的
BreakAxis
BreakYaxis
,但这只适用于一次中断

我也在下面发布我的代码,我想实现它。我希望为每个
yNegData
yPosData
设置一个y轴断点,即两个断点,分别位于
[0.3*min(yNegData)0.7*min(yNegData)]
[0.3*max(yPosData)0.7*max(yPosData)]

如果你能用一种我可以用它来绘制不同类型的图的方式来写它(不仅仅是条形图,还有直线图),那将是非常有用的

守则:

revenue = ones(100,1);
opex = -1*ones(100,1);
opex(10:15,1) = 3;

data{1} = revenue;
data{2} = opex;
colors = parula(numel(data));
labels = {'Revenue','Opex'};
for i = 1:numel(data)
    dataNeg{i} = data{i};
    dataNeg{i}(data{i}>0) = 0;
    dataPos{i} = data{i};
    dataPos{i}(data{i}<0) = 0;
    mdata(i) = nnz(dataPos{i});  % was: mean(data{i});
end
[~,posOrder] = sort(mdata,'ascend');
[~,negOrder] = sort(mdata,'descend');
yDataPos = [dataPos{posOrder}];
yDataNeg = [dataNeg{negOrder}];
hold on;
bNeg = bar(yDataNeg,'stack');
bPos = bar(yDataPos,'stack');
for i= 1:numel(data)
    set(bNeg(i),'FaceColor',colors(negOrder(i),:))
    set(bPos(i),'FaceColor',colors(posOrder(i),:))
end
legend(labels{:});
hold off;
revenue=one(100,1);
运营成本=-1*个(100,1);
运营成本(10:15,1)=3;
数据{1}=收入;
数据{2}=opex;
颜色=帕鲁拉(努梅尔(数据));
标签={'Revenue','Opex'};
对于i=1:numel(数据)
dataNeg{i}=数据{i};
dataNeg{i}(data{i}>0)=0;
dataPos{i}=数据{i};
dataPos{i}(data{i}有这个包

它适用于线条;它有一个小例子

a=20*rand(21,1)+10;
figure;hold on;
plot(a);
breakyaxis([14 21]);
% hold off %% I guess, inserted by me
但是,它似乎对条形图不起作用——如果您在上面的示例中将
plot(a)
替换为
bar(a)
,分割条纹不会覆盖轴的宽度。我肯定可以对其进行调整,但这可能不值得


如果可以切换到R,则可以从
plotrix
软件包中使用
gap.barplot()
(请参阅),也可以切换到
gnuplot
(请参阅).

为什么你想要一个断轴?在科学中,它不经常使用,因为它会扭曲峰之间的视觉比率,例如,你提供的第一个链接中的两个峰由于y轴的切割看起来小得多,导致数据的误报。为什么不使用对数图呢?不完全是重复的,但你可以从中获得灵感关于这个问题和我对它的回答:@Adriaan
@LenaH那么也许可以制作三个子批次,即每个“切口”对应一个子批次部分,是否更有意义?如果您希望子地块彼此更接近,则可以调整子地块之间的距离。请参阅,例如,您永远不应该剪切条形图。条形图对条形图高度的值进行编码。条形图必须从0开始,而不是剪切以使其为真。剪切条形图是欺骗读者的好方法。所有轴它们中的剪切是不好的,但在条形图中它确实是邪恶的。你需要找到一种更好的方式来显示你的数据。如果你共享你想要显示的数据,我可以帮助你找到一种好的方式来显示它。