发帖
日期

基于SVD的图像压缩演示,运行结果不正确

% 基于SVD的图像压缩演示clear; clc; close all;%% 1. 读取并显示原始图像try% 尝试读取内置图像original_img = imread('ex2.jpg');catch% 如果内置图像不存在,创建一个示例图像fprintf('使用内置图像失败,创建示例图像...\n');[X, Y] = meshgrid(1:256, 1:256);original_img = uint8(128 + 100 * sin(X/20) .* cos(Y/15));end% 如果图像是彩色的,转换为灰度图if ndims(original_img) == 3 && size(original_img, 3) == 3original_img = rgb2gray(original_img);end% 转换为double类型以便计算A = double(original_img);% 显示原始图像figure('Position', [100, 100, 1200, 600]);subplot(2, 3, 1);imshow(original_img);title('原始图像', 'FontSize', 12);xlabel(['尺寸: ', num2str(size(A, 1)), '×', num2str(size(A, 2))]);%% 2. 对图像矩阵进行SVD分解fprintf('正在进行SVD分解...\n');[U, S, V] = svd(A);% 获取奇异值singular_values = diag(S);total_singular_values = length(singular_values);fprintf('SVD分解完成!总奇异值个数: %d\n', total_singular_values);%% 3. 使用不同数量的奇异值重建图像k_values = [1, 5, 20, 50, 100]; % 选择不同的k值进行测试% 计算原始图像需要存储的元素数量original_elements = numel(A);fprintf('原始图像需要存储的元素数量: %d\n', original_elements);for i = 1:length(k_values)k = k_values(i);if k > total_singular_valuesk = total_singular_values;end% 使用前k个奇异值重建图像A_compressed = U(:, 1:k) * S(1:k, 1:k) * V(:, 1:k)';% 确保数值在合理范围内A_compressed = max(min(A_compressed, 255), 0);% 计算压缩比compressed_elements = size(U, 1)*k + k + size(V, 1)*k;compression_ratio = compressed_elements / original_elements;% 显示重建后的图像subplot(2, 3, i+1);imshow(uint8(A_compressed));title_str = sprintf('k = %d\n压缩比: %.1f%%', k, compression_ratio*100);title(title_str, 'FontSize', 10);% 计算PSNR(峰值信噪比)mse = mean((A(:) - A_compressed(:)).^2);if mse > 0psnr_val = 20*log10(255/sqrt(mse));elsepsnr_val = Inf;endxlabel(sprintf('PSNR: %.1f dB', psnr_val));end%% 4. 绘制奇异值分析图figure('Position', [100, 500, 1000, 400]);% 绘制奇异值衰减曲线subplot(1, 2, 1);plot_range = min(100, total_singular_values);plot(1:plot_range, singular_values(1:plot_range), 'b-', 'LineWidth', 2);xlabel('奇异值序号');ylabel('奇异值大小');title('前100个奇异值');grid on;% 绘制累积能量subplot(1, 2, 2);cumulative_energy = cumsum(singular_values.^2) / sum(singular_values.^2);plot(1:plot_range, cumulative_energy(1:plot_range), 'r-', 'LineWidth', 2);xlabel('使用的奇异值数量 (k)');ylabel('累积能量比例');title('信息保留程度 vs k值');grid on;% 标记关键点hold on;marker_k = [1, 5, 20, 50];for j = 1:length(marker_k)k = marker_k(j);if k <= plot_rangeplot(k, cumulative_energy(k), 'ro', 'MarkerSize', 8, 'MarkerFaceColor', 'red');text(k, cumulative_energy(k)-0.1, sprintf('k=%d\n%.1f%%', k, cumulative_energy(k)*100), ...'HorizontalAlignment', 'center', 'FontSize', 8);endend%% 5. 交互式压缩演示figure('Position', [200, 200, 800, 600]);fprintf('\n=== 交互式压缩演示 ===\n');fprintf('请输入想要的压缩级别 (k值,1-%d),输入0退出: ', total_singular_values);while truek_input = input('');if k_input == 0break;endif k_input < 1 || k_input > total_singular_valuesfprintf('请输入1-%d之间的数字: ', total_singular_values);continue;end% 使用指定k值重建图像A_custom = U(:, 1:k_input) * S(1:k_input, 1:k_input) * V(:, 1:k_input)';A_custom = max(min(A_custom, 255), 0);% 计算指标compressed_elems = size(U, 1)*k_input + k_input + size(V, 1)*k_input;comp_ratio = compressed_elems / original_elements;info_kept = cumulative_energy(k_input) * 100;mse_custom = mean((A(:) - A_custom(:)).^2);if mse_custom > 0psnr_custom = 20*log10(255/sqrt(mse_custom));elsepsnr_custom = Inf;end% 显示结果clf;subplot(1, 2, 1);imshow(original_img);title('原始图像', 'FontSize', 14);subplot(1, 2, 2);imshow(uint8(A_custom));title_str = sprintf('压缩图像 (k=%d)', k_input);title(title_str, 'FontSize', 14);% 显示压缩信息info_str = sprintf(['压缩比: %.2f%%\n', ...'信息保留: %.1f%%\n', ...'PSNR: %.1f dB\n', ...'存储元素: %d → %d'], ...comp_ratio*100, info_kept, psnr_custom, ...original_elements, compressed_elems);text(10, 30, info_str, 'Color', 'white', 'FontSize', 12, ...'BackgroundColor', 'black', 'VerticalAlignment', 'top');fprintf('k=%d: 压缩比=%.2f%%, 信息保留=%.1f%%, PSNR=%.1f dB\n', ...k_input, comp_ratio*100, info_kept, psnr_custom);fprintf('继续输入k值(1-%d)或输入0退出: ', total_singular_values);end%% 6. 压缩效果总结fprintf('\n=== 压缩效果总结 ===\n');fprintf('k值\t压缩比\t\t信息保留\tPSNR(dB)\n');fprintf('------------------------------------------------\n');for k = [1, 5, 10, 20, 50, 100]if k <= total_singular_valuescompressed_elems = size(U, 1)*k + k + size(V, 1)*k;comp_ratio = compressed_elems / original_elements;info_kept = cumulative_energy(k) * 100;A_temp = U(:, 1:k) * S(1:k, 1:k) * V(:, 1:k)';mse_temp = mean((A(:) - A_temp(:)).^2);if mse_temp > 0psnr_temp = 20*log10(255/sqrt(mse_temp));elsepsnr_temp = Inf;endfprintf('%d\t%.2f%%\t\t%.1f%%\t\t%.1f\n', k, comp_ratio*100, info_kept, psnr_temp);endendfprintf('\n程序运行完成!\n');

