MATLAB | R2024a更新了哪些好玩的东西?

news2024/11/15 8:00:07

Hey 好久不见,大家一看三月中下旬这个时间节点也应该能猜到这篇更新什么内容,没错MATLAB R2024a正式版发布啦啦拉拉,直接来看看有啥我认为比较有意思的更新点吧:

1 极坐标表达式绘制

将会使用使用fpolarplot函数来替换ezpolar

f = @(t) 1 + cos(t);
fpolarplot(f)
% fpolarplot(f,LineWidth=2)


2 极坐标填充区域

使用thetaregionradiusregionpolarregion函数。填充区域用于高亮显示绘图:

f = @(t) 1 + cos(t);
fpolarplot(f,LineWidth=2)

% 极坐标半径填充
radiusregion([0.5,1],'FaceColor','b')

% 极坐标角度填充
thetaregion([pi/6,pi/3]+pi,'FaceColor','g')

% 极坐标区域填充
thetas = [0 pi/2];
radii = [1.5 2];
polarregion(thetas,radii,'FaceColor','r')


3 线条样式

可以使用linestyleorder函数设置线条样式的出现规律:

Y = (10:15)'-(0:5);
tiledlayout(2,1)
ax1 = nexttile;
plot(ax1,Y,LineWidth=1)
ax2 = nexttile;
plot(ax2,Y,LineWidth=1)

% 设置坐标区域1线条样式
linestyles1 = ["-","--","-o"];
linestyleorder(ax1, linestyles1)
% 设置坐标区域2线条样式
linestyles2 = ["-s","-.","->"];
linestyleorder(ax2, linestyles2)


4 RGB和16进制颜色转换

rgb2hexhex2rgb

RGB = [0.60 0.30 0.80];
rgb2hex(RGB)
% ans = 
% "#994DCC"

hexStr = "#CD00EF";
hex2rgb(hexStr)
% ans = 1×3
%    0.8039         0    0.9373

当然我很久很久以前写过类似的东西:

