Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB-xy曲线下的带状区域(弯矩分布)_Matlab_Plot_Matlab Figure - Fatal编程技术网

MATLAB-xy曲线下的带状区域(弯矩分布)

MATLAB-xy曲线下的带状区域(弯矩分布),matlab,plot,matlab-figure,Matlab,Plot,Matlab Figure,我想要得到的是一个经典的弯矩分布图,它可能看起来像: 我试着使用面积图、xy图和条形图,最后一个是最接近我需要的,但这仍然不是我能接受的。我可以使用任意形式的数据 我会手动解决它,生成您想要的行 %some example plot x1 = -3; x2 = 2; upfun = @(x) -1/10*(x-x1).*(x-x2); downfun = @(x) 1/5*(x-x1).*(x-x2); %set slope you want. Inf for vertical lines s

我想要得到的是一个经典的弯矩分布图,它可能看起来像:


我试着使用面积图、xy图和条形图,最后一个是最接近我需要的,但这仍然不是我能接受的。我可以使用任意形式的数据

我会手动解决它,生成您想要的行

%some example plot
x1 = -3;
x2 = 2;
upfun = @(x) -1/10*(x-x1).*(x-x2);
downfun = @(x) 1/5*(x-x1).*(x-x2);
%set slope you want. Inf for vertical lines
slope=inf;

x_dense = linspace(x1,x2,100);
x_sparse = linspace(x1,x2,20);

%plotting it without the stripes. nan is used not to have unintended lines connecting first and second function
plot([x_dense ,nan,x_dense ],[upfun(x_dense),nan,downfun(x_dense)])

x_stripes=nan(size(x_sparse).*[3,1]);
y_stripes=nan(size(x_sparse).*[3,1]);

if slope==inf
    %vertical lines, no math needed to know the x-value.
    x_stripes(1,:)=x_sparse;
    x_stripes(2,:)=x_sparse;
else
    %intersect both functions with the sloped stripes to know where they
    %end
    for stripe=1:numel(x_sparse)
        x_ax=x_sparse(stripe);
        x_stripes(1,stripe)=fzero(@(x)(upfun(x)-slope*(x-x_ax)),x_ax);
        x_stripes(2,stripe)=fzero(@(x)(downfun(x)-slope*(x-x_ax)),x_ax);
    end
end
y_stripes(1,:)=upfun(x_stripes(1,:));
y_stripes(2,:)=downfun(x_stripes(2,:));
x_stripes=reshape(x_stripes,1,[]);
y_stripes=reshape(y_stripes,1,[]);
plot([x_dense ,nan,x_dense,nan,x_stripes],[upfun(x_dense),nan,downfun(x_dense),nan,y_stripes])
坡度=1的示例

slope=inf的示例

虽然更一般,并且可以用于倾斜条纹,但这里有一个更简单的解决方案,使用
不带标记和基线:

x1 = -3;
x2 = 2;
upfun = @(x) -1/10*(x-x1).*(x-x2);
downfun = @(x) 1/5*(x-x1).*(x-x2);

x_dense = linspace(x1,x2,100);
x_sparse = linspace(x1,x2,20);

%// plot outline
plot(x_dense,upfun(x_dense),'b-',x_dense,downfun(x_dense),'b-');
hold on;
%// plot stripes
stem(x_sparse,upfun(x_sparse),'b','marker','none','showbaseline','off');
stem(x_sparse,downfun(x_sparse),'b','marker','none','showbaseline','off');
结果:


有许多文件交换条目就是这样做的。它不是内置的功能。有一篇很好的博客文章突出了它们,并展示了一些例子。谢谢,我当然会看看这个方法。或者,你可以先把它修改一下,画出轮廓,然后使用
stem()
不带标记的方法来画线。一个用于正位,一个用于负位。但只有当你是一种特殊的懒人时:d这似乎很有希望,因为@Suever提出的方法只会产生位图打印。哦,我没有想到这一点。那它真的有战斗的机会。你试过画斜条纹吗?您的手动版本将使这一点变得相当容易(不像
stem
)。这可能是可能的,但需要计算线之间的交点。特别是对于像
g)
这样的东西,一条板条可能会被切成两半。我不使用
stem
的主要原因是将所有数据都保存在一个数据系列中,这样以后添加图例等步骤就更简单了。你说得对,我没有考虑过类似
g)
这样的情况。我不担心传奇人物,他们的
行为可以被禁用。但我知道这只是一个例子:)我想这也可以取决于OP到底需要什么。@AndrasDeak:比我最初想象的要简单,至少在忽略g)谢谢,这很有效