微尘 2 0 2026-04-08

基于SVD的图像压缩演示程序,运行后图形显示不正常

% 基于SVD的图像压缩演示clear; clc; close all;%% 1. 读取并显示原始图像% 读取图像(请将 'your_image.jpg' 替换为你的图像路径)original_img = imread('ex2.jpg'); % 如果图像是彩色的,转换为灰度图if size(original_img, 3) == 3    original_img = rgb2gray(original_img);end% 转换为double类型以便计算A = double(original_img);% 显示原始图像figure('Position', [100, 100, 1200, 800]);subplot(2, 3, 1);imshow(original_img, []);title('原始图像', 'FontSize', 12);xlabel(['尺寸: ', num2str(size(A, 1)), '×', num2str(size(A, 2))]);%% 2. 对图像矩阵进行SVD分解fprintf('正在进行SVD分解...\n');[U, S, V] = svd(A);% 获取奇异值singular_values = diag(S);total_singular_values = length(singular_values);fprintf('SVD分解完成!总奇异值个数: %d\n', total_singular_values);%% 3. 使用不同数量的奇异值重建图像k_values = [1, 5, 20, 50, 100]; % 选择不同的k值进行测试% 计算原始图像需要存储的元素数量original_elements = numel(A);fprintf('原始图像需要存储的元素数量: %d\n', original_elements);for i = 1:length(k_values)    k = k_values(i);        % 使用前k个奇异值重建图像    A_compressed = U(:, 1:k) * S(1:k, 1:k) * V(:, 1:k)';        % 计算压缩比    compressed_elements = size(U, 1)*k + k + size(V, 1)*k;    compression_ratio = compressed_elements / original_elements;        % 显示重建后的图像    subplot(2, 3, i+1);    imshow(uint8(A_compressed), []);    title(sprintf('k = %d (压缩比: %.1f%%)', k, compression_ratio*100), 'FontSize', 10);    xlabel(sprintf('需要存储: %d个元素', compressed_elements));        % 计算并显示PSNR(峰值信噪比)来衡量重建质量    mse = mean((A(:) - A_compressed(:)).^2);    psnr_val = 20*log10(255/sqrt(mse));    text(10, 20, sprintf('PSNR: %.1f dB', psnr_val), 'Color', 'white', 'FontSize', 8, 'BackgroundColor', 'black');end%% 4. 绘制奇异值衰减曲线figure('Position', [100, 500, 800, 400]);% 绘制奇异值subplot(1, 2, 1);semilogy(1:min(100, total_singular_values), singular_values(1:min(100, total_singular_values)), 'b-', 'LineWidth', 2);xlabel('奇异值序号');ylabel('奇异值大小(对数尺度)');title('前100个奇异值');grid on;% 绘制累积能量subplot(1, 2, 2);cumulative_energy = cumsum(singular_values.^2) / sum(singular_values.^2);plot(1:min(100, total_singular_values), cumulative_energy(1:min(100, total_singular_values)), 'r-', 'LineWidth', 2);xlabel('使用的奇异值数量 (k)');ylabel('累积能量比例');title('信息保留程度 vs k值');grid on;% 标记几个关键点hold on;marker_k = [1, 5, 20, 50];for k = marker_k    if k <= length(cumulative_energy)        plot(k, cumulative_energy(k), 'ro', 'MarkerSize', 8, 'MarkerFaceColor', 'red');        text(k, cumulative_energy(k)-0.1, sprintf('k=%d\n%.1f%%', k, cumulative_energy(k)*100), ...             'HorizontalAlignment', 'center', 'FontSize', 8);    endend%% 5. 显示压缩效果对比fprintf('\n=== 压缩效果总结 ===\n');fprintf('k值\t压缩比\t\t信息保留\n');for k = [1, 5, 20, 50, 100]    if k <= total_singular_values        compressed_elements = size(U, 1)*k + k + size(V, 1)*k;        compression_ratio = compressed_elements / original_elements;        info_retained = cumulative_energy(k) * 100;        fprintf('%d\t%.2f%%\t\t%.1f%%\n', k, compression_ratio*100, info_retained);    endendfprintf('\n程序运行完成!\n');

