在同一图中用x1,y1,x2,y2绘制数据 - matlab

时间:2013-04-29 12:21:01

标签: matlab plot

我正在尝试像这样做一个Hertzsprung-Russell图:http://en.wikipedia.org/wiki/File:HRDiagram.png 我有4种不同类型的数据用于同一点(我们称之为x1,y1,x2,y2),我想把它们放在同一个图表中,显示4轴(其中2个像往常一样在底部和左边,其他2个顶部和右侧)。 我的代码:

filename = 'Hipparcos_stars2.xlsx';
sheet1 = 1;

xHRcolor = 'G2:G19920'; 
yHRmag = 'I2:I19920'; 
xHRtemp = 'J2:J19920';
yHRlum = 'K2:K19920';
HRx_c = xlsread(filename, sheet1, xHRcolor); % x1
HRy_m = xlsread(filename, sheet1, yHRmag); % y1
HRx_t = xlsread(filename, sheet1, xHRtemp); % x2
HRy_l = xlsread(filename, sheet1, yHRlum); % y2

figure(1)
ax1 = gca;
line(HRx_c,HRy_m, 'LineStyle', 'o', 'Color', 'k', 'MarkerSize', 1);
set(ax1,'ydir','reverse');

ax2 = axes('Position',get(ax1,'Position'),...
           'XAxisLocation','top',...
           'YAxisLocation','right');
line(HRx_t,log10(HRy_l),'LineStyle', 'o','Color','k','MarkerSize', 1,'Parent',ax2);
set(ax2,'xdir','reverse');

xlabel(ax1,'B-V color')
ylabel(ax1,'V Magnitude')
xlabel(ax2,'Temperature [ºK]')
ylabel(ax2,'Luminosity [log(L/Ls)]')

像这样我最终会得到一个带有4轴但有关第二组轴的错误信息的图形。问题是,使用此代码,它不会使第二组轴适应数据,并且对于我选择的任何点,它呈现正确的x2和y2值,但是x1和y1的值不正确。 知道如何在维基百科做点什么吗? 提前致谢

表示Hipparcos_stars2.xlsx:http://www1.datafilehost.com/d/7d652c04

2 个答案:

答案 0 :(得分:1)

您可以使用plotyy()然后自定义外观:

h = plotyy(HRx_c,HRy_m,HRx_t,HRy_l,'plot','semilogy')
set(h(1),'ydir','reverse');
set(h(2),'xdir','reverse');

答案 1 :(得分:1)

以下是您的代码,只需稍加修改即可使用:

%# some random data
x1 = linspace(0,1,100);
y1 = exp(x1) .* cos(x1);
x2 = linspace(10,100,100);
y2 = cumsum(rand(size(x2))-0.5);

%# plot
figure
hAx(1) = axes('YDir','reverse', 'XColor','b', 'YColor','b');
hAx(2) = axes('Position',get(hAx(1),'Position'), 'XDir','reverse', ...
    'XAxisLocation','top', 'YAxisLocation','right', 'Color','none', ...
    'XColor','r', 'YColor','r');
linkprop(hAx, 'Position');
line(x1,y1, 'Color','b', 'LineStyle','none', 'Marker','o', 'MarkerSize',2, ...
    'Parent',hAx(1));
line(x2,y2, 'Color','r', 'LineStyle','none', 'Marker','.', 'MarkerSize',5, ...
    'Parent',hAx(2));
xlabel(hAx(1), 'B-V color')
ylabel(hAx(1), 'V Magnitude')
xlabel(hAx(2), 'Temperature [ºK]')
ylabel(hAx(2), 'Luminosity [log(L/Ls)]')

screenshot

请注意,通过将其color属性设置为'none',可使第二个轴变为透明。绘制点分散的正确方法是在使用'none'属性指定标记时将线属性设置为'Marker'

另请注意使用linkprop链接两个轴的位置属性,如果更改了一个,那么另一个跟随。