Strange behaviour of plot

When I do the following plot in R2025a, I do not see the line. (Here the code runs under R2024b)
plot([0,eps,1],[0,eps,1])

 Respuesta aceptada

Ray
Ray el 13 de Jun. de 2025

2 votos

This is very likely due to a particular rendering algorithm being used to render the line that is more than 1 pixel wide or on a high-DPI machine. This is a known issue, and we are actively working on resolving this.
Currently, there are a couple of workarounds you can try:
1. Set the line's 'LineWidth' property to a small value such as 0.1 to force the line to be 1 pixel wide. For example:
plot([0,eps,1],[0,eps,1],LineWidth=0.1)
2. If the decreased line width isn't acceptable, then you can try setting the 'LineJoin' property to 'chamfer'. (Caveat: this may result in some performance degradation in rendering and interactions)
plot([0,eps,1],[0,eps,1],LineJoin="chamfer")

5 comentarios

Paul
Paul el 13 de Jun. de 2025
Is there a link to a Bug Report that discusses in more detail when to expect a problem?
Mariano
Mariano el 13 de Jun. de 2025
Thanks. Indeed, the resolution I have is 2880x1920.
Ray
Ray el 13 de Jun. de 2025
Currently, we don't have an existing publicly facing bug report link.
For the plot issue here, we would expect any line plot with a LineWidth > 1 or a line plot on a high-DPI monitor may encounter this issue. The suggested workarounds are as above.
ethan shoemaker
ethan shoemaker el 30 de Dic. de 2025
@Ray is there any update on when this bug may be resolved?
Ray
Ray el 8 de En. de 2026
Hi @ethan shoemaker, the issue will be resolved in R2026a.

Iniciar sesión para comentar.

Más respuestas (1)

John D'Errico
John D'Errico el 11 de Jun. de 2025
Editada: John D'Errico el 11 de Jun. de 2025

0 votos

Cute. If you try this in R2025a:
small = 1e-7;plot([0,small,1],[0,small,1])
small = 1e-8;plot([0,small,1],[0,small,1])
(Sorry that Answers is still seemingly broken, not executing code.)
When done using my own copy of R2025a, the first plot shows the expected diagonal line, whereas the second is a blank figure.
Even more interesting, is if I try this:
small = 1e-8;
plot([0 small 1 1+small 2],[0 small 1 1+small 2])
the plot does contain a diagonal line, but it starts at 1, not 0.
Its worth reporting to TMW as a bug.

7 comentarios

John D'Errico
John D'Errico el 11 de Jun. de 2025
I've posted this as a bug report, so you do not need to do so also.
Adam Danz
Adam Danz el 11 de Jun. de 2025
Thanks for reporting!
Walter Roberson
Walter Roberson el 11 de Jun. de 2025
I do not get a blank figure; I get one that is partly drawn.
Paul
Paul el 13 de Jun. de 2025
Can you explain what the issue is for @John D'Errico's and @Walter Roberson's examples? I don't see how they relate to LineWidth or monitor resolution.
Walter Roberson
Walter Roberson el 14 de Jun. de 2025
The default line width is 0.5, and the default units is "points", which are 1/72 of an inch. But the behaviour is triggered if the line width is more than one physical pixel.
My display happens to be 5120 x 2880, and MATLAB is mapping it to 2560 x 1440.
On my system, the problem shows up when LineWidth of (strictly greater than) 0.375 is used; 0.375 or smaller LineWidth shows up as a single solid line.
0.375 / 0.5 * (5120/2560) = 1.5 pixels. speculation it might be rounding "half towards zero" so getting 1 pixel, whereas for anything greater than 0.375 would result in a value greater than 1.5 which is being rounded to 2 physical pixels or more.
Paul
Paul el 14 de Jun. de 2025
I'm still not getting it.
small = 1e-7;plot([0,small,1],[0,small,1])
small = 1e-8;plot([0,small,1],[0,small,1])
The first one worked and the second didn't. But shouldn't they both be plotting with the same DefaultLineWidth? So either both should work or neither?
And these commands
small = 1e-8;
plot([0 small 1 1+small 2],[0 small 1 1+small 2])
resulted in half of a line? Does that imply that different parts of the line use different LineWidth?
My sense from the start of this thread is that somehow the issue was related to the use of eps (as with the OP) or "small" as in this Answer thread, but I don't see how the values in the input data to plot() can influence the LineWidth.
Ray
Ray el 17 de Jun. de 2025
I think the issue here is due to the precision. For the wide line rendering, the generated line join geometry (see Line - Chart line appearance and behavior - MATLAB: LineJoin for details) might be affected/degenerated under a certain precision. This explains why two values can have different results.

Iniciar sesión para comentar.

Categorías

Más información sobre Graphics Performance en Centro de ayuda y File Exchange.

Productos

Versión

R2025a

Etiquetas

Preguntada:

el 11 de Jun. de 2025

Comentada:

Ray
el 8 de En. de 2026

Community Treasure Hunt

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

Start Hunting!

Translated by