微尘 1 0 2026-04-08

矩阵绘图很慢很卡,苹果M4下虚拟机深度linux arm64

% ==============================% 立体方盒子:旋转 + 缩放 + 平移% 使用齐次坐标 (4x4 变换矩阵)% ==============================% ----- 1. 定义立方体的8个顶点 (3D坐标) -----% 每个顶点为 (x, y, z),边长为2,中心在原点V = [-1,  1,  1, -1, -1,  1,  1, -1;   % x     -1, -1,  1,  1, -1, -1,  1,  1;   % y     -1, -1, -1, -1,  1,  1,  1,  1];  % z% ----- 2. 定义立方体的12条棱(连接关系)-----% 每条棱由两个顶点的索引(从1开始)表示edges = [1,2; 2,3; 3,4; 4,1;   % 底面         5,6; 6,7; 7,8; 8,5;   % 顶面         1,5; 2,6; 3,7; 4,8];  % 垂直棱% ----- 3. 定义变换参数 -----theta_x = pi/6;   % 绕X轴旋转30度theta_y = pi/4;   % 绕Y轴旋转45度theta_z = pi/3;   % 绕Z轴旋转60度sx = 1.2; sy = 1.5; sz = 0.8;  % 各方向缩放因子tx = 2;   ty = 1;   tz = 3;     % 平移量% ----- 4. 构造变换矩阵(4x4齐次坐标)-----% 旋转矩阵(绕X轴)Rx = [1, 0, 0, 0;      0, cos(theta_x), -sin(theta_x), 0;      0, sin(theta_x),  cos(theta_x), 0;      0, 0, 0, 1];% 旋转矩阵(绕Y轴)Ry = [cos(theta_y), 0, sin(theta_y), 0;      0, 1, 0, 0;      -sin(theta_y), 0, cos(theta_y), 0;      0, 0, 0, 1];% 旋转矩阵(绕Z轴)Rz = [cos(theta_z), -sin(theta_z), 0, 0;      sin(theta_z),  cos(theta_z), 0, 0;      0, 0, 1, 0;      0, 0, 0, 1];% 缩放矩阵S = [sx, 0, 0, 0;     0, sy, 0, 0;     0, 0, sz, 0;     0, 0, 0, 1];% 平移矩阵T = [1, 0, 0, tx;     0, 1, 0, ty;     0, 0, 1, tz;     0, 0, 0, 1];% 组合变换(先缩放 → 再旋转 → 最后平移)% 注意矩阵乘法顺序:从右向左应用M = T * Rz * Ry * Rx * S;   % 可以调整旋转顺序获得不同效果% ----- 5. 将顶点转换为齐次坐标(4x8矩阵)-----V_homo = [V; ones(1, size(V,2))];% ----- 6. 应用变换 -----V_transformed = M * V_homo;% 提取变换后的3D坐标(前三行)V_new = V_transformed(1:3, :);% ----- 7. 绘制原始立方体和变换后的立方体 -----figure;hold on;grid on;axis equal;view(3);  % 设置3D视角% 绘制原始立方体(蓝色)for i = 1:size(edges,1)    p1 = edges(i,1);    p2 = edges(i,2);    plot3([V(1,p1), V(1,p2)], ...          [V(2,p1), V(2,p2)], ...          [V(3,p1), V(3,p2)], 'b-', 'LineWidth', 1.5);end% 绘制变换后的立方体(红色)for i = 1:size(edges,1)    p1 = edges(i,1);    p2 = edges(i,2);    plot3([V_new(1,p1), V_new(1,p2)], ...          [V_new(2,p1), V_new(2,p2)], ...          [V_new(3,p1), V_new(3,p2)], 'r-', 'LineWidth', 2);end% 设置图形属性xlabel('X轴');ylabel('Y轴');zlabel('Z轴');title('立体方盒子:旋转、缩放、平移(矩阵运算)');legend('原始立方体', '变换后立方体');hold off;

