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

用x1、y1、x2、y2在同一图中绘制数据-matlab,matlab,plot,Matlab,Plot,我想做一个赫兹-拉塞尔图,像这样: 对于同一点,我有4种不同类型的数据(我们称之为x1、y1、x2、y2),我想把它们放在同一个图中,显示4个轴(其中2个轴通常是底部和左侧,另外2个是顶部和右侧)。 我的代码: 像这样,我得到了一个有4个轴的图形,但是关于第二组轴的信息是错误的。问题是,使用此代码,它不会使第二组轴适应数据,并且对于我选择的任何点,它会显示正确的x2和y2值,但错误的x1和y1值。 你知道如何在维基百科上做类似的事情吗? 提前谢谢 对于Hipparcos_stars2.xlsx:

我想做一个赫兹-拉塞尔图,像这样: 对于同一点,我有4种不同类型的数据(我们称之为x1、y1、x2、y2),我想把它们放在同一个图中,显示4个轴(其中2个轴通常是底部和左侧,另外2个是顶部和右侧)。 我的代码:

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

对于Hipparcos_stars2.xlsx:

您可以使用并自定义外观:

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

以下是您的代码,稍作修改即可工作:

%# 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)]')

请注意,通过将第二个轴的“颜色”属性设置为“无”,第二个轴变得透明。另外,绘制点分散的正确方法是在使用
'marker'
属性指定标记时,将线属性设置为
'none'


还请注意使用
linkprop
链接两个轴的位置属性,这样,如果一个轴发生更改,另一个轴将随之更改。

hello!谢谢你的回复,但我需要两个x轴和两个y轴。plotyy只做了两个y轴。是的,你说得对。这里的文档显示了Amro在回答中的内容。是的,这就是我在代码中的内容。问题是,当您有两组数据,并且希望将其绘制在同一个图形中时,该代码非常有用。这样,它显示两条线,一条相对于一个轴,另一条相对于第二个轴。但是我只有一组包含4种信息的数据。@IrisBreda您需要根据第一个轴绘制所有数据,覆盖第二个轴,手动设置第二个轴的x记号和y记号。你好,Oleg!非常感谢你的帮助。你能告诉我更多/更少的代码吗?如果你在维基百科的人力资源图表中查到,第一个x轴与第二个x轴之间没有线性关系。有可能用x记号来做吗?再次感谢您抽出时间。嘿!:)谢谢你的回复,但我还是不能正常工作。像这样,它显示了两组数据,一组“附加”到蓝色轴,另一组“附加”到红色轴。我只需要绘制一组数据,同时“连接”到4轴,因为每个点都有关于所有4轴的信息。是的,我特意设置了两种不同的颜色,以显示上面只有2个轴。我不确定你指的是哪4个轴……是:)每个点都有4种类型的信息。检查:该图中的每个点都有关于颜色、大小、温度和亮度的信息。这就像,如果你在图中选择一个点,你只需检查它在4个轴上的坐标就可以知道它的颜色、大小、温度和亮度。我不确定这是可视化多维数据的有效方法,因为你要将4-DIM映射到x/y位置。例如,如何表示仅在一个值上不同的两点,例如(1,1,1,1)和(1,1,1,99)?除非尺寸实际上是相关的(即对于某些常数,
dim3=a*dim1+b
)。。。您是否考虑过使用另一种可视化方式,如?您的问题与MATLAB无关。这是一个天文单位的比例问题(我在这里无能为力)。要让任何人看到正在发生的事情,请尝试下一个代码:
子地块(211)行(HRx_c,HRy_m,'LineStyle','o','Color','k','MarkerSize',1);集合(gca,'ydir','reverse');子地块(212)线(HRx_t,对数(HRy_l),'LineStyle','o','Color','k','MarkerSize',1);集合(gca,'xdir','reverse')如果你在谷歌上搜索,你可以找到:。这里有一些MATLAB代码,转换不仅仅是
log10()
%# 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)]')