Multiple Axis Scales
显示 更早的评论
I recall that Matlab is able to label a plot axis (say, x) with multiple scale markings (knots, miles per hour, meters per second) as "stacked" rows, but can't figure out where in the help docs it shows how to do this. For clarity
x-axis-----------------------------------------
Knots 0 50 100 etc
MPH 0 50 100 etc
m/s 0 25 50 etc
Also, I'd like to create a horizontal legend of more than one row (or vertical legend with more than one column). Any hints?
Any help is much appreciated.
采纳的回答
更多回答(2 个)
Terrance Frangakis
2018-2-22
编辑:Terrance Frangakis
2018-2-22
I have a simple workaround. In my case, I wanted the secondary x axis to have the inverse of values of the primary x axis (wavenumber on primary axis and wavelength on the secondary axis). The following example shows how I achieved this.
x1=[1:8];
y1=[1 6 2 4 3 1 2 3];
figure
plot(x1,y1);
ax1=gca;
grid
xlabel('Primary axis label')
ylabel('Value')
ax1_pos = get(ax1,'Position');
ax1_label=get(ax1,'XTick');
ax2 = axes('Position',ax1_pos,...
'XAxisLocation','top',...
'YTick',[],...
'XLim',[1 length(x1)],...
'XTickLabel',str2num(sprintf('%.2f ',1./ax1_label)),...
'XLabel','Secondary axis label',...
'Color','none');
The secondary axis needs to know how many xticks there are and what the xticklabels are. In my case, I used a simple element by element inversion, and formatted it to two decimal places. You can vary the number of ticks and labels. The number of labels can be altered by including the 'XTick' parameter in the axes command, by setting it to the same values as the primary axis 'XTick' array, and then changing the labels by the 'XTickLabel' parameter. The 'XTickLabel' array must have the same number of elements as the 'XTick' array.
For example, a new XTick array can be specified with additional entries, and the ax2 statement modified to add additional labels, as follows:
xt2=[1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6 6.5 7 7.5 8];
ax2 = axes('Position',ax1_pos,...
'XAxisLocation','top',...
'YTick',[],...
'XLim',[1 length(x1)],...
'XTick', [1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6 6.5 7 7.5 8],
'XTickLabel',str2num(sprintf('%.2f ',1./xt2)),...
'XLabel','Secondary axis label',...
'Color','none');
The labels may also be explicitly stated in the 'XTickLabel' parameter, rather than make use of a function, if that is more appropriate.
类别
在 帮助中心 和 File Exchange 中查找有关 Axis Labels 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!