杰克王 4 0 2026-03-31

自己写了一个函数,利用contour函数,可以实现隐函数绘图

function   h=implicit_fplot(f, xlims, ylims, options)
% 输入:
%   f: 函数句柄 @(x,y)
%   xlims: [xmin, xmax]
%   ylims: [ymin, ymax]
%   options: 结构体或名称-值对,可选参数
% 输出:
%   h: 图形句柄
% 默认参数
defaults.N = 300;
defaults.LineWidth = 2;
defaults.LineStyle = '-'; % MATLAB默认蓝实线
defaults.Level = 0; %这个不能改,绘制f(x,y)=0的图像
defaults.Axes = gca;
defaults.Hold = false;
% 合并参数
if nargin < 4
options = struct();
elseif isstruct(options)
% options已经是结构体
else
% 将名称-值对转换为结构体
options = struct(options{:});
end
% 应用默认值
fields = fieldnames(defaults);
for i = 1:length(fields)
if ~isfield(options, fields{i})
options.(fields{i}) = defaults.(fields{i});
end
end
% 获取当前坐标轴
ax = options.Axes;
if ~options.Hold
cla(ax);
hold(ax, 'off');
end
% 创建网格
x = linspace(xlims(1), xlims(2), options.N);
y = linspace(ylims(1), ylims(2), options.N);
[X, Y] = meshgrid(x, y);
% 计算函数值
Z = f(X, Y);
contour( X, Y, Z,[options.Level, options.Level],...
options.LineStyle,...
'LineWidth', options.LineWidth)
% 设置坐标轴
xlim(ax, xlims);
ylim(ax, ylims);
axis(ax, 'equal');
grid(ax, 'on');
box(ax, 'on');
xlabel(ax, 'x');
ylabel(ax, 'y');
% 设置标题
s1=func2str(f);
s1(1:6)=[];
title(strcat(s1,'=0'));
hold(ax, 'on');
end
测试F = @(x,y) x.^2+y.^2-1options.LineStyle='r--'implicit_fplot(F, [-1 1], [-1 1],options)

