Rendering issues in Matlab R2014b version when using patch

I am using patch to shade an area in a graph. The code that I am using is simple:
lm = 0;
s = 1:1000;
d = [ones(1, 100) zeros(1, 800) -1*ones(1, 100)];
xdata = [s(1) s s(end)];
ydata = [lm d lm];
patch(xdata, ydata, ones(size(xdata)));
In the attachment, the left figure is produced from R2014b version and the right from version R2012b.
Is there a workaround to deal with this problem? Have you also noticed it?
Thank you very much in advance.

Réponses (3)

Hi,
I think you need to add the line at the zero:
lm = 0;
s = 1:1000;
d = [ones(1, 100) zeros(1, 800) -1*ones(1, 100)];
xdata = [s(100) s(1) s s(end) s(end-99)];
ydata = [lm lm d lm lm];
patch(xdata, ydata, ones(size(xdata)));
I'm not sure why it works fine in 12b ...
Titus

4 commentaires

Thank you Titus. However, this is a workaround if you a have a time a few unique points on your data series. What if you have lots of different data.
An example would be:
The first subplot is the patch and the second is the simple plot.
One could use also the area function but still I don't have the freedom to manipulate properties such as:
  • FaceColor
  • EdgeAlpha
  • FaceVertexAlphaData, etc.
Is it possible to have an answer from Mathworks?
Mike Garrity
Mike Garrity le 5 Déc 2014
Modifié(e) : Mike Garrity le 5 Déc 2014
It sounds like another instance of this bug, but you should send it to support to make sure they're tracking it.
I think that one had to do with multiple edges which were colinear, but didn't have coincident vertices.

Connectez-vous pour commenter.

Thank you Mike for you input. The simplest workaround that can overcome this problem is setting the value lm very low. i.e.
lm = 1e-5; % practically zero
s = 1:1000;
d = [ones(1, 100) zeros(1, 800) -1*ones(1, 100)];
xdata = [s(1) s s(end)];
ydata = [lm d lm];
patch(xdata, ydata, ones(size(xdata)));
This can fix it for the moment, as you can see below:
matt dash
matt dash le 5 Déc 2014
I suppose this qualifies as a bug, but it seems like a bad coding practice. If you know you want the patch to produce a series of bars, like a histogram, a better option is (at least to me) to plot each bar as a face of the patch by supplying all 4 vertices. I don't think the overhead of making each bar a separate face of the patch will be noticeable, even for very complex plots.

1 commentaire

Yes I agree with you. However here, I am not using patch to produce some bars. I use it to patch an area. I just gave a simple example which appears like patched bars, to illustrate the problem.

Connectez-vous pour commenter.

Produits

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by