Problem with scatter plot over pcolor
6 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Alexander
el 22 de Abr. de 2011
Comentada: PANKAJ PANDYA
el 1 de Sept. de 2016
Hello, I'm trying to plot gridded ocean model data and then overlay a scatter plot of irregular points (observation stations). For some reason I get errors and no plots at all whenever I try the code below, but of course the pcolor on its own works fine.
subplot(2, 1, 1)
pcolor(grid.lon, grid.lat, squeeze(data(i, :, :)))
hold on
scatter(points(:,1), points(:,2))
And this is the error I get (the number of which is equal to the number of points I am trying to scatter):
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
Warning: Patch FaceVertexCData length (0) must equal Vertices length (1) for flat EdgeColor
There must be some kind of work around to make this work.
0 comentarios
Respuesta aceptada
Más respuestas (2)
Jim Hokanson
el 21 de Jun. de 2013
Editada: Jim Hokanson
el 21 de Jun. de 2013
Actually I think this is a bug. I am by no means a patch expert but it appears that scatter is implemented as a hggroup with a set of child patches that are the individual scatter points. What's really confusing to me is that Matlab seems to use two methods of coloring patches, one based on x,y,z data points and cData, and another based on vertices, faces, and FaceVertexCData. When switching from faceted to flat shading, it appears that Matlab switches to using vertex information (from xyz data), which given the description of the shading flat algorithm makes sense.
Now for the bug:
Scatter can be called with a [1 x 3], a [1 x m], a [m x 1], or a [m x 3] matrix (or a color string), oops, and the default which is also a single color (your case). If you use a single color, then then the hggroup has sufficient CData (I'm guessing) that Matlab doesn't bother to set CData or FaceVertexCData although the vertices are set. When you set shading to flat, then you have a non-empty vertices property and an empty FaceVertexCData property and then no one is happy.
In general the following code will reproduce this result:
N = 10 %For fun times make N even larger!
scatter(1:N,1:N);
shading flat
3 comentarios
Jim Hokanson
el 21 de Jun. de 2013
Ha! Yeah, I am in the middle of submitting a bug report on the topic. The first reply wasn't that helpful (actually just flat out wrong). I just get a kick out of your reply because I am also in the process of switching over to Python. The process has not been nearly as smooth as I had hoped (in my week or so of doing this) but I think it will get better.
Kelly Kearney
el 21 de Jun. de 2013
While I don't have an easy-to-replicate example at my figertips right now, I'll add that I've seen something similar to this when using the patchm function. Supposedly, patchm should allow the same cdata input as the patch function, but I've found it often fails to interpret scaled input properly; instead I have to manually set the ('facecolor', 'flat', 'cdata', cval) after the patch has been created. I haven't looked too closely at the cause, but it may have something to do with the fact that map axis surface objects assume shading flat by default.
Ver también
Categorías
Más información sobre Polygons en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!