如何设置情节颜色N曲线的梯度之间的颜色浅蓝色和深蓝色(或任何其他颜色)?
402(30天)
显示旧的评论
背景
我有一个变量的数据集,生成N,在一个循环中。我想绘制这些数据集作为一个颜色梯度,每个数据集都是一个给定的颜色,不同的颜色表示,从浅蓝到深蓝。理想情况下,我想第一个和最后一个颜色保持固定,但希望这些颜色之间的分歧的数量(即:浅蓝色和深蓝色)N变化而变化。我的解决遇到的问题,因为括号用于定义一个函数定义一个矩阵的颜色三胞胎以及矩阵的行索引。
部分解决方案
lightBLUE = (0.356862745098039, 0.811764705882353, 0.956862745098039);
darkBLUE = (0.0196078431372549, 0.0745098039215686, 0.670588235294118);
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方法的代码,对于“公文包”工作?
谢谢!
0评论
接受的答案
凯利卡尼
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));%循环遍历所有曲线阴谋
持有在
结束
更多的答案(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)
为i = 1: N
情节(x,{我},“颜色”blueGRADIENTflexible(我,N))
持有在
结束
我认为,理想情况下,你也可以转换成一个函数,它接受两个颜色可选参数元组。这样您可以创建扫过你想要的任何颜色。编辑:见附件。用法是:
createcolortable (lightBLUE darkBLUE 7)
createcolortable (lightBLUE darkBLUE 7 [2 2.5 - 3)