叫我巅哥 0 0 2026-02-09

基于北太天元的科研绘图必备60套颜色模版

颜色模版准备了60套颜色模版,每套模版6种颜色部分模版颜色模版十六进制转RGB函数RGB转北太天元颜色向量演示程序以下为一部分颜色展示相关附件:颜色模版.zip代码参考自https://zhuanlan.zhihu.com/p/488125051

ysf 0 1 2024-07-08

绘图坐标轴的尺度和图像的尺度不匹配

操作系统为 Deepin20.9, 安装的版本为 baltamatica_999_3.5.0_dev0绘制一个周期的正弦曲线, 得到的图如下, 坐标轴上标记的点已经超出了图像的大小.

邱彼郑楠 1 0 2024-05-30

绘图 添加x轴标签符号显示错误

此处符号显示错误

M4STCheng 6 1 2024-05-08

绘图导出图片失败

操作系统为 Deepin20.9, 版本为开发者预览版 Baltamatica_999-3.1.3-dev1.绘图后点击左上角导出图片保存为png格式,提示导出图片失败。

邱彼郑楠 3 0 2024-04-14

终端下无法启动绘图

操作系统为 Deepin20.9, 版本为开发者预览版 Baltamatica_999-3.1.3-dev1.在终端下启动北太天元并使用绘图函数会自动退出程序,提示需要先创建一个 QApplication 应用。

邱彼郑楠 2 0 2024-04-14

绘图是否可以另存为矢量格式(如wmf)的文件?

目前绘图后只能另存为png和jpg文件,是否可以另存为矢量文件,如pdf和wmf之类的,便于后期美化处理

在路上 2 1 2023-10-16

绘图后对图局部放大缩小有明显的卡顿现象

绘图后对图局部放大缩小有明显的卡顿现象

流光似水 1 0 2023-09-27

如何使用excel中的数据进行画图

请详细展示如何在北太天元软件中利用导入的矩阵进行绘制曲面图的过程,十分感谢

Mulilia 1 0 2023-09-09

绘图显示不光滑,显示锯齿风

绘制的图中曲线不光滑,请问有什么办法解决吗?

clc
clear
x=linspace(1,30,40000);
y=sin(x);
plot(x,y,'LineWidth',2)
grid on

DevilGrape 1 0 2023-09-07

“图形视图”界面,在哪呀

想绘制曲面函数的三维图

匿名 1 0 2023-08-22

北太天元2.5上线 | 绘图功能升级,内置函数、工具箱更新

