我有代码:
values = [1.0 0.6 0.1; 0.0 1.0 0.3; 0.9 0.4 1.0];
h = bar3(values);
shading interp
for i = 1:length(h)
% Get the ZData matrix of the current group
zdata = get(h(i),'Zdata');
set(h(i),'Cdata',zdata)
end
set(h,'EdgeColor','k')
view(-61, 68);
colormap cool
colorbar
Run Code Online (Sandbox Code Playgroud)
这就是图中的样子:

我想根据条的高度为每个条获得不同的宽度.
我想要的看起来像http://www.sdtools.com/help/ii_mac.html中的图片.
我想绘制带有填充标记的散点图并使其半透明,因此当两个或多个标记重叠时,重叠区域将更加不透明.
我天真地想
sg = scatter(rand(1000,1),rand(1000,1), 'filled');
alpha(0.5)
Run Code Online (Sandbox Code Playgroud)
会工作,但事实并非如此.也
set(get(sg, 'Children'), 'FaceAlpha', 0.2)
Run Code Online (Sandbox Code Playgroud)
不起作用.有任何想法吗?
我有一个描述3D圆柱(xx,yy,zz,C)的点云的数据集:

我想从这个数据集制作一个表面图,类似于此

为了做到这一点,我想我可以使用TriScatteredInterp常规网格将我的散乱数据插值,然后使用surf以下方法绘制它:
F = TriScatteredInterp(xx,yy,zz);
max_x = max(xx); min_x = min(xx);
max_y = max(yy); min_y = min(yy);
max_z = max(zz); min_z = min(zz);
xi = min_x:abs(stepSize):max_x;
yi = min_y:abs(stepSize):max_y;
zi = min_z:abs(stepSize):max_z;
[qx,qy] = meshgrid(xi,yi);
qz = F(qx,qy);
F = TriScatteredInterp(xx,yy,C);
qc = F(qx,qy);
figure
surf(qx,qy,qz,qc);
axis image
Run Code Online (Sandbox Code Playgroud)
这对于凸面和凹面的物体非常有效,但对于圆柱体则以此结束:

