有没有办法使用surf()样式数据格式来创建热图?
我有一堆形式的分散数据z=f(x,y)(所以我曾经TriScatteredInterp使它工作meshgrid),我想z用热图可视化.surf已经做了类似于我想要的事情,除了你必须手动旋转图形以使视图自上而下看XY平面.
基本上,我想要类似的东西:

但冲浪默认情况下会给你这个:

我已经定义了复杂的符号系统:
syms x
sys(x) = ((10+1.*i.*x))/(20+(5.*i.*x)+((10.*i.*x).^2))+((1.*i.*x).^3);
ImaginaryPart = imag(sys)
RealPart = real(sys)
Run Code Online (Sandbox Code Playgroud)
MATLAB返回以下结果:
ImaginaryPart(x) =
- real(x^3) + imag((10 + x*1i)/(- 100*x^2 + x*5i + 20))
RealPart(x) =
- real(x^3) + imag((10 + x*1i)/(- 100*x^2 + x*5i + 20))
Run Code Online (Sandbox Code Playgroud)
现在怎么可能plot(x,sys(x))或plot(x,ImaginaryPart(x))作为一个复杂的表面?
考虑以下MATLAB代码:
C = [ 0 0 0 0 0
0 1 2 1 0
0 2 4 2 0
0 1 2 1 0
0 0 0 0 0 ];
pcolor( C );
shading interp;
axis square
Run Code Online (Sandbox Code Playgroud)
注意,C在90度旋转下是不变的.另请注意以下句子中的帮助pcolor:
使用着色interp,使用C的所有元素,通过四个顶点处的颜色的双线性插值对每个单元进行着色.
但是,绘制的图像如下:
请注意,图像在90度旋转下不是不变的(例如考虑四个角).现在,除非我可怕地误解双线性插值,否则这一定是错的.MATLAB似乎是在三角形上插值,这与双线性插值不同.
有没有办法解决这个MATLAB错误,并获得正确的双线性插值?(除了我自己手动插入额外的点,如果放大到足够远,这仍然无法解决问题.)
我有这样的数据:
22.10.1980. 100
25.10.1980. 120
26.10.1980. 12
Run Code Online (Sandbox Code Playgroud)
(只有更多,并且对于每个日期,右边有几个独立的测量).
现在,这可能是微不足道的,但我从未在matlab中做过类似的事情,并且在网上找到类似的例子时遇到了问题.我需要在时间/显示日期轴(x轴)上绘制数据,所有日期都在里面(所以,23.和24.以及...我没有测量).
我不是要求有人为我解决这个问题,但是如果你能暗示哪种方式应该是最好的.到目前为止从未使用过这种数据类型,因此无法找到为初学者加载日期的方法.
我在MATLAB中绘制一个水平箱图 - boxplot(y, group,'orientation','horizontal')然后使用隐藏y轴set(gca,'box','off','ycolor','w').
它在屏幕上看起来很好 - 只有底部的x轴可见.但是每当我将图形保存到文件时,使用print()函数或matlabfrag.m,左边的y轴重新出现在输出文件中(尽管它没有显示在MATLAB的图形可视化中).
如何隐藏这个Y轴?
我试图用一些纬度/经度改变图像轴标签,但我找不到如何做到这一点.我尝试了一些基本命令,如:
imagesc(data)
axis(meshgrid([-180:20:180],[-90:20:90]))
colorbar
Run Code Online (Sandbox Code Playgroud)
但这些表达出现了:
imagesc(数据),axis(meshgrid([ - 180:20:180],[ - 90:20:90])),colorbar操作数到|| 和&&运算符必须可转换为逻辑标量值.
Run Code Online (Sandbox Code Playgroud)Error in axis>allAxes (line 448) result = all(ishghandle(h)) && ... Error in axis (line 57) if ~isempty(varargin) && allAxes(varargin{1}).
有谁能够帮我?仅供参考,我的图像轴标签是数据顺序(从0到N).
我想要的结果是图像看起来像世界地图,带有经纬网/网格线作为轴.应该看起来像这样:
为将非编程问题带到SO之前提前道歉,但权力已经确定所有与MATLAB相关的问题都属于此.
我一直在做一些卡尔曼滤波器并绘制状态变量估计值,以了解它们如何随时间收敛.现在,我想直观地表示协方差矩阵,这表明估计的不确定性.所以我写了一个小功能,为估计周围的乐队着色.
(编辑注释:2*cov当需要2个标准偏差时,先前版本误用于每个半波段的宽度)
function [ls, regions] = plotuncertain( t, y, cov )
t = t(:);
y = y(:);
stdev = cov(:).^(1/2);
a = ones(size(t));
regions(1) = patch('XData', [t; t(end:-1:1)], ...
'YData', [y + 2*stdev; y(end:-1:1)], ...
'FaceVertexAlphaData', [0*a; a], ...
'FaceAlpha', 'interp', 'EdgeColor', 'none');
regions(2) = patch('XData', [t; t(end:-1:1)], ...
'YData', [y - 2*stdev; y(end:-1:1)], ...
'FaceVertexAlphaData', [0*a; a], ...
'FaceAlpha', 'interp', 'EdgeColor', 'none');
ls = line('XData', t, 'YData', y);
Run Code Online (Sandbox Code Playgroud)
它看起来很合理:

但我有两个具有相似含义的状态变量,我想在一个轴上同时绘制.

呃哦,k_1的初始数据被k_2频段的(上半部分)遮挡了.MATLAB没有按照我提交的顺序绘制线条和补丁.即使我设法控制他们绘制的顺序,alpha混合仍然不如基于概率混合颜色最佳.
任何想法如何同时渲染两个?我可以以某种方式利用我为两个变量使用两个不同颜色平面这一事实吗?
我想在颜色图中定义透明颜色,我该怎么做?
我需要这个的原因是我有一个多层axes(由imagesc和生成plot).我知道我可以简单地先使用imagesc,然后plot我想在imagesc表示的非零值后面绘制线条.
要使用我使用的零颜色
jet = colormap('jet');
jet(1:2,:) = 1;
colormap(jet);
Run Code Online (Sandbox Code Playgroud)
现在我想让白色透明.
在Matlab R2016a等待用户输入或暂停时,我无法与数字控件交互,如缩放.在较旧的Matlab版本中不会发生这种情况.
这只发生在之前创建的图形和CLOSED时.使用createFig1 = 0;(无错误)和createFig1 = 1;(错误)运行下面的代码 .
如果出现以下错误,则不会
示例代码:
clearvars; close all;
% If fig1 is created here AND closed, zoom control in fig2 becames unresponsible !
createFig1 = 1;
if createFig1
fig1=figure;
title('Press any key or click to continue...');
disp('Press any key or click to continue...');
k = waitforbuttonpress;
close(fig1); clear fig1;
end
%fig2=figure('units','normalized','outerposition',[0 0 1 1]);
fig2=figure;
plot(randn(1000,1));
title('Fig A');
% #### Bug …Run Code Online (Sandbox Code Playgroud)