我正在使用MATLAB来对图像进行修改. 我已经在MATLAB上加载了图像. (图像可能处于不同的分辨率) 将图像转换为灰度,然后将图像的矩阵转换为双重. 我在图像上绘制了网格线 (我已经发布了代码如何在堆栈上的某个地方进行操作). 我的问题是,我可能是由于在X轴和Y轴上盖上图像而导致的1000正方形. 我想编号该图像中的正方形. 是否可以在MATLAB上绘制数字? 我很高兴收到有关此信息的任何信息(除了点击猴子并在Paint Haha上写0到1000. 欢呼 S 解决方案 这是一个代码示例,可以将文本标签放在网格中间的图像上: x = imread('cameraman.tif'); image(x) axis image grid on %# grid domains xg = 0:50:200; yg = 0:50:200; %# label coordinates [xlbl, ylbl] = meshgrid(xg+25, yg+25
以下是关于 matlab-figure 的编程技术问答
我正在MATLAB中构建数据分析平台.系统的功能之一需要创建许多图.在任何给定时间,只有一个图可用,用户可以应要求遍历下一个/上一个/上一个图(这里的重点是不需要打开多个窗口). 最初,我每次显示新的绘图时都使用figure命令,但是我注意到,随着用户遍历下一个绘图的用户,此命令花费的时间比我想要的时间更长.降解可用性.因此,我尝试使用subplot,并且效果更快. 看到这种行为,我进行了一些实验,同时进行了时间.第一次运行figure大约需要0.3秒,subplot需要0.1秒. figure的平均运行时间为0.06秒,标准偏差为0.05,而subplot仅占0.002,标准偏差为0.001.看来subplot是一个更快的数量级. 问题是:在任何给定时间只能使用一个窗口时,是否有任何理由使用图形? 通常,使用"子图"会丢失任何值? (即使您只能只能一次). 也可以进行类似的考虑. 解决方案 axes 对象包含一些方便的定位选项. 轴对象始终
我有数百个文本文件需要作为单个矩阵导入,但是每个文本文件都有6行垃圾标头,我想忽略/删除.文本文件被划定.我只需要从第7行开始以唯一的矩阵将每个文件导入.每个文件中有149列,长度为400-1500行.这个怎么做?我还将如何将每个文件的第5列绘制到同一绘图上? 这是我目前正在尝试进行工作的方法: txtfiles = dir('*.txt'); numfiles = length(txtfiles); for k = 1:numfiles %textscan(txtfiles(k).name) curname = txtfiles(k).name; FID=fopen(curname); datacell = textscan(FID, 'f%f%f%f', ... 'HeaderLines', 6, 'CollectOutput', 1); fclose(FID); A = datacell{1}; end 这就是
当我将饼图保存为PDF时,PDF的白线未知.为了简化问题,我将代码修改为最通用的形式,如以下内容. clc; h=pie(1); %set the pie chart color to black h(1).FaceColor = 'k'; 我选择使用黑色的原因是白线与黑色背景最大的对比.请参阅所附的PDF图. 我还找到了一个类似的线程,在此链接上具有相同的问题:我的系统配置:MacOS Sierra版本10.12. MATLAB R2016B. 欢迎任何输入.谢谢. 解决方案 我发现添加了其中的任何一个,在您致电pie等之后,请注意问题: set(gcf,'renderermode','manual'); set(gcf,'renderer','opengl'); set(gcf,'renderer','opengl','renderermode','manual'); 这很奇怪,因为如果您尝试get(gcf,'renderer')它将显示
我想将MATLAB图作为PDF保存,质量300 dpi ,并以中心为中心. 到目前为止,我设法保存了它,但是图像似乎裁剪了.我将页面类型更改为 a3 我正在寻找更优雅的东西.我是从GUI进行的,但是在MATLAB中,从命令行开始更容易. 是否有任何包装或脚本使此(出版物和论文的基本任务)更容易? 解决方案 尝试使用以下命令: print -painters -dpdf -r300 test.pdf 当然,您已经必须在当前目录中拥有一个名为test.pdf的文件. 以及 - 命令上的一些笔记. -painter:这指定了画家的使用用于导出. -dpdf:指定矢量图像,在这种情况下是PDF.这是通过Ghostscript. -R300:指定300 DPI分辨率. -r400将为400 dpi等. 在关闭注释中.我倾向于将图作为高DPI TIFF图像保存,并将该图将其导入另一个程序中,我实际上将我的图形组装为纸张.我倾向于亲自倾向于Core
我有一个带有x,y,c坐标的补丁,如下所示.在更改点的顺序后,MATLAB的patch颜色插值会发生变化. x = [0.9000 1.0000 1.0000 0.9000]'; y = [0.5000 0.5000 0.6000 0.6000]'; c = [0.0278 0.0371 0.0325 0.0282]'; figure(); patch(x,y,c); order = [2:4,1]; figure(); patch(x(order),y(order),c(order)); 以上产生两个不同的颜色贴片.但是,坐标和颜色仅以循环方式改变了序列. 有什么建议要克服这一点? 解决方案 我认为这是因为您没有关闭补丁 - 如果补丁中的最后一点与第一点不同,MATLAB会自动关闭它.显然,这对颜色插值有很奇怪的事情.如果您稍微修改代码,以便关闭补丁,例如: figure; order = [1:4,1]; pa
将2个给定的图像放入一个图像中,左侧有image1(行人),在一个图像中将image2(noparking)放在一个图像上.显示组合的单图像. 代码1: - z = imread('NO_PARKING.jpg'); x = imread('PEDESTRIAN.jpg'); r = imresize(z,[500,500]); c = cat(2,x,r); imshow(c) 代码2: - [X1,map1]=imread('PEDESTRIAN.jpg'); [X2,map2]=imread('NO_PARKING.jpg'); subplot(1,2,1), imshow(X1,map1) subplot(1,2,2), imshow(X2,map2) 以上哪个代码正确? 解决方案 这两个代码不做同样的事情,因此这不是效率的问题.一个将两个图像结合到一个图像中,然后显示一个图像,一个图像仅在一个图中显示两个图像. 如果您真的想
当涉及哪个渲染器用于MATLAB数字或重要时,我毫无头绪 plot(0,0,'ko','markersize',50,'linewidth',8); set(gcf,'renderer','opengl'); set(gcf,'renderer','painters'); left = OpenGL,右=画家: (运行Windows 7 Professional和Matlab R2015B) 是否有时间使用OpenGL渲染器会产生比画家更好的结果?通常,两个渲染器有何不同? 解决方案 这些是我所知道的 的差异 openGl是默认渲染器 OpenGL允许绘制透明度,而画家则不 如果使用OpenGL或Matlab崩溃时有图形错误,请使用Painter 选择画家以后记格式导出数字.使用OpenGL 当图太复杂时,MATLAB保存为位图,而您无法编辑. 来自 netroll "> scroll "> scroll polloperty_d119e2839
我正在为饼图使用一个简单的脚本,但是我无法更改饼标签的字体大小.有什么简单的改变它吗? 以下是我的绘图代码: h = pie ([0.1,0.1,0.1,0.1,0.1], {"unlikely","possible","likely","very likely","certain"}); y = 0; n = 1; colormap([1 1 n; %// unlikely 1 1 y; %// possible 1 1 y; %// likely 1 1 y; %// very unlikely 1 1 n;]) %// certainly ax = gca(); set(ax,'fontsize', 18); view([270, -90]) 解决方案 变量h包含一个与5 Text对象交织在一起的五个Patch对象.使用以下命令为文本对象设置所有字体大小
如何将图像的RGB直方图转换为创建直方图,显示组合颜色以及正确的颜色波长范围? 示例代码: pkg load image f=imread('/tmp/marbles.jpg'); f=uint8(f); %need to convert back to uint8 to show picture %Split into RGB Channels f_red = f(:,:,1); f_green = f(:,:,2); f_blue = f(:,:,3); %Get histValues for each channel [y_f_red, x] = imhist(f_red); [y_f_green, x] = imhist(f_green); [y_f_blue, x] = imhist(f_blue); subplot (2,1,1); imshow(f); subplot (2,1,2); plot(x, y_f_red, 'r', x, y_f_green,
我在矩阵中具有一组数据.我想绘制集合,然后使用键盘输入移至另一个.这可能是这样的: for t=1:N plot(data(:,t)) pause end ,但我想在时间t(例如使用箭头)中向前和向后移动.好的,可以这样完成: direction = input('Forward or backward?','s') if direction=='forward' plot(data(:,ii+1)) else plot(data(:,ii-1)) end 但是没有更优雅的东西吗? (一点击而不获得视线的数字 - 这是一个很大的sreen图.) 解决方案 您可以使用鼠标点击与 ginput ginput .您可以做的是将代码放入while循环中,然后等待用户单击屏幕上的某个地方. ginput暂停,直到发生了一些用户输入为止.这必须在图屏幕上完成.完成后,检查以下按下哪个键,然后采取相应的行动.左键单击意味着您将绘制下一组数据,而右键单击将
我需要制作一个可以在MATLAB中重新打开的.fig文件,但我正在八度使用.但是显然没有octave:3> plot([1,2,3],[45,23,10]) octave:4> saveas(gcf,'myfig.fig') error: `saveas' undefined near line 4 column 1 octave:4> 解决方案 当前MATLAB无花果文件格式是专有的二进制文件格式. 八度不知道如何导出此格式,并且在经过逆向工程之前将无法实现.八度所知道的无花线格式是Xfig使用相同扩展名的另一种无花果格式,但没有其他共同点. 要将绘图导出到八格中的其他格式,请使用print命令e.g print -deps myplot.eps或print -dpng myplot.png. 当然,这不能让您打开MATLAB中编辑的绘图,尽管您可以使用imread. 打开图像 有一个项目可以读取 here 但是相关的.m文件似乎并未成功存档. 如果
我正在尝试将颜色图像从RGB转换为HSV(进行更改),然后返回RGB.作为一个测试,我制作了此代码只是为了测试如何从RGB到HSV回到RGB,但是当我查看图像时,它只是显示为黑色.我想念什么? *ps我使用的是八度的3.8.1 Here are the octave 3.8.1 packages I have loaded: >>> pkg list Package Name | Version | Installation directory --------------+---------+----------------------- control *| 2.6.2 | /usr/share/octave/packages/control-2.6.2 general *| 1.3.4 | /usr/share/octave/packages/general-1.3.4 geometry *| 1.7.0 | /usr/share/
matlab提供听众允许我们跟踪对象属性的变化并对其进行行动.例如,我们可以创建一个非常简单的侦听器,该侦听器将在命令窗口中显示一条消息时,当 axes 对象已更改: % Example using axes ax = axes(); addlistener(ax, 'YLim', 'PostSet', @(src, evnt)disp('YLim changed')); 尝试平移轴或放大进出,看看会发生什么.这很好. 我需要做同样的事情,但是使用不幸的是,看来我们不允许这样做.尝试运行以下示例: % Example using uiaxes ax = uiaxes(); addlistener(ax, 'YLim', 'PostSet', @(src, evnt)disp('YLim changed')); 它引发了此错误: 使用matlab.ui.control.uiaxes/addlistener添加时错误 PostSet听众,属性'ylim'in
我试图将变量放入绘图标题中,但我无法制作4个小数点的格式.如何避免标题中的浮动格式? 这是我使用的代码 subplot(3,2,1); hist(X,10); str=sprintf('X N=%d,Y=%d',N,Y) M=sum(X)/N Mean=sprintf('Mean=%0.4d',M) title({str,Mean}) 解决方案 您需要使用%f作为 float值的格式指定.更改您的代码 Mean=sprintf('Mean=%0.4d',M) to Mean=sprintf('Mean=%0.4f',M) 将打印M具有4个小数的准确度.如果要打印M没有任何小数位置,则需要使用%.0f Mean=sprintf('Mean=%.0f',M) %.0f将用0个小数位置打印double或float值,就像用%d打印整数一样. . 如果您的变量X具有N元素,而不是使用内置的matlab函数 mean() 将产生与sum(X) /
我正在挣扎着要使用循环的情节. 我知道它在循环后添加时(只是一个简单的绘图).但是我想以这种方式尝试. fib = ones(1:10); for k=3:10 hold on fib(k) = fib(k-1) + fib(k-2); plot(k,fib(k)) end hold off 输出是一个图,但没有可见的点. 解决方案 您需要指定标记.文档说: 如果X或Y之一是标量,另一个是标量或向量,则绘图函数绘制离散点.但是,要查看要点,您必须指定标记符号,例如plot(X,Y,'o') 所以是: plot(k,fib(k),'o'); 还要注意,您正在创建一个使用fib = ones(1:10);的10维数组.您很可能打算在1到10之间写逗号而不是结肠来创建一个行矢量.即. fib = ones(1,10); 或列向量为 hanshirse 建议:: fib = ones(10,1);
我正在尝试将面积遮挡在恒定水平线上方.水平线上方表示前10%的数据(即,我的90%的数据低于水平线).我使用了该功能(曲线相交)要找到水平线与我的数据相交的开始和结尾.但是,我无法弄清楚如何绘制水平线上方的区域,并受到曲线的约束.有人知道如何在MATLAB中执行此操作吗?我尝试的一个例子在附带的数字中提供了一个例子.谢谢! 图. 1:黑线是我的水平恒定线.红色圆圈代表" CurveDintersect"的起点和终点.我试图绘制数据以填充红线,但它捕获了10%线以下的数据. 图. 2.我也试图使用填充功能,但同样,我正在捕获蓝色曲线外的数据. 与图2相关的示例代码从此处采用(mask = y2 > y1; %find where blue curve is greater than the horizontal 90th % line fx = [x(mask), fliplr(x(mask))]; fy = [y1(mask), fliplr(y2(mask))]; h
我正在MATLAB中产生一些数字,并尝试将它们插入乳胶.但是,当我这样做时,它们通常没有相同的尺寸(尽管我正在使用相同的设置来生产它们). 例如: 我目前正在使用的MATLAB代码是 lsize = 16; % Label fontsize nsize = 16; % Axis fontsize q=randn(100,1000); a1=linspace(1,1000,1000); b1=linspace(2,2000,1000); figure (1) histogram(q) xlabel('Time [sec]','Fontsize', lsize) ylabel('W_{kin} [keV]','Fontsize', lsize) set(gca, 'Fontsize', nsize) set(gcf,'paperpositionmode','auto'); set(gcf,'windowstyle','normal'); set(gca,'Lo
1D系统的绘制分叉图很明确,但是如果我在以下形式上有2D系统 dx/dt=f(x,y,r), dy/dt=g(x,y,r) 我想在x与r的matlab中生成一个分叉图. 这样做的主要想法是什么或可以帮助我的任何提示? 解决方案 您首先必须进行一些数学: 将每个函数设置为零,可以将两个函数y(x)(称为nullclines),您可以在相图中绘制它们.其中两条线相交是系统的定点(平衡). 现在,您必须采用系统的雅各布式,并插入每个固定点,这将为您提供系统的线性稳定性分析. 现在可以将固定点的位置和每个点的稳定性计算为y yary r(分叉参数). 用于编程: 态 - eig 将帮助您找到系统的特征值. 但是 这取决于您的系统. 如果您应该寻找极限周期或混乱之类的东西,则必须使用其中一个ode求解器,然后分析变得更加棘手.我想您可以开发一种Poincare-Bendixson算法,但这将涉及,细节将取决于您的系统. 其他解决方案
我正在模拟MATLAB中颗粒的运动.我正在使用quiver能够获得他们的运动方向.但是,我只想拥有没有茎的箭头.我无法实现. 我尝试使用以下内容, quiver(x,y,vx,vy,'LineStyle','none','ShowArrowHead','on') 摆脱茎,但箭头也没有出现.有办法解决吗? 解决方案 'LineStyle','none'由于样式既适用于茎和头部,因此都将其设置为none隐藏. 可以通过在Quiver对象的某些无证件属性上进行挖掘来解决.探索Quiver对象的属性(使用struct()),我们可以看到颤抖的图具有NodeChildren属性,并且由4个元素制成 >> hq = quiver(x,y,u,v); >> hq.NodeChildren ans = 4×1 graphics array: ListOfPointsHighlight LineStrip