如何设置情节颜色N曲线的梯度之间的颜色浅蓝色和深蓝色(或任何其他颜色)?

402(30天)
背景
我有一个变量的数据集,生成N,在一个循环中。我想绘制这些数据集作为一个颜色梯度,每个数据集都是一个给定的颜色,不同的颜色表示,从浅蓝到深蓝。理想情况下,我想第一个和最后一个颜色保持固定,但希望这些颜色之间的分歧的数量(即:浅蓝色和深蓝色)N变化而变化。我的解决遇到的问题,因为括号用于定义一个函数定义一个矩阵的颜色三胞胎以及矩阵的行索引。
部分解决方案
我使用了 “uisetcolor”命令 手动选择我想要浅蓝色和深蓝色的阴影(这里没有显示这个过程,自己试试):
lightBLUE = (0.356862745098039, 0.811764705882353, 0.956862745098039);
darkBLUE = (0.0196078431372549, 0.0745098039215686, 0.670588235294118);
这些选择端点我创建了一个蓝色梯度与固定数量的阴影,“乐”(这是基于解决方案 前一个问题通过Matlab的员工 )。
kk = 10;
blueGRADIENTfixed = [linspace (lightBLUE (1) darkBLUE (1), kk)”, linspace (lightBLUE (2), darkBLUE (2), kk)”, linspace (lightBLUE (3), darkBLUE (3), kk) ');
创建一些虚假数据和阴谋使用“blueGRADIENTfixed”:
x = 10:0.5:10;%轴
N = 7;% #要绘制的曲线(想象他们生成在一个循环)
i = 1: N
易{我}= (2 *)* x ^ 2%创建假轴数据
结束
无花果=图;
i = 1: N
情节(x,{我},“颜色”blueGRADIENTfixed(我:))%循环遍历所有曲线阴谋
持有
结束
这应该给你一个好主意的预期结果。
这个问题
这是好的,但并不理想,因为层次的数量是固定的,我不知道它。假设我只有N = 2曲线生成的循环,如果梯度的数量是硬编码在k = 10,两曲线将绘制使用几乎相同的浅蓝色阴影(很难区分)。为了解决这个问题我试图定义一个函数,创建所需的矩阵数量可变的层次,“据Nvar”:
blueGRADIENTflexible = @(据Nvar) [linspace (lightBLUE (1) darkBLUE(1),据Nvar)”, linspace (lightBLUE (2), darkBLUE(2),据Nvar)”, linspace (lightBLUE (3), darkBLUE(3),据Nvar) ');
测试= blueGRADIENTflexible (N)%检查使用之前定义的N = 7,好的
试着用阴谋循环:
图=图;
i = 1: N
情节(x,{我},“颜色”,blueGRADIENTflexible (N)(我:))
持有
结束
这把如下错误:”索引与括号“()”必须出现作为一个有效的索引表达式的最后一个手术。”(注:如果我评价这个页面上使用“运行”按钮的代码错误是“无效的数组索引”)。这似乎是来自双括号的使用功能和行索引。即函数(N)(我,:)
一个愚蠢的解决方案是创建一个变量的适当大小的矩阵每个情节,以避免双括号的使用。这将是类似的:
如果=图;
dumbdumb = blueGRADIENTflexible (N);
i = 1: N
情节(x,{我},“颜色”dumbdumb(我:))
持有
结束
其工作原理, 但我不想这样做,因为它仍然需要手动为每个情节生成一个新的变量。我尝试了一些方法的转换矩阵单元阵列认为可以解决双括号问题,但有一个类似的错误。
有人知道simlar方法的代码,对于“公文包”工作?
谢谢!

接受的答案

凯利卡尼
凯利卡尼 2021年8月24日
我建议重新格式化color-generating函数,而不是整个梯度colormap返回,它只返回单一颜色你需要在给定的时间:
lightBLUE = (0.356862745098039, 0.811764705882353, 0.956862745098039);
darkBLUE = (0.0196078431372549, 0.0745098039215686, 0.670588235294118);
blueGRADIENTflexible = @(我,N) lightBLUE + (darkBLUE-lightBLUE) *((张)/ (N - 1));
%假数据
x = 10:0.5:10;%轴
N = 7;% #要绘制的曲线(想象他们生成在一个循环)
i = 1: N
易{我}= (2 *)* x ^ 2;%创建假轴数据
结束
%的阴谋
无花果=图;
i = 1: N
情节(x,{我},“颜色”blueGRADIENTflexible(我N));%循环遍历所有曲线阴谋
持有
结束
1评论
特拉维斯成bril
特拉维斯成bril 2021年12月13日
编辑:特拉维斯成bril 2021年12月13日
注意:两个 @Kelly卡尼 @DGM 的解决方案运行到一个错误如果N = 1,有时是这样给我。凯利的解决方案是容易解决的只是“N - 1”替换为“N”。即:
blueGRADIENTflexible = @(我,N) lightBLUE + (darkBLUE-lightBLUE) *((张)/ N);
你不会达到最后的“darkBLUE”色差但修复很好适合我的目的。感谢所有。

登录置评。

更多的答案(2)

为副总经理
为副总经理 2021年8月24日
编辑:为副总经理 2021年8月25日
是的。这不是有效的索引。
您可以使用插值工具,使CT生成器的函数表大小和表中的位置:
lightBLUE = (0.356862745098039, 0.811764705882353, 0.956862745098039);
darkBLUE = (0.0196078431372549, 0.0745098039215686, 0.670588235294118);
x = 10:0.5:10;%轴
N = 7;% #要绘制的曲线(想象他们生成在一个循环)
i = 1: N
易{我}= (2 *)* x ^ 2;%创建假轴数据
结束
blueGRADIENTflexible = @ (n, nn) interp1 ([1 / nn 1], [lightBLUE; darkBLUE], n / nn);
测试= blueGRADIENTflexible (1: N, N)
测试= 7×3
0.3569 0.8118 0.9569 0.3007 0.6889 0.9092 0.2444 0.5660 0.8614 0.1882 0.4431 0.8137 0.1320 0.3203 0.7660 0.0758 0.1974 0.7183 0.0196 0.0745 0.6706
i = 1: N
情节(x,{我},“颜色”blueGRADIENTflexible(我,N))
持有
结束
我认为,理想情况下,你也可以转换成一个函数,它接受两个颜色可选参数元组。这样您可以创建扫过你想要的任何颜色。编辑:见附件。用法是:
createcolortable (lightBLUE darkBLUE 7)
ans = 7×3
0.3569 0.8118 0.9569 0.3007 0.6889 0.9092 0.2444 0.5660 0.8614 0.1882 0.4431 0.8137 0.1320 0.3203 0.7660 0.0758 0.1974 0.7183 0.0196 0.0745 0.6706
createcolortable (lightBLUE darkBLUE 7 [2 2.5 - 3)
ans = 3×3
0.3007 0.6889 0.9092 0.2725 0.6275 0.8853 0.2444 0.5660 0.8614

类别

找到更多的在图形对象编程帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!