北太天元是面向科学计算与工程计算的国产通用型科学计算软件,提供科学计算、可视化、交互式程序设计,具备丰富的底层数学函数库,支持数值计算、数据分析、数据可视化、数据优化、算法开发等工作,并通过SDK与API接口,扩展支持各类学科与行业场景,为各领域科学家与工程师提供优质、可靠的科学计算环境。北太天元V2.5(Windows版本)现已上线,绘图功能重磅升级,内置函数、工具箱丰富更新,让您感受多方位体验升级。查看下方视频可“沉浸式”体验功能升级亮点。 戳链接即刻下载免费试用:www.baltamatica.com/download一、绘图功能全新升级1、支持导出、网格线、缩小、放大、平移、旋转、还原视图等功能绘图窗口界面已全面更新,工具栏功能进一步完善。可使用鼠标对图形进行导出、增删网格线、缩放、平移、旋转、还原视图等操作。2、支持15种以上绘图类型可绘制二维线图、三维线图、曲面图、散点图、饼图、区域图、条形图、直方图、三维散点图、等高线图、箭头图、气泡图、阶梯图、含误差条的线图、箱线图等。3、支持设置图形属性,添加文本描述、轴标签、标题、图例和颜色栏等可设置线条颜色、线型、标记符号等图形属性,并支持添加图例、标题等,进一步提升绘图美观度与实用性。                                 可调整线条颜色并增加图例、颜色栏、标题等二、内置函数类型丰富1、基础数学支持基本算术运算、三角函数、特殊函数、线性方程、特征值和奇异值、矩阵分解、矩阵运算、随机数的生成、优化、稀疏矩阵的创建和运算等。2、语言基础北太天元目前支持的数据类型包括:int8/uint8/int16/uint16int32/uint32/int64/uint64double/single/complex/charlogical/string/struct/cell该版本可满足二维矩阵和数组的创建、合并、重构等使用需求,并支持常见数据类型和不同数据类型之间的转换,字符和字符串操作,以及高维矩阵的创建(高维矩阵相关操作正在开发中)。3、编程支持创建、运行、调试脚本,以及创建脚本函数、局部函数、匿名函数等。4、数据导入导出支持导入导出的数据类型包含double,single,int32,int64,logical,char,string,支持导入导出的文件格式包括csv,xlsx,mat,txt等。三、工具箱功能更新1、optimization 优化工具箱提供求解线性规划和混合整数线性规划、二次规划等函数。2、ODE支持常微分方程的初始值问题求解器,提供非刚性求解器、刚性求解器。3、fft 快速傅里叶变换提供一维二维的快速傅里叶变换、快速傅里叶逆变换等函数。4、spline 曲线拟合工具箱提供线性与非线性回归、插值、平滑化、后处理拟合等函数。5、computational_geometry 计算几何提供计算几何相关的数据结构和算法,如三角剖分、Voronoi图、多边形、多面体等函数。更多详细功能更新介绍可查看北太天元软件baltamatica_2.5.1 更新日志一、软件使用如您需学习使用北太天元,您可下载产品白皮书、用户手册等文档资料,或通过观看课程视频进一步了解软件操作。详细资料可通过【必看】北太天元软件新手指南查找。二、反馈与交流您的使用与建议是北太天元前进的重要动力,诚邀您反馈软件使用体验(如安装情况、响应时间、稳定性等),我们将第一时间回复您的问题与需求。欢迎大家在社区多多发帖讨论。

社区小助手 0 1 2023-07-12

画图后autoscale和放大缩小没有作用

如图所示,程序运行得到了这样一张图,但是我没法使用autoscale,点击后没反应,图像更清楚地展示应该是下面这样的:

怀九 1 0 2023-03-05

如何使用北太天元的绘图功能

