我正在使用MATLAB脚本来调整机器上的控制系统.调整完成后,我想要一个包含文本的报告(特别是序列号,日期/时间和调整期间确定的值)和图,特别是传递函数.
你推荐什么?
无论我使用什么解决方案都应该与MATLAB编译器兼容,这样我就可以将我的解决方案分发给现场工程师团队.
理想情况下,报告将是PDF文档.
MATLAB报告生成器似乎不是正确的产品,因为看起来我必须将我的脚本分解成小块并将它们嵌入到报告模板中.我的脚本包含用户干预和更改值的机会,或者如果情节看起来不正确则拒绝调整,而我的预感是,如果代码从报告生成器运行,这将很难.此外,如果代码结构由报告模板的要求决定,我担心代码结构和可维护性将会丢失.
如果我的假设是错误的,请评论.
UPDATE
我现在已经切换到使用MATLAB报告生成器和版本r2016b,它对我的编译代码用户非常有效.不幸的是,这意味着拥有MATLAB许可证的同事也需要购买报告生成器,以便使用我的工具编写脚本.
matlab pdf-generation report matlab-deployment matlab-figure
我在标签和图例中渲染希腊字符时遇到问题,所以我想也许切换字体会有所帮助.因此,我发现了一个更大的问题--Matlab似乎根本不尊重我的字体设置.
我当然试过了
set(gcf, 'FontName', 'Ubuntu')
set(gca, 'FontName', 'Ubuntu')
Run Code Online (Sandbox Code Playgroud)
还有像
set(findall(gca, 'type', 'text'), 'FontName', 'Ubuntu')
Run Code Online (Sandbox Code Playgroud)
和
set(0,'DefaultAxesFontName', 'Ubuntu')
Run Code Online (Sandbox Code Playgroud)
我也试过切换渲染器
set(0, 'DefaultFigureRenderer', 'OpenGL') % also tried 'zbuffer' and 'painters'
Run Code Online (Sandbox Code Playgroud)
我甚至进入了图中的属性编辑器,并手动更改了字体.无论我做什么,字体都会出现相同的,丑陋的等宽字体(见下图).此图片使用图中菜单栏中的另存为...命令保存,但是例如print -dpng 'fonttest.png'也不起作用.
我已经fc-list在我的终端和listfontsMatlab命令提示符下仔细检查了Ubuntu字体是否已安装且可用.我正在运行Matlab R2012b.
如何在我的数字中设置字体?
更新:
正如评论中所建议的那样,我试着看看这是否可能是Ubuntu上的Java问题.果然,从OpenJDK切换到Oracle Java有帮助,但还不够 - 我可以使用Helvetica和其他一些,但我不能在我安装的字体中自由选择.例如,Ubuntu字体不起作用.(但是,它确实在Matlab的主GUI中 - 我在菜单等中将字体更改为Ubuntu,在编辑器和命令窗口中将Consolas更改为,并且它呈现正常.)
每当我选择不起作用的数字字体时,Matlab会使用下面屏幕截图中显示的内容作为后备.

的 p,q 而 f 这里确实应该是希腊字母PI,θ和岛(他们正在与规定 \pi 等),但我猜的字体没有这些字符.第三个图的y标签中的奇怪东西是瑞典语 - 它应该不是编码的问题,因为文件保存为UTF-8,这也是 slCharacterEncoding 返回的,所以我假设它也是一种字体问题.
我运行这段代码
A = uint8( ones( 200 ) );
a = [ A * 0 A * 1; ...
A * 2 A * 3 ];
color_map = [ 0 0 0; ...
0.3 0.3 0.3; ...
0.9 0.3 0.1; ...
1 1 1; ...
zeros( 252, 3 ) ];
h = image( a );
colormap( color_map );
Run Code Online (Sandbox Code Playgroud)
然后,我使用datatip功能选择图中的一个点.这使得图中的颜色发生变化.它们仍然具有相同的索引和RBG值,但它们是不同的颜色.然后,我删除了数据提示,颜色恢复到正确的颜色.
使用,
set(gcf, 'Renderer', 'opengl')
Run Code Online (Sandbox Code Playgroud)
使问题消失,但我想知道是否有办法避免这样做?我正在使用MATLAB R2013b.
我试图在Matlab中添加一个包含Latex中符号的图例.当我绘制图形时,图例看起来很好.但是,当我将图形导出为PDF时,图例会将空格放入其中.我不知道为什么会这样.示例代码如下:
set(groot,'defaultLineLineWidth',2,'defaultAxesFontSize',...
12,'defaultAxesFontName','timesnewroman',...
'defaulttextinterpreter','latex')
x0 = 8;
y0 = 5;
width = 5;
height = 4;
kappa1 = 0.1;
kappa2 = 0.5;
f = linspace(0,2*pi,1000);
y1 = sin(f+kappa1*f.^2);
y2 = sin(f+kappa2*f.^2);
figure(1)
hold on
plot(f,y1,'k')
plot(f,y2,'b')
xlabel('Frequency (MHz)')
ylabel('Amplitude')
legend(strcat('\kappa = 0.1 MHz/','\mu','s'),...
strcat('\kappa = 0.5 MHz/','\mu','s'))
grid on;
set(gcf,'units','inches','Position',[x0,y0,width,height],...
'PaperPositionMode','Auto','PaperUnits','Inches',...
'PaperSize',[width, height]);
saveas(gcf,'legendtest.pdf')
Run Code Online (Sandbox Code Playgroud)
将文件另存为PDF时,似乎发生了错误.它保存为JPG就好了.以下是我得到的两张照片.jpg是:
但我得到的PDF是:
我在运行OS 10.12.5的Mac上使用Matlab版本R2017a.在此先感谢您的帮助!
我在matlab中导入了一个图像,在显示之前我如何使图像的背景透明?例如,我在白色背景上有一个红色的球,我如何使图像的白色像素透明,以便只有红色球可见,白色像素是透明的?
这是设置:
我有一个图形的数据图,我试图找到是否可以尝试在图形上放置一个可以移动和改变宽度的框并返回一些值,如曲线下的百分比和面积.它看起来像这样:

