您的位置:

使用Matlab绘制高效的散点图连线图

一、常规的散点图绘制

散点图是数据可视化中比较常见的形式,常用来表示两个变量之间的关系。

在Matlab中,我们可以通过scatter函数来绘制散点图。下面是一个简单的散点图示例:

 x = rand(1,100); 
 y = rand(1,100); 
 scatter(x,y) 

该示例中使用rand函数生成了两个长度为100的随机序列,然后调用scatter函数将这两列序列转换为散点图。

下面我们来解释一下scatter函数的构造:

 scatter(x,y) %简单散点图绘制 
 scatter(x,y,s) %改变散点大小 
 scatter(x,y,s,c) %改变散点颜色 
 scatter(x,y,s,c,'filled') %带填充的散点图 
 scatter(___,'filled') %用默认值填充散点图 

散点图的绘制是一个比较基础的知识点,在此不做过多的阐述。针对不同场景的散点图绘制方式各异,我们可以进一步了解Matlab中各种特殊情况下的散点图绘制方式。

二、定制线条的散点图绘制

定制散点图是一种常见且有用的数据展示方式,可以进一步突出各数据点的差异性。

在Matlab中,我们可以使用plot函数来绘制定制化的散点图。

下面是一个通过plot函数绘制的定制化散点图:

 x = randn(1,20); 
 y = randn(1,20); 
 sizes = rand(1,20)*200+50; %随机生成点的大小 
 colors = rand(20,3); %随机生成点的颜色 
 plot(x,y,'ko','MarkerFaceColor','g','MarkerSize',sizes) 
 axis([-3 3 -3 3]) 
 grid on 

在上述示例中,我们生成了两列随机数,并通过rand函数生成了大小为20的序列。

绘制定制散点图时,我们可以调整点的大小、颜色等,这一点在代码示例中得到体现。

三、基于线连接的散点图

基于线连接的散点图相比于常规散点图,能够表达更多的数据信息和关联性。

在Matlab中,我们可以使用plot函数来实现这一点。

下面是一个通过plot函数生成的基于线连接的散点图:

 x = rand(1,10); 
 y = rand(1,10); 
 plot(x,y,'o-') 
 axis([-0.2 1.2 -0.2 1.2]) 
 grid on 

代码示例中,我们生成了两列长度为10的随机数,然后使用plot函数生成基于线连接的散点图。

通过这种方式,我们可以实现更加清晰的关联性展示。

四、高效的散点图与连线图绘制

由于Matlab对于连线图的支持度较弱,因此在许多场景下我们需要绘制自定义的连线图。

下面我们来逐步讲解如何绘制高效的散点图与连线图。

1. 绘制散点图

在Matlab中,我们可以使用scatter函数方便地绘制散点图。

下面是一个常规的scatter函数绘制的散点图。

 rng('default') %返回默认种子 
 X = randn(50,2); 
 scatter(X(:,1),X(:,2),30) 
 axis([-3 3 -3 3]) 
 grid on 

在这个示例中,我们首先使用randn函数生成一个50*2的随机矩阵,然后通过scatter函数将这个矩阵转换为散点图。

在实际应用中,我们还可以调整scatter函数的参数,如点大小、颜色、形状等,从而更加准确地呈现数据信息。

2. 绘制连线图

在Matlab中,我们可以使用plot函数来绘制基本的连线图。但当需要绘制大量连线时,使用plot函数绘制连线图会非常耗时。

因此,我们需要使用更高效的方式绘制连线图,这种方法被称为“线圈法”(loop method)。

下面是一个基于线圈法绘制的连线图:

 rng('default') %返回默认种子 
 X = randn(50,2); 
 idx = randperm(50); 
 lIdx = [idx idx(1)]; %产生连接到其本身的图形 
 b = sqrt(sum(diff(X(lIdx,:),1).^2,2)); 
 [dummy,maxIdx] = max(b); 
 plot(X(lIdx(maxIdx,:),1),X(lIdx(maxIdx,:),2),'ko-') 
 axis([-3 3 -3 3]) 
 grid on 

代码示例中,我们首先生成一个50*2的随机矩阵。

使用randperm函数将50个数字进行随机排列,随后在最后添加一个连接到自身的数字,最后形成一共51个数字。

计算最远的两个点的距离,并绘制出来。

3. 绘制散点图和连线图

当需要同时绘制散点图和连线图时,我们可以基于上述方法实现。

下面是一个综合示例:

 rng('default') %返回默认种子 
 X = randn(50,2); 
 idx = randperm(50); 
 %散点图 
 hScat = scatter(X(:,1),X(:,2),50,'b','filled'); 
 hold on 
 %连线图 
 lIdx = [idx idx(1)]; %产生连接到其本身的图形 
 b = sqrt(sum(diff(X(lIdx,:),1).^2,2)); 
 [dummy,maxIdx] = max(b); 
 hLine = plot(X(lIdx(maxIdx,:),1),X(lIdx(maxIdx,:),2),'r','LineWidth',2); 
 axis([-3 3 -3 3]) 
 grid on 

实现方式与绘制连线图基本相同,只是在散点图绘制部分,我们需要使用scatter函数来绘制散点图。

通过将两个图层叠在一起,我们可以同时展示散点图和连线图,并使图形呈现更直观、更明了的效果。