一、常规的散点图绘制
散点图是数据可视化中比较常见的形式,常用来表示两个变量之间的关系。
在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函数来绘制散点图。
通过将两个图层叠在一起,我们可以同时展示散点图和连线图,并使图形呈现更直观、更明了的效果。