R计算与数据帧中的值成比例的RGB代码
我有一个简单的数据帧,其中的值是log2比例 我试图向数据帧中添加一列,其中包含与第一列中的值成比例的R、G、B代码。 另外,如果该值大于或小于某个值,则我要放置一个treshold。在这种情况下,最小值为-5,最大值为5。 我是在awk中做的,但在R中找不到解决方案 我的awk代码:R计算与数据帧中的值成比例的RGB代码,r,collapse,R,Collapse,我有一个简单的数据帧,其中的值是log2比例 我试图向数据帧中添加一列,其中包含与第一列中的值成比例的R、G、B代码。 另外,如果该值大于或小于某个值,则我要放置一个treshold。在这种情况下,最小值为-5,最大值为5。 我是在awk中做的,但在R中找不到解决方案 我的awk代码: awk -v maxlogratio=5 -v FS='\t' -v OFS='\t' '/^chr/{{r=0;g=0;if($9<1){{r=-255*(log($9)/log(2))/maxlogra
awk -v maxlogratio=5 -v FS='\t' -v OFS='\t' '/^chr/{{r=0;g=0;if($9<1){{r=-255*(log($9)/log(2))/maxlogratio;if(r>255){{r=255}}}};if($9>1){{g=255*(log($9)/log(2))/maxlogratio;if(g>255){{g=255}}}};print $0,r","g",0"}}'
我期望:
activity rgb
-6 255,0,0
-5 255,0,0
-4 204,0,0
-3 153,0,0
-2 102,0,0
-1 51,0,0
0 0,0,0
1 0,51,0
2 0,102,0
3 0,153,0
4 0,204,0
5 0,255,0
6 0,255,0
所以我需要在rgb列中粘贴值,但我不知道怎么做
所以最后我做了些事情得到了r,g,b
但我仍然无法将-5/5的最小值和值固定为255
activity_rgb=data.frame(activity=seq(from=-6,to = 6,by = 1))%>%
mutate(rgb=ifelse(activity<0,paste(-255*(activity)/5,0,0,sep = ","),paste(0,255*(activity)/5,0,sep = ",")))
activity_rgb
activity rgb
1 -6 306,0,0
2 -5 255,0,0
3 -4 204,0,0
4 -3 153,0,0
5 -2 102,0,0
6 -1 51,0,0
7 0 0,0,0
8 1 0,51,0
9 2 0,102,0
10 3 0,153,0
11 4 0,204,0
12 5 0,255,0
13 6 0,306,0
activity\u rgb=data.frame(activity=seq(from=-6,to=6,by=1))%>%
mutate(rgb=ifelse)(活动尝试以下用法:
scale\u to\u rgb建议使用colorRampPalette
。既然您似乎想要颜色的箱子,也许您可以使用cut
首先将数据值装箱,然后选择合适的颜色。谢谢,但实际上我需要在我的数据框的一列中使用rgb值。谢谢您在列中的rgb值不是直接的y有用。为什么不使用提供直接适用于所有绘图函数的值的东西,而不必对其进行字符串拆分/解析/拆分/munge?因为这样我将在文件中写入输出数据帧,并使用需要RGB值的程序谢谢,但我希望从红色变为黑色,然后从黑色变为绿色。在0时,我希望RGB=0,0,0我觉得没关系。我只需要在函数中添加黑色。感谢您在您的需求中有任何其他未说明的限制?(设置colors=c(“#ff0000”,“#000000”,“#00ff00”)
)pmax和pmin的工作原理是:如果我的值大于或小于-5/5;但是如果我有-4,它将缩放到-5,我将得到255,0,而不是204,0,0。你的答案非常有用,但我仍然停留在这个问题上。如果我的值大于-5,它将缩放到-5。谢谢
activity rgb
-6 255,0,0
-5 255,0,0
-4 204,0,0
-3 153,0,0
-2 102,0,0
-1 51,0,0
0 0,0,0
1 0,51,0
2 0,102,0
3 0,153,0
4 0,204,0
5 0,255,0
6 0,255,0
activity_rgb=data.frame(activity=seq(from=-6,to = 6,by = 1))%>%
mutate(rgb=ifelse(activity<0,paste(-255*(activity)/5,0,0,sep = ","),paste(0,255*(activity)/5,0,sep = ",")))
activity_rgb
activity rgb
1 -6 306,0,0
2 -5 255,0,0
3 -4 204,0,0
4 -3 153,0,0
5 -2 102,0,0
6 -1 51,0,0
7 0 0,0,0
8 1 0,51,0
9 2 0,102,0
10 3 0,153,0
11 4 0,204,0
12 5 0,255,0
13 6 0,306,0