当前位置: 首页 > news >正文

Octave 绘图快速入门指南

目录

1. 基本的 2D 绘图

2. 自定义图形样式

3. 绘制散点图

4. 绘制柱状图

5. 绘制直方图

6. 3D 绘图

6.6.1 3D 曲面图

6.6.2 3D 散点图

7. 绘制极坐标

8. 多子图绘制

总结


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,适合数据分析、数学建模和科学计算的可视化需求。掌握这些基础后,你可以更高效地展示数据并得出可视化结论。如果你有更具体的绘图需求或问题,随时可以提出来,我可以在今后的博客中为你提供更详细的教程!

    http://www.xdnf.cn/news/370711.html

    相关文章:

  • jdk多版本切换,通过 maven 指定编译jdk版本不生效,解决思路
  • 【金仓数据库征文】_金仓数据库在金融行业的两地三中心容灾架构实践
  • 黑马k8s(二)
  • Laravel 安全:批量赋值 fillable 与 guarded
  • PostgreSQL 的 pg_advisory_lock_shared 函数
  • 使用FastAPI微服务在AWS EKS上实现AI会话历史的管理
  • Python 对象引用、可变性和垃圾 回收(变量不是盒子)
  • K8S Svc Port-forward 访问方式
  • 【C++】 —— 笔试刷题day_27
  • Linux在web下http加密和配置虚拟主机及动态页面发布
  • 5.2 参数管理
  • Vue 两种导航方式
  • API 网关核心功能解析:负载均衡、容灾、削峰降级原理与实战摘要
  • Linux笔记---System V共享内存
  • uniapp+vue3+firstUI时间轴 提现进度样式
  • 比 Mac 便笺更好用更好看的便利贴
  • 源码示例:使用SpringBoot+Vue+ElementUI+UniAPP技术组合开发一套小微企业ERP系统
  • CentOS7.9部署FunASR实时语音识别接口 | 部署商用级别实时语音识别接口FunASR
  • milvus+flask山寨复刻《从零构建向量数据库》第7章
  • LeetCode 2918.数组的最小相等和:if-else
  • OpenCv实战笔记(4)基于opencv实现ORB特征匹配检测
  • Web3 初学者的第一个实战项目:留言上链 DApp
  • 协议路由与路由协议
  • 【图书管理系统】深度讲解:图书列表展示的后端实现、高内聚低耦合的应用、前端代码讲解
  • PXE_Kickstart_无人值守自动化安装系统
  • 物业企业绩效考核制度与考核体系
  • 前端弹性布局:用Flexbox构建现代网页的魔法指南
  • vue2 上传pdf,拖拽盖章,下载图片
  • 前端开发实战:用React Hooks优化你的组件性能
  • [C] 第10章 预处理命令