数据可视化(Data Visualization)是关于数据视觉表现形式的科学技术研究,指利用计算机图形学和图像处理技术,将数据转换为图形或图像在屏幕上显示出来,成为对人类视觉更为友好的图形图像的过程。本文使用的北太天元版本为 Baltamatica 2.1.3.2 Windows版1. 首先需要确保北太天元已经加载了 绘图插件 graph, 可以在 帮助 》 插件 中查看,软件安装完成后会默认加载绘图插件。               2. 在绘图插件加载后,如何查看绘图插件提供哪些函数呢?有两个方法,一个是直接在命令行窗口输入 plugin_help(‘graph’) 就可以查看目前绘图插件提供的全部函数,或者在命令行窗口输入 help , 这个命令会返回北太天元里提供的所有内核提供的命令、脚本提供的命令和 插件 [graph(已授权)] 提供的命令。如下图所示               3. 如何查看某个绘图函数的具体用法呢?在命令行窗口直接输入 help 函数名,例如help plot3               使用 plot3 绘制三维螺旋线。t=0:pi/50:10*pi;plot3(sin(t),cos(t),t);axis square;以上代码运行的结果如下图所示。               下面介绍一下北太天元提供的二维图形特殊二维图形1.  条形图bar(X,Y):X是坐标,Y是高度,条形的跨度是x坐标的最小间距 bar(Y):对Y绘制条形图。如果Y为矩阵,Y的每一行聚集在一起。横2.  区域图区域图用于显示向量或者矩阵中的元素在对应的x下,在所有元素中所占的比例。默认情况下,函数area将矩阵中各行的元素集中,将这些值绘成曲线,并填充曲线和x轴之间的空间。其调用语法如下。area(Y):绘制向量Y。area(X,Y):绘制 Y 中的值对 x 坐标 X 的图。然后,该函数根据 Y 的形状填充曲线之间的区域:如果 Y 是向量,则该图包含一条曲线。area 填充该曲线和水平轴之间的区域。如果 Y 是矩阵,则该图对 Y 中的每列都包含一条曲线。area 填充这些曲线之间的区域并堆叠它们,从而显示在每个 x 坐标处每个行元素在总高度中的相对量。3.  饼形图在统计学中,经常要使用饼形图来表示各个统计量占总量的份额,饼形图可以显示向量或矩阵中的元素占总体的百分比。在北太天元中可以使用pie函数来绘制二维饼形图,其调用语法如下。pie(X):使用 X 中的数据绘制饼图。饼图的每个扇区代表 X 中的一个元素。如果 sum(X) ≤ 1,X 中的值直接指定饼图扇区的面积。如果 sum(X) < 1,pie 仅绘制部分饼图。如果 sum(X) > 1,则 pie 通过 X/sum(X) 对值进行归一化,以确定饼图的每个扇区的面积。4.  直方图直方图用于直观地显示数据的分布情况。在北太天元中提供了两个函数用于直方图的绘制:hist和polarhistogram。hist主要是用于直角坐标系直方图的绘制;polarhistogram主要用于极坐标系下直方图的绘制。下文主要介绍hist函数的用法。hist函数的调用语法如下。n=hist(Y):绘制Y的直方图。n=hist(Y,nbins):指定分格的数目。5.  针状图在北太天元中,可以使用函数stem生成二维离散图形。stem函数调用语法如下:stem(Y):绘制Y的数据序列,图形起始于X轴,并在每个数据点处绘制一个小圆圈。strm(X,Y):按照指定的X绘制数据序列Y。6.  方向矢量图和速度矢量图在北太天元中可以绘制方向矢量图和速度矢量图。quiver函数用来绘制箭状图或者速度矢量图,其调用语法如下。quiver(x,y,u,v):绘制矢量图,参数x和y用于指定矢量的位置,u和v用于指定要绘制的矢量。quiver(u,v):绘制矢量图,矢量的位置为默认值。梯度方向也就是速度方向,本例使用quiver函数即可达到目的。7.  等高线的绘制等高线用于创建、显示并标注由一个或多个矩阵确定的等值线。北太天元中提供有一些函数用于绘制等高线:contour 显示矩阵Z的二维等高线图meshc 创建一个匹配有二维等高线图的网格图contourf 显示矩阵Z的二维等高线图,并在各等高线之间用实体颜色填充surfc 创建一个匹配有二维等高线图的曲面图   这里只介绍最常用的函数contour,其他函数请读者自行查阅帮助文档。contour函数用于绘制二维等高线图,其调用语法如下。contour(Z):绘制矩阵Z的等高线,绘制时将Z在x-y平面插值,等高线数量和数值由系统根据Z自动确定。contour(X,Y,Z):绘制矩阵Z的等高线,坐标值由矩阵X和Y指定,矩阵X、Y、Z的维数必须相同。contour(X,Y,Z,“ShowText”,“on”):绘制矩阵Z的等高线,坐标值由矩阵X和Y指定三维图形,通过ShowText后的参数为“on”或者“off”,设置图像是否显示标注。三维图形除了绘制二维图形,北太天元还提供一系列三维图形绘制函数,下文将对这些函数进行详细说明。绘制三维曲线图在北太天元中,plot3函数用于绘制三维曲线图。该函数的用法和plot类似,其调用语法如下。plot3(X,Y,Z): 绘制三维空间中的坐标。要绘制由线段连接的一组坐标,请将 X、Y、Z 指定为相同长度的向量。要在同一组坐标轴上绘制多组坐标,请将 X、Y 或 Z 中的至少一个指定为矩阵,其他指定为向量。plot3(X,Y,Z,LineSpec): 使用指定的线型、标记和颜色创建绘图。plot3(X1,Y1,Z1,...,Xn,Yn,Zn): 在同一组坐标轴上绘制多组坐标。使用此语法作为将多组坐标指定为矩阵的替代方法。plot3(X1,Y1,Z1,LineSpec1,...,Xn,Yn,Zn,LineSpecn): 可为每个 XYZ 三元组指定特定的线型、标记和颜色。您可以对某些三元组指定 LineSpec,而对其他三元组省略它。plot3(...,Name,Value): 使用一个或多个名称-值对组参数指定 Line 属性。绘制三维曲面图在北太天元中,除了plot3函数可用于绘制三维图形外,还有一些函数可以用来绘制三维网格图和曲面图。下面分别介绍这些函数。1.  三维网格图mesh函数用于绘制三维网格图,其调用语法如下。mesh(X,Y,Z): 创建一个网格图,该网格图为三维曲面,有实色边颜色,无面颜色。该函数将矩阵 Z 中的值绘制为由 X 和 Y 定义的 x-y 平面中的网格上方的高度。边颜色因 Z 指定的高度而异。mesh(Z): 创建一个网格图,并将 Z 中元素的列索引和行索引用作 x 坐标和 y坐标。mesh(Z,C): 进一步指定边的颜色。mesh(___,C): 进一步指定边的颜色。mesh(ax,___): 将图形绘制到 ax 指定的坐标区中,而不是当前坐标区中。指定坐标区作为第一个输入参数。mesh(___,Name,Value): 使用一个或多个名称-值对组参数指定曲面属性。例如,'FaceAlpha',0.5 创建半透明网格图。2.  三维曲面图函数surf用来绘制三维表面图形,其调用语法如下。surf(X,Y,Z) 创建一个三维曲面图,它是一个具有实色边和实色面的三维曲面。该函数将矩阵 Z 中的值绘制为由 X 和 Y 定义的 x-y 平面中的网格上方的高度。曲面的颜色根据 Z 指定的高度而变化。surf(Z) 创建一个曲面图,并将 Z 中元素的列索引和行索引用作 x 坐标和 y 坐标。

探路者 0 1 2022-12-21

求助,绘图问题

请问for循环里用figure画图的时候,下一张图会把上一张覆盖?

匿名 2 1 2022-11-25

无法对图像进行放大缩小或者旋转该怎么操作使图形变换

绘制三维图完成后,在Figure操作界面无法对图像进行放大缩小或者旋转,选取不了合适的分析角度该怎么办?

SWHNF 1 0 2022-11-11