任何人都可以帮助我如何实现更好的情节?
在MATLAB的早期版本中(例如R2013b),我有一个巧妙的技巧,我将一个监听器附加到一个轴句柄的YLim属性,当轴y-limits被改变时它会通知我:
addlistener(gca, 'YLim', 'PreSet', @(src,ev_data) disp(ev_data.NewValue))
Run Code Online (Sandbox Code Playgroud)
我正在使用它来更新第二个数字,它会显示这些轴中可见数据子集的一些摘要统计数据.这太棒了!你放大,第二个数字自我更新.大.
使它成为一个PreSet(而不是PostSet)监听器是有用的,因为我可以检查新值是否与旧值相同,从而避免在不必要时重新计算这些统计信息.
但是,这在R2014b中不再适用于我.我能够附加事件监听器,但是当我触发事件时,我收到以下错误消息:
类event.PropertyEvent没有适当的方法,属性或字段NewValue.
我相信这与HG2图形系统有关.通过适当的断点,我们可以查看事件数据.在R2013b:
K>> ev_data
ev_data =
handle.PropertySetEventData
K>> get(ev_data)
Type: 'PropertyPreSet'
Source: [1x1 schema.prop]
AffectedObject: [1x1 axes]
NewValue: [0.5000 220.5000]
Run Code Online (Sandbox Code Playgroud)
在R2014b中,我们似乎错过了这个NewValue领域:
K>> ev_data
ev_data =
PropertyEvent with properties:
AffectedObject: [1x1 Axes]
Source: [1x1 matlab.graphics.internal.GraphicsMetaProperty]
EventName: 'PreSet'
Run Code Online (Sandbox Code Playgroud)
它去哪儿了?!当然必须有一种方法来访问它.如果您无法访问要尝试将其设置为的新值,则属性预设事件处理程序有点无用.
快速版
如何在Matlab中控制三维条形图的x值和y值?
细节
假设我们有一个10 x 20的数据矩阵,我们使用它绘制它bar3,我们想要设置x值和y值.例如:
foodat = rand(10,20);
xVals = [5:14];
yVals = [-3:16];
bar3(xVals, foodat);
xlabel('x'); ylabel('y');
Run Code Online (Sandbox Code Playgroud)
有没有办法把它喂给yVals?否则,y轴始终默认为[1:N].
注意我不只是想用和更改标签.我需要更改轴上的实际值,因为我在同一个图中绘制了多个东西.仅仅改变(错误的)轴刻度标记的方式是不够的.所以这与这样的问题不同:XTickLabelYTickLabel
我尝试过的其他事情
当我尝试更改xvals时:
set(gca,'XTick', xVals)
set(gca,'YTick', yVals)
Run Code Online (Sandbox Code Playgroud)
这些值被接收,但实际上显示在错误的轴上,所以看起来x和y轴使用bar3切换.另外,由于条形图已经用错误的x值和y值绘制,所以为时已晚,因此我们最终会给空值给出刻度.
注意补充说
Matlab技术支持只是通过电子邮件通知我,让我知道用户贡献的功能scatterbar3,它以我想要的方式完成,其方式与接受的答案不同:
http://www.mathworks.com/matlabcentral/fileexchange/1420-scatterbar3
我正在尝试创建一个子图的图形.我不希望子图有传说,而是想要有一个整体传说.
我读到可以通过仅向最后一个子图添加图例并通过position特征legend或通过使用一个子图图形位置调整其在图中的位置(例如subplot(2,3,5.5)仅用于显示图例).我更喜欢第二种选择,虽然直到现在我还没有成功.有帮助吗?
这是我的代码:
SLS=figure();
hold on
subplot(3,2,1);
plot(t,u{1},t,u{2},t,u{3},t,u{4},t,u{5},t,u{6});
title('SLS Levels');
subplot(3,2,2);
plot(t,log_u{1},t,log_u{2},t,log_u{3},t,log_u{4},t,log_u{5},t,log_u{6});
title('SLS Logarithms');
subplot(3,2,3);
plot(t,I_u{1},t,I_u{2},t,I_u{3},t,I_u{4},t,I_u{5},t,I_u{6});
title('SLS Levels with Intercept');
subplot(3,2,4);
plot(t,log_I_u{1},t,log_I_u{2},t,log_I_u{3},t,log_I_u{4},t,log_I_u{5},t,log_I_u{6});
title('SLS Log. with Intercept');
subplot(3,2,5.5);
legend('GDP', 'C', 'I', 'G', 'Imp.', 'Exp.');
axis off
Run Code Online (Sandbox Code Playgroud) 我想在Matlab中制作一个条形图,其中一个类别是"突破顶部"的轴,超过y轴限制,但我无法想象如何做到这一点.当我将上限更改为较低值时,栏会被卡车.
我能做什么?
这是我的数据:
data =
115 116 97 99 107 NaN NaN NaN
111 118 101 114 102 108 111 119
Run Code Online (Sandbox Code Playgroud)
我希望上y轴限制为600.
这是我尝试过的:
bar(data,0.5,'stack')
ylim([0 600])
Run Code Online (Sandbox Code Playgroud)
以下是结果的演示:
我正在使用MATLAB脚本来调整机器上的控制系统.调整完成后,我想要一个包含文本的报告(特别是序列号,日期/时间和调整期间确定的值)和图,特别是传递函数.
你推荐什么?
无论我使用什么解决方案都应该与MATLAB编译器兼容,这样我就可以将我的解决方案分发给现场工程师团队.
理想情况下,报告将是PDF文档.
MATLAB报告生成器似乎不是正确的产品,因为看起来我必须将我的脚本分解成小块并将它们嵌入到报告模板中.我的脚本包含用户干预和更改值的机会,或者如果情节看起来不正确则拒绝调整,而我的预感是,如果代码从报告生成器运行,这将很难.此外,如果代码结构由报告模板的要求决定,我担心代码结构和可维护性将会丢失.
如果我的假设是错误的,请评论.
UPDATE
我现在已经切换到使用MATLAB报告生成器和版本r2016b,它对我的编译代码用户非常有效.不幸的是,这意味着拥有MATLAB许可证的同事也需要购买报告生成器,以便使用我的工具编写脚本.
matlab pdf-generation report matlab-deployment matlab-figure
我运行这段代码
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.
我有一些数据要绘制在一个图中.噪声数据正在破坏其他数据.如何更改给定数据的透明度级别?就我而言,我正在使用hold all命令来绘制几个数据.其中一个解决方案是改变LineWidth但我无法找到透明度选项的方法.我试过alpha如下
plot( noise_x, 'k', 'LineWidth', 1, 'alpha', 0.2)
但没有运气.
matlab ×10
matlab-figure ×10
plot ×2
transparency ×2
3d ×1
axes ×1
bar-chart ×1
colors ×1
figure ×1
graph ×1
graphics ×1
legend ×1
matlab-class ×1
matlab-hg2 ×1
report ×1
subplot ×1
width ×1