matlab - 表面的渐变颜色
问题描述
我有以下 MATLAB 代码:
close all
clear all
clc
edges= linspace(0,1,10);
[X,Y] = meshgrid(edges);
Z=rand(10);
h= surf(X,Y,Z,'FaceColor','none')
我需要在这个表面上画脸。坐标为 (0,0) 的面应为绿色,坐标为 (1,1) 的面应为红色。对角线上的所有面都应该是黄色的。
你能帮我画这幅画吗?
解决方案
如果您仔细查看该surf
命令,您会发现,您可以设置自定义“颜色图”,然后将其代替Z
数据用作颜色指示器。
所以,你只需要设置一个正确的“颜色图”。X
那个必须与您的数据具有相同的维度Y
,并且对于每个数据点,您必须指定[R, G, B]
您选择的三元组,即[0, 1, 0]
坐标[0, 0]
、[1, 0, 0]
坐标[1, 1]
以及这两者之间的一些“对角线”插值。
幸运的是,你已经有了,看看你的X
数据Y
!添加两者将为绿色通道提供这种“对角线”插值。反之将给出正确的红色通道。(缩放有点损坏,因为您的值大于1.0
,但这些会“剪裁”。)
这是增强的代码:
edges = linspace(0, 1, 10);
[X, Y] = meshgrid(edges);
Z = rand(10);
cm(:, :, 1) = (X + Y); % Red channel
cm(:, :, 2) = 2 - cm(:, :, 1); % Green channel
cm(:, :, 3) = zeros(size(X)); % Blue channel (empty)
h = surf(X, Y, Z, cm); % No need for the FaceColor property
输出如下所示:
希望有帮助!
推荐阅读
- c# - 从返回类型 Task 中提取类型 ICollection<>
> - python - 在 Python 中计算源频率
- android - Android Handler Looper Dark Theme 行为
- c++ - 单击它时如何在PowerShell中执行我的.exe
- reactjs - 使用 React-bootstrap,为什么第一个手风琴没有在加载页面上打开或切换
- php - PHP cURL 请求很慢
- bigcartel - 将购物篮图标更改为购物车图标大卡特尔
- r - 来自data.frame的ggplot密度图,包含时刻
- docker - gitlab-ci docker cypress e2e 中的后端服务器
- java - A question about how JVM allocates memory for primitives