function string=ten2sixteen(num)
%the num should be a 1x3 Integer mat limited in [0 255]
exchange_list={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
string='#';
for i=1:3
    temp_num=num(i);
    string(1+i*2-1)=exchange_list{(temp_num-mod(temp_num,16))/16+1};
    string(1+i*2)=exchange_list{mod(temp_num,16)+1};
end
end

% ten2sixteen([20,30,255])
% ans =
%    '#141EFF'

function num=sixteen2ten(string)
    exchange_list='0123456789ABCDEF#';
    num=zeros(1,3);
    for i=1:3
        tempCoe1=find(exchange_list==string(i*2))-1;
        tempCoe2=find(exchange_list==string(i*2+1))-1;
        num(i)=16*tempCoe1+tempCoe2;
    end
end

% sixteen2ten('#26FF06')
% ans =
%     38   255     6

5 图例及矩形透明度

您可以控制图例框和矩形的透明度:

  • 通过设置BackgroundAlpha的属性,将图例对象透明度设置为介于0(完全透明)和 1(不透明)
  • 通过设置FaceAlpha的属性,将矩形对象透明度设置为介于0和1 .

说来有趣,之前参加迷你黑客大赛后,官方Graphics Team询问有没有想要分享的技巧:

我就分享了关于实现圆角半透明图例的知乎文章:

  • https://zhuanlan.zhihu.com/p/642487014

然后比较巧的是,官方团队正好也打算在R2024a版本发布这个功能,属于正巧撞上了:

X=1:2;
Y=(1:2)+(1:6)';
plot(X,Y,'LineWidth',8);

legend('BackgroundAlpha',.5)

展示一下我之前写的功能函数和效果:

function SPrettyLegend(lgd)
% Semitransparent rounded rectangle legend
% Copyright (c) 2023, Zhaoxu Liu / slandarer
% -------------------------------------------------------------------------
% Zhaoxu Liu / slandarer (2023). pretty legend 
% (https://www.mathworks.com/matlabcentral/fileexchange/132128-pretty-legend), 
% MATLAB Central File Exchange. 检索来源 2023/7/9.
% =========================================================================
if nargin<1
    ax = gca;
    lgd = get(ax,'Legend');
end
pause(1e-6)
Ratio = .1;
t1 = linspace(0,pi/2,4); t1 = t1([1,2,2,3,3,4]);
t2 = linspace(pi/2,pi,4); t2 = t2([1,2,2,3,3,4]);
t3 = linspace(pi,3*pi/2,4); t3 = t3([1,2,2,3,3,4]);
t4 = linspace(3*pi/2,2*pi,4); t4 = t4([1,2,2,3,3,4]);
XX = [1,1,1-Ratio+cos(t1).*Ratio,1-Ratio,Ratio,Ratio+cos(t2).*Ratio,...
    0,0,Ratio+cos(t3).*Ratio,Ratio,1-Ratio,1-Ratio+cos(t4).*Ratio];
YY = [Ratio,1-Ratio,1-Ratio+sin(t1).*Ratio,1,1,1-Ratio+sin(t2).*Ratio,...
    1-Ratio,Ratio,Ratio+sin(t3).*Ratio,0,0,Ratio+sin(t4).*Ratio];
% 圆角边框(border-radius)
oriBoxEdgeHdl = lgd.BoxEdge;
newBoxEdgeHdl = matlab.graphics.primitive.world.LineStrip();
newBoxEdgeHdl.AlignVertexCenters = 'off';
newBoxEdgeHdl.Layer = 'front';
newBoxEdgeHdl.ColorBinding = 'object';
newBoxEdgeHdl.LineWidth = 1;
newBoxEdgeHdl.LineJoin = 'miter';
newBoxEdgeHdl.WideLineRenderingHint = 'software';
newBoxEdgeHdl.ColorData = uint8([38;38;38;0]);
newBoxEdgeHdl.VertexData = single([XX;YY;XX.*0]);
newBoxEdgeHdl.Parent=oriBoxEdgeHdl.Parent;
oriBoxEdgeHdl.Visible='off';
% 半透明圆角背景(Semitransparent rounded background)
oriBoxFaceHdl = lgd.BoxFace;
newBoxFaceHdl = matlab.graphics.primitive.world.TriangleStrip();
Ind = [1:(length(XX)-1);ones(1,length(XX)-1).*(length(XX)+1);2:length(XX)];
Ind = Ind(:).';
newBoxFaceHdl.PickableParts = 'all';
newBoxFaceHdl.Layer = 'back';
newBoxFaceHdl.ColorBinding = 'object';
newBoxFaceHdl.ColorType = 'truecoloralpha';
newBoxFaceHdl.ColorData = uint8(255*[1;1;1;.6]);
newBoxFaceHdl.VertexData = single([XX,.5;YY,.5;XX.*0,0]);
newBoxFaceHdl.VertexIndices = uint32(Ind);
newBoxFaceHdl.Parent = oriBoxFaceHdl.Parent;
oriBoxFaceHdl.Visible = 'off';
end

使用效果

clc; clear; close all
rng(12)
% 生成随机点(Generate random points)
mu = [2 3; 6 7; 8 9];
S  = cat(3,[1 0; 0 2],[1 0; 0 2],[1 0; 0 1]);
r1 = abs(mvnrnd(mu(1,:),S(:,:,1),100));
r2 = abs(mvnrnd(mu(2,:),S(:,:,2),100));
r3 = abs(mvnrnd(mu(3,:),S(:,:,3),100));
% 绘制散点图(Draw scatter chart)
hold on
propCell = {'LineWidth',1.2,'MarkerEdgeColor',[.3,.3,.3],'SizeData',60};
scatter(r1(:,1),r1(:,2),'filled','CData',[0.40 0.76 0.60],propCell{:});
scatter(r2(:,1),r2(:,2),'filled','CData',[0.99 0.55 0.38],propCell{:});
scatter(r3(:,1),r3(:,2),'filled','CData',[0.55 0.63 0.80],propCell{:});
% 增添图例(Draw legend)
lgd = legend('scatter1','scatter2','scatter3');
lgd.Location = 'northwest';
lgd.FontSize = 14;
% 坐标区域基础修饰(Axes basic decoration)
ax=gca; grid on
ax.FontName   = 'Cambria';
ax.Color      = [0.9,0.9,0.9];
ax.Box        = 'off';
ax.TickDir    = 'out';
ax.GridColor  = [1 1 1];
ax.GridAlpha  = 1;
ax.LineWidth  = 1;
ax.XColor     = [0.2,0.2,0.2];
ax.YColor     = [0.2,0.2,0.2];
ax.TickLength = [0.015 0.025];
% 隐藏轴线(Hide XY-Ruler)
pause(1e-6)
ax.XRuler.Axle.LineStyle = 'none';
ax.YRuler.Axle.LineStyle = 'none';

SPrettyLegend(lgd)


6 常量线和常值区域层级

可以调节常量线(使用xline或者yline创造的对象),以及常值区域(使用xregion和yregion创建的对象)的层次(位于顶层还是底层):

plot([-5,5],[0,5],'LineWidth',5)
xr = xregion([-2 1],[-1 2],'FaceAlpha',1);
xr(1).Layer = "top";


7 柱状图组间距

设置GroupWidth属性设置柱状图组间距:

y = [2 2 3; 2 5 6; 2 8 9; 2 11 12];

subplot(3,1,1)
bar(y,'GroupWidth',.2)
title('GroupWidth=0.2')

subplot(3,1,2)
bar(y,'GroupWidth',.6)
title('GroupWidth=0.6')

subplot(3,1,3)
bar(y,'GroupWidth',1)
title('GroupWidth=1')


8 甜甜圈图标签格式

有六种甜甜圈图标签格式,同时可以设置中心标签:

Bakers = ["Betty","Abby","Afiq","Ravi","Dave"];
Sales = [20 51.55 49.37 20.35 48.25];
subplot(1,2,1)
donutchart(Sales,Bakers,'LabelStyle','namepercent','CenterLabel','Slandarer');

subplot(1,2,2)
donutchart(Sales,Bakers,'LabelStyle','namedata');


9 图像导出函数升级

在调用exportgraphics函数时

使用以下名称值参数控制图像导出:

  • Width,Height-指定输出的宽度和高度。
  • Padding-指定图形周长周围的填充量。
  • Units-指定宽度、高度和填充值的单位。
  • PreserveAspectRatio-指定是否自动添加填充以保留原始纵横比,如果宽度和高度值与图形的原始纵横比冲突。

详情请见:

  • https://www.mathworks.com/help/releases/R2024a/matlab/ref/exportgraphics.html

10 颜色选择器置于App窗口上

fig = uifigure;
c = uicolorpicker(fig);


11 App单选按钮HTML及tex

设置Interpreter属性,比如显示公式:

fig = uifigure('Position',[680 678 398 271]);
bg = uibuttongroup(fig,'Position',[137 113 123 85]);  


rb1 = uiradiobutton(bg,'Position',[10 60 91 15],'Interpreter','tex');
rb2 = uiradiobutton(bg,'Position',[10 38 91 15],'Interpreter','tex');

rb1.Text = 'sin(\pi)';
rb2.Text = 'x^2';


12 具有下拉表的表格

fig = uifigure;
cnames = categorical({'Blue';'Red'},{'Blue','Red'});
w = [400; 700];
tdata = table(cnames,w,'VariableNames',{'Color','Wavelength'});
uit = uitable(fig,'Data',tdata,'ColumnEditable',true);


13 在脚本和实时脚本中的任意位置定义函数

以前函数只能定义在脚本末尾,现在可以定义在任意位置了:


14 初始矩阵创建

使用createArray函数几乎可以创建任意类型的矩阵,比如:

p = uint8(7 + 3i)
% p = uint8
%    7 +   3i
X = createArray(3,Like=p)
% X = 3×3 uint8 矩阵
%    0 +   0i   0 +   0i   0 +   0i
%    0 +   0i   0 +   0i   0 +   0i
%    0 +   0i   0 +   0i   0 +   0i

P = createArray(3,FillValue=single(pi))
% P = 3x3 single matrix
%     3.1416    3.1416    3.1416
%     3.1416    3.1416    3.1416
%     3.1416    3.1416    3.1416

这个函数的使用方式比较复杂,详情请见:

  • https://www.mathworks.com/help/releases/R2024a/matlab/ref/createarray.html

15 局部最值获取

通过islocalmin2islocalmax2获取局部最值,例如:

A = -peaks;
contour(A,'LineWidth',2)
colorbar

% 获取最小值位置
TF = islocalmin2(A);
minval = A(TF);
[X,Y] = meshgrid(1:49,1:49);
hold on
plot3(X(TF),Y(TF),minval,"red.",MarkerSize=22)



16 实时编辑器运行python代码


这期的更新远远不止上面提到的那些,还有很多更新,但是篇幅有限,这里便不再一一提及,其他更新比如数学方面更新了求解N维数组的伪逆以及线性方程组的最小范数最小二乘解,ui控件比如App designer可以和simulink交互了,此外还有无数的效率提高,比如读取大型JPEG图像比上一版本快1.5倍,生成一个大JPEG图像比上一版本快1.6倍,提高了各种数据格式解析的能力。

除了MATLAB本体外,主要对以下六个工具箱进行了更新,请自行查看:

  • Computer Vision Toolbox
  • Deep Learning Toolbox
  • GPU Coder
  • Instrument Control Toolbox
  • Satellite Communications Toolbox
  • UAV Toolbox

更多更新内容请见:

  • https://www.mathworks.com/products/new_products/latest_features.html
  • https://www.mathworks.com/help/releases/R2024a/matlab/release-notes.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1534916.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索数据结构:顺序栈与链式栈的原理、实现与应用

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 栈的定义 栈简单来说就是一种只允许在一端进行操作(插入与删除&…

将OpenCV与gdb驱动的IDE结合使用

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV4.9.0开源计算机视觉库在 Linux 中安装 下一篇&#xff1a;将OpenCV与gcc和CMake结合使用 ​ 能力 这个漂亮的打印机可以显示元素类型、、标志is_continuous和is_subm…

【论文阅读】基于多特征融合的智能合约缺陷检测方法

摘要&#xff1a; 1、预处理&#xff1a;颜色标记、词汇提取、字符转换、合约之间的继承关系的提取 2、 使用融合模型进行特征提取&#xff08;BERT、CNN、BiLSTM&#xff09; 3、使用node2vec随机游走算法&#xff0c;将合约之间的继承关系作为输入得到合约关系的特征向量。 4…

通过 Socket 手动实现 HTTP 协议

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

如何让uni-app开发的H5页面顶部原生标题和小程序的顶部标题不一致?

如何让标题1和标题2不一样&#xff1f; 修改根目录下的App.vue&#xff08;核心代码如下&#xff09; <script>export default {onLaunch() {// 监听各种跳转----------------------------------------[navigateTo, redirectTo, reLaunch, switchTab, navigateBack, ].…

[论文笔记] ChatDev:Communicative Agents for Software Development

Communicative Agents for Software Development&#xff08;大模型驱动的全流程自动化软件开发框架&#xff09; 会议arxiv 2023作者Chen Qian Xin Cong Wei Liu Cheng Yang团队Tsinghua University论文地址https://arxiv.org/pdf/2307.07924.pdf代码地址https://github.com/O…

HTML_CSS学习:表格、表单、框架标签

一、表格_跨行与跨列 1.相关代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>表格_跨行与跨列</title> </head> <body><table border"1" cellspacing"0&qu…

(一)基于IDEA的JAVA基础4

注释文本&#xff0c;注释模版 单行注释://开头放在代码前面&#xff0c;对少部分。 多行注释:快捷方式ctrlshift/,对段落代码注 释。 文档注释:/**……**/&#xff0c;用于声明作者或创作时 间。 文档注释如何设置&#xff0c;首先找到File中…

【前端Vue】Vue3+Pinia小兔鲜电商项目第2篇:什么是pinia,1. 创建空Vue项目【附代码文档】

全套笔记资料代码移步&#xff1a; 前往gitee仓库查看 感兴趣的小伙伴可以自取哦&#xff0c;欢迎大家点赞转发~ 全套教程部分目录&#xff1a; 部分文件图片&#xff1a; 什么是pinia Pinia 是 Vue 的专属状态管理库&#xff0c;可以实现跨组件或页面共享状态&#xff0c;是…

html5cssjs代码 033 SVG元素示例

html5&css&js代码 033 SVG元素示例 一、代码二、解释 一个SVG图形&#xff0c;该图形由一个椭圆、一个圆形和一个矩形组成。 一、代码 <!DOCTYPE html> <html lang"zh-cn"> <head><title>编程笔记 html5&css&js SVG元素示例…

公司系统中了.rmallox勒索病毒如何恢复数据?

早晨上班时刻&#xff1a; 当阳光逐渐洒满大地&#xff0c;城市的喧嚣开始涌动&#xff0c;某公司的员工们纷纷踏入办公大楼&#xff0c;准备开始新的一天的工作。他们像往常一样打开电脑&#xff0c;准备接收邮件、查看日程、浏览项目进展。 病毒悄然发作&#xff1a; 就在员…

Databend x CubeFS:面向未来的企业级云原生数据存储与分析

用场景的丰富&#xff0c;企业面临着前所未有的数据存储挑战。大规模数据存储变得日常化&#xff0c;伴随着超大容量和快速变化的I/O需求&#xff0c;传统的存储解决方案已经难以满足企业对弹性、运维效率及总体拥有成本&#xff08;TCO&#xff09;的更高要求。这些挑战促使基…

三角形重心坐标插值法 Interpolation Across Triangles: Barycentric Coordinates

本专栏内容整理了GAMES101的计算机图形学课程的主要内容&#xff0c;作为我学习计算机图形学的一份复习备份或叫做笔记。内容中如有错误&#xff0c;或有其他建议&#xff0c;欢迎大家指出。 附上GAMES101计算机图形学课程&#xff1a;GAMES101: 现代计算机图形学入门正在上传…

Django日志(二)

一、Handler Handler决定如何处理logger中的每条消息。它表示一个特定的日志行为,例如 将消息写入屏幕、文件或网络Socket handler对应的是个字典,每一个键都是一个handler的名字,每个值又一个字典,描述了如何配置对应的handler实例 2.1、内置Handler class(必需):处理…

【每日八股】Java基础经典面试题4

前言&#xff1a;哈喽大家好&#xff0c;我是黑洞晓威&#xff0c;25届毕业生&#xff0c;正在为即将到来的秋招做准备。本篇将记录学习过程中经常出现的知识点以及自己学习薄弱的地方进行总结&#x1f970;。 本篇文章记录的Java基础面试题&#xff0c;如果你也在复习的话不妨…

Scikit-Learn逻辑回归(二)

Scikit-Learn逻辑回归二&#xff1a;多项式与正则化 1、多项式回归回顾1.1、逻辑回归为什么要使用多项式1.2、多项式回归及原理 2、逻辑回归与多项式 1、多项式回归回顾 本文接上篇&#xff1a;Scikit-Learn逻辑回归(一) 上篇中&#xff0c;我们详细介绍了逻辑回归的概念、原理…

第六十一回 放冷箭燕青救主 劫法场石秀跳楼-编译安装飞桨paddlepaddle@openKylin+RISCV

卢俊义在水里被张顺抓住&#xff0c;用轿子抬到了梁山。宋江等人下马跪在地上迎接&#xff0c;请他坐第一把交椅。卢俊义宁死不从&#xff0c;大家只好说留他在山寨几天&#xff0c;先让李固带着马车货物回去。吴用对李固说&#xff0c;你的主人已经答应坐第二把交椅了&#xf…

matlab实现Logistic回归

一、目的和要求 1.编程实现Logistic Regression并应用于数据集&#xff1b; 2.绘制二元分类函数、sigmoid函数和代价函数&#xff1b; 3.正则化logistic回归代价。 二、算法介绍 步骤&#xff1a; 选择一个合适的分类函数来实现分类&#xff08;Sigmoid函数&#xff09; …

OpenHarmony开发之图形UI组件解析

简介 图形UI组件实现了一套系统级的图形引擎。 该组件为应用开发提供UIKit接口&#xff0c;包括了动画、布局、图形转换、事件处理&#xff0c;以及丰富的UI组件。 组件内部直接调用HAL接口&#xff0c;或者使用WMS(Window Manager Service)提供的客户端与硬件交互&#xff…

[flask] flask的基本介绍、flask快速搭建项目并运行

笔记 Flask Flask 本身相当于一个内核&#xff0c;其他几乎所有的功能都要用到扩展&#xff08;邮件扩展Flask-Mail&#xff0c;用户认证Flask-Login&#xff0c;数据库Flask-SQLAlchemy&#xff09;&#xff0c;都需要用第三方的扩展来实现。比如可以用 Flask 扩展加入ORM、…