Rotation of a contour plot
13 views (last 30 days)
Show older comments
Mahi Nazir
on 9 Jul 2014
I have a contour plot (Image1). I need to rotate it through a certain angle. If I save it as an image and then rotate it using transformation(or rotation) matrix, the whole plot including the axes are rotated(Image2). If I use imrotate for the matrix I have of the contour, the resultant contour doesn't actually rotate by the same angle which I specify (37 deg in the example, Image3) and more over sometimes the width of the plot decreases.
Can someone please help me overcome the problem. I want rotation of the contour plot without reducing the width and rotating exactly by the specified angle. Is it the aliasing effect?
Any help will be much appreciated. Many Thanks
0 Comments
Accepted Answer
Grzegorz Knor
on 9 Jul 2014
Look at this example:
a = 37;
[x,y] = meshgrid(linspace(-4,4,30));
z = exp(-x.^2/15-y.^2);
contour(x,y,z)
xlim([-5 5])
ylim([-5 5])
x = x*cosd(a) - y*sind(a);
y = y*cosd(a) + x*sind(a);
figure
contour(x,y,z)
xlim([-5 5])
ylim([-5 5])
Is that what you want?
6 Comments
Mattalabba
on 15 Nov 2018
Is it correct that this method does not work anymore in MATLAB 2015 and newer?
I recieve the error 'Index exceeds matrix dimensions. Error in rotate (line 31): ax = ancestor(h(1),'axes');'
When I change
rotate(get(h,'children'),[0 0 1],a)
to
rotate(h,[0 0 1],a)
I get no error, but also nothing changes on the contourplot.
Or am I misunderstanding something?
Alexander
ungefär 4 timmar ago
Edited: Alexander
ungefär 4 timmar ago
In the first example the y-transformation should include the original x values (i.e. prior to assignment):
% field to be rotated
a = 80;
[x,y] = meshgrid(linspace(-4,4,30));
z = exp(-x.^2/15-y.^2);
[~,h] = contour(x,y,z);
xlim([-5 5])
ylim([-5 5])
% use original x values in y-transformation
x_orig = x;
x = x*cosd(a) - y*sind(a);
y = y*cosd(a) + x_orig*sind(a);
figure
contour(x,y,z)
xlim([-5 5])
ylim([-5 5])
Otherwise, the contour plot will be shear-transformed.
% accepted answer
[x,y] = meshgrid(linspace(-4,4,30));
x = x*cosd(a) - y*sind(a);
y = y*cosd(a) + x*sind(a);
figure
contour(x,y,z)
xlim([-5 5])
ylim([-5 5])
rotate(get(h,'children'),[0 0 1],a)
has no effect on contour objects. Use
[x,y] = meshgrid(linspace(-4,4,30));
figure
g = hgtransform;
contour(x, y, z, 'Parent', g);
set(g, 'Matrix', makehgtform('zrotate', deg2rad(a)));
More Answers (0)
See Also
Categories
Find more on Contour Plots in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




