Spacey
Spacey

Reputation: 3017

Put two y-axes on an imagesc image in MATLAB

I have what I think is a simple problem: I have a matrix that I image using imagesc. I simply want to show a second y-axis on the right hand side of the image. How do I do that? Example:

clear all;
aMatrix = rand(20,30);
yAxis1 = 32.*(1:size(aMatrix,1));
yAxis2 = 165.*(1:size(aMatrix,1));
xAxis = 1:size(aMatrix,2);
imagesc(yAxis1, xAxis1, aMatrix);

The following will show the image with yAxis1, on the left hand side. That is great, but how do I show yAxis2 on the right hand side of the image at the same time? Thanks.

Upvotes: 3

Views: 3739

Answers (2)

kaj
kaj

Reputation: 1

A quite similar solution using yyaxis :

  aMatrix = rand(20,30);
  yAxis1 = 32.*(1:size(aMatrix,1));
  yAxis2 = 165.*(1:size(aMatrix,1));
  xAxis = 1:size(aMatrix,2);
  yyaxis left
  imagesc(xAxis, yAxis1, aMatrix);
  ax = gca;
  ax.YColor = ax.XColor;
  ylabel('Left Side')
  yyaxis right
  imagesc(xAxis, yAxis2,aMatrix);
  ax.YColor = ax.XColor;
  ylabel('Right Side')  

Upvotes: 0

lennon310
lennon310

Reputation: 12689

  aMatrix = rand(20,30);
  yAxis1 = 32.*(1:size(aMatrix,1));
  yAxis2 = 165.*(1:size(aMatrix,1));
  xAxis = 1:size(aMatrix,2);
  h1=imagesc(xAxis, yAxis1, aMatrix);set(gca,'YDir','normal');
  ax1=gca;
  set(ax1,'YColor','r','YAxisLocation','right');
  set(ax1,'XTickLabel',' ');
  ax2=axes('Position',get(ax1,'Position'),'YAxisLocation','left');
  h2=imagesc(xAxis, yAxis2,aMatrix,'Parent',ax2);
  set(gca,'YDir','normal');

enter image description here

Upvotes: 6

Related Questions