目录
Octave 是一个类似于 MATLAB 的开源数学软件,广泛用于数值计算和数据分析。它提供了许多用于绘图和数据可视化的功能,适合快速绘制各种类型的图形。下面是 Octave 绘图 的快速入门指南:
1. 基本的 2D 绘图
最常见的图形类型是二维图形。Octave 提供了简单的 plot
函数来绘制折线图。
绘制简单的折线图
x = 0:0.1:10; % 生成从 0 到 10 的数据,步长为 0.1
y = sin(x); % 计算 x 对应的正弦值
plot(x, y); % 绘制折线图
title("Sine Wave",‘fontsize’,15); % 图形标题
xlabel("X-axis",'fontsize',15); % X 轴标签
ylabel("Y-axis",'fontsize',15); % Y 轴标签 grid on; % 开启网格
注意这里 ‘fontsize’ 属性可以控制标题与标签字体的大小。
运行结果:
折线的样视,粗细和颜色都是可以改变的,我们在下面介绍。
绘制带有多个数据集的图:你可以在同一个图形中绘制多个数据集。
x = 0:0.1:10;
y1 = sin(x);
y2 = cos(x);
plot(x, y1, 'r', x, y2, 'b'); % 'r' 表示红色,'b' 表示蓝色
legend("sin(x)", "cos(x)",'fontsize',15,'location','southwest'); % 图例
legend boxoff;
title("Sine and Cosine Waves",'fontsize',15);
xlabel("X-axis",'fontsize',15);
ylabel("Y-axis",'fontsize',15);
grid on;
这里面我们使用了 legend 命令来为不同的折线标注。
运行结果:
注意我们改变了折线的颜色,用以区分不同的数据集。
2. 自定义图形样式
Octave 支持多种样式来定制图形的外观。我们可以更改线型、颜色和标记。常用的样式选项:
x = 0:0.1:10;
y = sin(x);
plot(x, y, '-ok'); % 'o' 表示圆圈标记,'k' 表示黑色线条
title("Sine Wave with Markers",'fontsize',15);
xlabel("X-axis",'fontsize',15);
ylabel("Y-axis",'fontsize',15);
grid on;
-:实线
--:虚线
::点线
o:圆形标记
x:十字标记
k:黑色,r:红色,g:绿色,b:蓝色等
运行结果:
用户可以根据自己数据的需要和感觉,选择最合适的样式。
3. 绘制散点图
散点图(scatter plot)常用于显示两个变量之间的关系。
x = 0:0.1:10;
y = sin(x);
scatter(x, y, 50, 'r', 'filled'); % 50 是点的大小,'r' 是红色,'filled' 填充圆圈 title("Sine Wave Scatter Plot",'fontsize',15);
xlabel("X-axis",'fontsize',15);
ylabel("Y-axis",'fontsize',15);
grid on;
注意 scatter 命令和 plot 的区别。
运行结果:
4. 绘制柱状图
柱状图常用于显示离散的类别数据。
categories = {'A', 'B', 'C', 'D'};
values = [5, 8, 3, 6];
bar(values); % 绘制柱状图
set(gca, 'xticklabel', categories); % 设置 X 轴标签为类别
title("Bar Chart Example",'fontsize',15);
xlabel("Categories",'fontsize',15);
ylabel("Values",'fontsize',15);
grid on;
注意这里我们使用了set() 命令将 x 轴的 label 和 tick 做了设置。
运行结果:
5. 绘制直方图
直方图用于展示数据的分布情况。
data = randn(1000, 1); % 生成1000个标准正态分布的随机数
hist(data, 30); % 绘制30个柱的直方图
title("Histogram Example",'fontsize',15);
xlabel("Value",'fontsize',15);
ylabel("Frequency",'fontsize',15);
grid on;
运行结果:
6. 3D 绘图
Octave 还支持 3D 绘图,可以绘制三维数据。
6.6.1 3D 曲面图
[x, y] = meshgrid(-5:0.1:5, -5:0.1:5); % 创建网格
z = sin(sqrt(x.^2 + y.^2)); % 计算 z 值
surf(x, y, z); % 绘制三维曲面图
title("3D Surface Plot",'fontsize',15);
xlabel("X-axis",'fontsize',15);
ylabel("Y-axis",'fontsize',15);
zlabel("Z-axis",'fontsize',15);
运行结果:
6.6.2 3D 散点图
x = randn(100, 1);
y = randn(100, 1);
z = randn(100, 1);
scatter3(x, y, z); % 绘制 3D 散点图
title("3D Scatter Plot",'fontsize',15);
xlabel("X-axis",'fontsize',15);
ylabel("Y-axis",'fontsize',15);
zlabel("Z-axis",'fontsize',15);
运行结果:
7. 绘制极坐标图
极坐标图用于在极坐标系中表示数据,适用于展示方向性数据。
theta = 0:0.1:2*pi; % 角度从0到2π
r = sin(2*theta) + cos(2*theta); % 计算半径
polar(theta, r); % 绘制极坐标图
title("Polar Plot Example",'fontsize',15);
注意 theta 是弧度不是角度。
运行结果:
个人感觉不常用,但是需要了解一下。
8. 多子图绘制
你可以在一个窗口中绘制多个图形。
subplot(2, 1, 1); % 创建2行1列的子图,激活第1个子图
plot(x, sin(x));
title("Sine Wave",'fontsize',15);
subplot(2, 1, 2); % 激活第2个子图
plot(x, cos(x));
title("Cosine Wave",'fontsize',15);
subplot(2, 1, 1) 两行一列 第一幅图
subplot(2, 1, 2) 两行一列 第二幅图
运行结果:
多个子图在某些情况下非常有用。
总结
通过 Octave 的强大绘图功能,你可以轻松实现 2D 和 3D 图形的可视化,包括折线图、散点图、柱状图、直方图和极坐标图等。Octave 的绘图功能类似 MATLAB,适合数据分析、数学建模和科学计算的可视化需求。掌握这些基础后,你可以更高效地展示数据并得出可视化结论。如果你有更具体的绘图需求或问题,随时可以提出来,我可以在今后的博客中为你提供更详细的教程!