有关从哪里开始的任何建议?我的感觉是,使用更多的GUI界面与标准绘图相比,它可能是可行的.
我正在尝试使用MATLAB生成一些计算机生成的全息图.我使用等距网格来初始化空间网格,我得到了下面的图像

除中心区域外,这种模式是我需要的.条纹应该清晰但模糊.我认为这可能是网格的问题.我尝试在极坐标中生成网格,并使用MATLAB pol2cart函数将其映射到笛卡尔坐标.不幸的是,它不起作用.人们可能会建议使用精细网格.它也不起作用.我想如果我能生成一个螺旋网格,也许这个问题是可以解决的.另外,一般来说,螺旋臂的数量可以是任意的,任何人都可以给我一个暗示吗?
我附上了代码(我的最终项目并不完全相同,但它有类似的问题).
clc; clear all; close all;
%% initialization
tic
lambda = 1.55e-6;
k0 = 2*pi/lambda;
c0 = 3e8;
eta0 = 377;
scale = 0.25e-6;
NELEMENTS = 1600;
GoldenRatio = (1+sqrt(5))/2;
g = 2*pi*(1-1/GoldenRatio);
pntsrc = zeros(NELEMENTS, 3);
phisrc = zeros(NELEMENTS, 1);
for idxe = 1:NELEMENTS
pntsrc(idxe, :) = scale*sqrt(idxe)*[cos(idxe*g), sin(idxe*g), 0];
phisrc(idxe) = angle(-sin(idxe*g)+1i*cos(idxe*g));
end
phisrc = 3*phisrc/2; % 3 arms (topological charge ell=3)
%% post processing
sigma = 1;
polfilter = [0, 0, 1i*sigma; 0, …Run Code Online (Sandbox Code Playgroud) 我试图在我的matlab图中包含一个图例,该图使用Latex解释器作为图例文本.
当我设置图例以使用Latex解释器时,文本溢出在图例框外.
我已经尝试调整文本的大小,但无论FontSize如何都会发生这种情况.
以下是我脚本的相关部分:
I = legend([h1 h2 h3],'RainFall Flux', ...
'Temperature term ($$\rho \alpha$$dT)', ...
'Salinity term ($$\rho \beta$$dS)');
c=get(I,'children');
set(c(5),'LineWidth',3); %adjust lineWidth in legend
set(c(2),'LineWidth',3); %adjust lineWidth in legend
set(I,'interpreter','latex'); %set Latex interpreter
set(I,'FontSize',15);
Run Code Online (Sandbox Code Playgroud)
我假设这是因为matlab在使用Latex解释文本后没有考虑正确的字符大小.但是,我不知道如何解决这个问题.
任何见解都将非常感谢!谢谢!
我有一个 for i=1:15.在里面我生成一个变量d=1:0.01:10,它是x'x轴,基于此,我创建了一个连续函数F(d),它有2个唯一变量pitch和yaw.然后我使用不同的颜色在每次递归中使用cmap = hsv(15);.那么它是:
d=1:0.01:10;
cmap = hsv(15);
for i=1:15
pitch = unidrnd(10);
yaw = unidrnd(10);
for j=1:length(d)
F(j) = d(j)*3*pitch*yaw; %// some long calculation here
end
p1 = plot(d,F,'Linewidth', 1.0);
title ('blah blah')
set(p1, 'Color', cmap(i,:));
hold on;
legend (['pitch,yaw:', num2str(pitch) num2str(yaw)])
end
hold off;
Run Code Online (Sandbox Code Playgroud)
此代码更新每次递归中的唯一音高,偏航值(它们之间没有空格,因此它很有刺激性),但未能:
- 使用适当的颜色,如图所示.
- 保持上一次迭代的颜色和值
pitch,yaw.
我有一个看起来像这样的数据集
140400 70.7850 1
140401 70.7923 2
140402 70.7993 3
140403 70.8067 4
140404 70.8139 5
140405 70.8212 3
Run Code Online (Sandbox Code Playgroud)
在第一列对应于时间(数据点之间的一秒间隔)并且将在x轴上的情况下,第二列对应于距离并且将在y轴上.第三列是一个数字(一到五),是运动的资格.
我想制作一个图表,根据前一个数据点的数量改变两点之间的线条颜色.例如,我希望第一个和第二个数据点之间的行为红色,因为限定值为1.
我已经看过很多关于根据强度值制作颜色滑动比例的帖子,但我只想要5种颜色:(红色,橙色,黄色,绿色和蓝色).
我尝试过这样的事情:
plot(x,y,{'r','o','y','g','b'})
Run Code Online (Sandbox Code Playgroud)
但没有运气.
有关如何处理此问题的任何想法?如果可能的话没有循环.