How to set the grid of the right yyaxis?
    71 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
    Albert Bing
      
 am 1 Dez. 2020
  
    
    
    
    
    Bearbeitet: Star Strider
      
      
 am 1 Dez. 2020
            I have a figure that has 2 yyaxis, and I want the grid shown on the right yyaxis. But the command grid on is only effective on the left yyaxis.
Sure I can just plot the lines of the grids, but the lines are on the top of the other lines or patches. The good thing of the grid is that they are always on the bottom layer, while the lines user plotted are on the top layer.
x1=[200, 300, 250, 520, 340];
x2=[0.3, 0.2, 0.12, 0.4, 0.22];
figure;
yyaxis left
bar(x1);
yyaxis right
plot(x2);
grid on

The grid is on the left yyaxis, while I want it to be of the right yyaxis. What should I do?
2 Kommentare
  KALYAN ACHARJYA
      
      
 am 1 Dez. 2020
				
      Bearbeitet: KALYAN ACHARJYA
      
      
 am 1 Dez. 2020
  
			Answer from MATLAB  "Grid lines correspond with the tick mark locations along the left y-axis". Option plotyy
Akzeptierte Antwort
  Star Strider
      
      
 am 1 Dez. 2020
        
      Bearbeitet: Star Strider
      
      
 am 1 Dez. 2020
  
      Another option is to create new right-axis tick positions to match the tick positions on the left: 
x1=[200, 300, 250, 520, 340];
x2=[0.3, 0.2, 0.12, 0.4, 0.22];
figure;
yyaxis left
bar(x1)
ytl = get(gca, 'YTick');                                    % Get Controlling Left Ticks
yyaxis('right');
plot(x2)
ytr = get(gca, 'YTick');                                    % Get Right Tick Values
ytrv = linspace(min(ytr), max(ytr), numel(ytl));            % Create New Right Tick Values Matching Number Of Left Ticks
ytrc = compose('%.2f',ytrv);                                % Tick Label Cell Array
set(gca, 'YTick',ytrv, 'YTickLabel',ytrc)                   % Set New Right Tick Labels
grid on
producing: 

.
EDIT — (1 Dec 2020 at 17:48)
To get ticks and tick labels with more rational spacing: 
x1=[200, 300, 250, 520, 340];
x2=[0.3, 0.2, 0.12, 0.4, 0.22];
figure;
yyaxis left
bar(x1)
ytl = get(gca, 'YTick');                                    % Get Controlling Left Ticks
yyaxis('right');
plot(x2)
ytr = get(gca, 'YTick');                                    % Get Right Tick Values
tinc = diff(ylim)/numel(ytl);                               % Tick Increment
ytrv = min(ylim):tinc:(tinc*(numel(ytl)+1));
ylim([min(ytrv) max(ytrv)])                                 % Set New ‘ylim’
ytrc = compose('%.2f',ytrv);                                % Tick Label Cell Array
set(gca, 'YTick',ytrv, 'YTickLabel',ytrc)                   % Set New Right Tick Labels
grid on
producing: 

.
3 Kommentare
Weitere Antworten (1)
  Adam Danz
    
      
 am 1 Dez. 2020
        
      Bearbeitet: Adam Danz
    
      
 am 1 Dez. 2020
  
      Workaround
Set the vertical grid lines 
ax = gca(); 
ax.XGrid = 'on'; 
set the horizontal grid lines using yline after setting the ytick and ylim.  If the ylim or yticks change, the horizontal reference lines will not update.  You could add a listener to fix that. Also, the horizonal lines will always be on top.  To put them on the bottom see this answer.  
yyaxis right
ylim([-1,3])
ax.YTick = -1:.5:3;
yl = arrayfun(@(y)yline(ax, y,'LineStyle',ax.GridLineStyle,'Color',ax.GridColor,'Alpha',ax.GridAlpha),ax.YTick);
7 Kommentare
  Adam Danz
    
      
 am 1 Dez. 2020
				
      Bearbeitet: Adam Danz
    
      
 am 1 Dez. 2020
  
			You can use plot() or line() instead of yline().  The main difference is that yline will always extend to the axis edges but if xlim is changed then lines produced by plot() or line() may no longer extend to the axis edges.  You could over-estimate the edges to mitigate that problem. 
Example:
yyaxis right
ax = gca();
ax.XGrid = 'on';
ylim([-1,3])
xl = xlim(); 
xlExtended = xl + [-range(xl), range(xl)]; % Optional
ax.YTick = -1:.5:3;
hold(ax, 'on')
yl = plot(ax, xlExtended,[ax.YTick',ax.YTick'] ,'LineStyle',ax.GridLineStyle,'Color',[ax.GridColor, ax.GridAlpha],'Marker','none');
xlim(xl)
Siehe auch
Kategorien
				Mehr zu Axis Labels finden Sie in Help Center und File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!






