我已经阅读了几个关于为数据设置两个x轴的SO答案,以及mathworks.com上的一些教程,但是我没有办法完全做到以下几点:
通常绘制数据集编号1。 在图形的顶部创建第二个x轴,但使用现有的y轴作为下一个数据集。 绘制第二个数据集,使其控制第二个x轴(缩放等),并且不会覆盖或重新缩放现有的单个y轴。
这样做的原因是我想基于相同的源数据集绘制两组不同的直方图值,因此频率分布的大小相似,但是bin大小/边的值是不同的
我的后备是对第二个数据集的x数据进行点斜率缩放,但是我仍然需要创建一个类似于How to insert two X axis in a Matlab a plot的第二个x轴。
答案 0 :(得分:6)
你可以在第一个轴(在同一个位置)创建第二个轴,XAxisLocation
设置为'top'
,没有Color
所以它是透明的,没有yticks,并且它与第一轴的YLim
相关联。另外,我们可以链接Position
值,以确保如果我们调整其中一个轴,它们会调整大小以保持其外观。
figure;
% Create the first axes
hax1 = axes();
% Plot something here
xdata = 1:10;
hplot1 = line(xdata, log(xdata));
% Create a transparent axes on top of the first one with it's xaxis on top
% and no ytick marks (or labels)
hax2 = axes('Position', get(hax1, 'Position'), ... % Copy position
'XAxisLocation', 'top', ... % Put the x axis on top
'YAxisLocation', 'right', ... % Doesn't really matter
'xlim', [2 20], ... % Set XLims to fit our data
'Color', 'none', ... % Make it transparent
'YTick', []); % Don't show markers on y axis
% Plot data with a different x-range here
hplot2 = line(xdata * 2, log(flip(xdata)), 'Color', 'r', 'Parent', hax2);
% Link the y limits and position together
linkprop([hax1, hax2], {'ylim', 'Position'});
% Draw some labels
xlabel(hax1, 'Blue Line')
xlabel(hax2, 'Red Line')
ylabel(hax1, 'Some Value')
% Add a legend? Why not?!
legend([hplot1, hplot2], {'Blue', 'Red'})
当刻度间距不是相同的顶部和底部时,上面的代码会导致丑陋的XTicks。 我在matlab remove only top and right ticks with leaving box on找到了解决方法。我将上面的代码稍微修改为
figure
xdata = 1:10;
plot(xdata)
% get handle to current axes
hax1 = gca;
% set box property to off
set(hax1,'box','off','color','white')
hax2 = axes('Position', get(hax1, 'Position'),'box','off', ... % Copy position
'XAxisLocation', 'top', ... % Put the x axis on top
'YAxisLocation', 'right', ... % Doesn't really matter
'Color', 'none', ... % Make it transparent
'YTick', []);
plot
一起使用,这将覆盖现有的轴分配。由于没有points
函数(愚蠢的MathWorks),我必须line(x,y,'linestyle','none','marker','x','parent',hax2)
来获得积分。
hplot2 = line(5:25, log((5:25)), 'Color', 'r', 'Parent', hax2);
linkprop([hax1,hax2],{'ylim','Position'});
答案 1 :(得分:1)
这是我用plotyy
执行此操作的hacky方式。
<强>代码: - 强>
%Random values for axes
BotttomXaxis = 1:10;
Yaxis =1:3:30;
TopXaxis = (11:20:200).^3;
[ax,H1,H2]= plotyy(Yaxis,BotttomXaxis,Yaxis,TopXaxis)
view([90 -90])
% Now labeling the axes, notice carefully where I have written to write y and x labels.
xlabel('Enter ylabel of the y-axis here')
ylabel(ax(1), 'Enter xlabel of the bottom x-axis here');
ylabel(ax(2), 'Enter xlabel of the top x-axis here');
我觉得不需要在这里添加图例,因为轴和绘图颜色已经指示了图例。见下图:
但如果您仍想添加图例,可以使用以下内容:
legend(H1,'Legend of Bottom X-axis','Location','northeast');
legend(H2,'Legend of Top X-axis','Location','northeast');
%Specifying the Legend location is necessary here