不使用保持(或全部)的不同颜色散点
Different Colour Scatter points without using Hold on (or all)
我想在 MATLAB 中使用三组数据创建一个散点图。 X
、Y
和 c
。 X
和 Y
是它们各自的轴图,但 c
保存每个散点分类的信息(整数值)。我希望将每个分类图作为单独的颜色。这些整数值很简单,可以转换成各自的颜色选择,所以没有问题。
目前,C
作为我的颜色选择,我正在使用,
hold on
for k=1:K
scatter(X(c==k,:),Y(c==k),[],C(k,:),'filled');
end
我这样做的动机是我希望在 DataCursorManager
中创建一个 UpdateFcn
以便用数据游标显示每个点的日期。我无法用多个散点图做到这一点,我认为这是解决问题的最简单方法。
如评论中所述,scatter
可以采用表示颜色的第 4 个参数。第三个参数(与 c
一起用于每个散点图的参数)仅控制大小。
对你来说,调用scatter
的方式应该是:
scatter(x,y, size, colour , 'filled')
仔细阅读 documentation for scatter
以更好地理解其用法。
下面是一个关于如何使用 4 个参数的快速示例。我必须创建样本数据,因为您没有指定任何数据(我选择在 x
轴上设置日期,并且我假设您希望所有组的大小相同......但根据您的需要进行调整) .
请注意,散点对象有一个名为 CData
的 属性。这与 x
的大小相同,它包含每个数据点的颜色(以及图形颜色图中颜色的索引)。这就是我们在数据提示功能中用来了解您的点的分类的方法。如果您想交互更改颜色,可以直接重新调整此 CData
矢量。
function h = scatter_datatip_demo
%// basic sample data
npts = 50 ;
nClass = 12 ; %// let's say we have 12 different class
x = round(now) + randi([-10 10],npts,1) ;
y = rand(size(x)) ;
s = ones(size(x))*40 ;
c = randi([1 nClass],size(x)); %// randomly assign a class for each point
%// Draw a single scatter plot (specifying the colour as the 4th input)
h.f = figure ;
h.p = scatter(x,y , s , c , 'filled') ; %// <== Note how scatter is called
colormap( jet(nClass) ) ;
%// add custom datatip function
set( datacursormode(h.f) , 'UpdateFcn',@customDatatipFunction );
function output_txt = customDatatipFunction(~,evt)
pos = get(evt,'Position');
hp = handle( get(evt,'Target') ) ; %// get the handle of the scatter plot object
ptClass = hp.CData( get(evt,'DataIndex') ) ; %// get the colour index of the current point
output_txt = { ...
'My custom datatip' , ...
['Date : ' , datestr(pos(1)) ] ...
['Class: ' , num2str(ptClass) ] ...
['Value: ' , num2str(pos(2),8)] ...
};
我想在 MATLAB 中使用三组数据创建一个散点图。 X
、Y
和 c
。 X
和 Y
是它们各自的轴图,但 c
保存每个散点分类的信息(整数值)。我希望将每个分类图作为单独的颜色。这些整数值很简单,可以转换成各自的颜色选择,所以没有问题。
目前,C
作为我的颜色选择,我正在使用,
hold on
for k=1:K
scatter(X(c==k,:),Y(c==k),[],C(k,:),'filled');
end
我这样做的动机是我希望在 DataCursorManager
中创建一个 UpdateFcn
以便用数据游标显示每个点的日期。我无法用多个散点图做到这一点,我认为这是解决问题的最简单方法。
如评论中所述,scatter
可以采用表示颜色的第 4 个参数。第三个参数(与 c
一起用于每个散点图的参数)仅控制大小。
对你来说,调用scatter
的方式应该是:
scatter(x,y, size, colour , 'filled')
仔细阅读 documentation for scatter
以更好地理解其用法。
下面是一个关于如何使用 4 个参数的快速示例。我必须创建样本数据,因为您没有指定任何数据(我选择在 x
轴上设置日期,并且我假设您希望所有组的大小相同......但根据您的需要进行调整) .
请注意,散点对象有一个名为 CData
的 属性。这与 x
的大小相同,它包含每个数据点的颜色(以及图形颜色图中颜色的索引)。这就是我们在数据提示功能中用来了解您的点的分类的方法。如果您想交互更改颜色,可以直接重新调整此 CData
矢量。
function h = scatter_datatip_demo
%// basic sample data
npts = 50 ;
nClass = 12 ; %// let's say we have 12 different class
x = round(now) + randi([-10 10],npts,1) ;
y = rand(size(x)) ;
s = ones(size(x))*40 ;
c = randi([1 nClass],size(x)); %// randomly assign a class for each point
%// Draw a single scatter plot (specifying the colour as the 4th input)
h.f = figure ;
h.p = scatter(x,y , s , c , 'filled') ; %// <== Note how scatter is called
colormap( jet(nClass) ) ;
%// add custom datatip function
set( datacursormode(h.f) , 'UpdateFcn',@customDatatipFunction );
function output_txt = customDatatipFunction(~,evt)
pos = get(evt,'Position');
hp = handle( get(evt,'Target') ) ; %// get the handle of the scatter plot object
ptClass = hp.CData( get(evt,'DataIndex') ) ; %// get the colour index of the current point
output_txt = { ...
'My custom datatip' , ...
['Date : ' , datestr(pos(1)) ] ...
['Class: ' , num2str(ptClass) ] ...
['Value: ' , num2str(pos(2),8)] ...
};