2013-02-21 121 views
9

如何使用R中的颜色渐变曲线绘制曲线。请看这个enter image description here火焰。R图 - 具有颜色梯度的正态曲线

它应该看起来像那样。我试图制作一条正常曲线,然后是另一条正常曲线,但从技术上说,不能用一串正常曲线制作这样一个图形,因为它们不会在任何一边的正确位置下降并相交。我怎么能在R中做出这样的数字?有任何想法吗?

+0

我选择了beta版本,因为它支持[0.1]。您可以通过修改a和b参数来使其成为“高峰”。只要你保持一致,你就保持对称,但是如果你想要一个“吹到一边或另一边”的火焰,你可以让它们不同。 – 2013-02-21 23:19:13

回答

23

我已经能够到目前为止做的最好的是:

par(bg="black") 
plot(seq(0.15,0.85,by=0.01), 
     5*dbeta(seq(0.15,0.85,by=0.01),10,10), 
     type="l" , ylim=c(0,700)) # this just sets up the plotting framework. 

for(i in 1:200) { lines(x= seq(0.15,0.85,by=0.01), 
          y= i*dbeta(seq(0.15,0.85,by=0.01),10,10), 
        col= colorRampPalette(c("yellow", "orange", "red", "hotpink", 
          "violet", "blue", "lightblue", "lightgreen", "darkgreen", 
          "black"))(200)[i], 
         lwd=13) } 
par(bg="white") 

我也发现,把“黑”色的该系列的开头添加一个额外的“发光”的总体结果,但我不会发布该结果。

enter image description here

-----------------

这是我开始,然后有逐次逼近和调整,下面出现:

plot(seq(0.15,0.85,by=0.01), 5*dbeta(seq(0.15,0.85,by=0.01),10,10), 
      type="l" , ylim=c(0,100)) 
for(i in seq(0.2, 5)) { lines(seq(0.15,0.85,by=0.01), 
        i*5*dbeta(seq(0.15,0.85,by=0.01),10,10)) } 

enter image description here

对于颜色:

plot(seq(0.15,0.85,by=0.01), 5*dbeta(seq(0.15,0.85,by=0.01),10,10), type="l" , 
      ylim=c(0,130)) 
for(i in 1:35) {lines(seq(0.15,0.85,by=0.01), i*dbeta(seq(0.15,0.85,by=0.01), 10,10), 
          col=colorRampPalette(c("yellow", "orange", "red", "violet", 
             "blue", "lightblue", "lightgreen"))(35)[i], 
        lwd=3) } 

enter image description here

对于黑色背景和更密集的颜色和在顶部的褪色为黑色:

par(bg = 'black') 
plot(seq(0.15,0.85,by=0.01), 5*dbeta(seq(0.15,0.85,by=0.01),10,10), type="l", 
      ylim=c(0,130)) 
for(i in 1:35) { lines(seq(0.15,0.85,by=0.01), i*dbeta(seq(0.15,0.85,by=0.01),10,10), 
          col=colorRampPalette(c("yellow", "orange", "red", "violet", 
           "blue", "lightblue", "lightgreen", "darkgreen", 
           "black")) (35)[i], 
          lwd=13) } 

enter image description here

我注意到衰落成黑色方面还控制线宽在两侧。我一直没有想到,但它似乎是一个理想的功能。这里没有提到的另一个方面是增加透明度的可能性。 R RGB函数中有一个alpha参数。

一个寻找色彩有用的技巧绰号:

grep("purple", colors(), value=TRUE) 
[1] "mediumpurple" "mediumpurple1" "mediumpurple2" "mediumpurple3" "mediumpurple4" 
[6] "purple"  "purple1"  "purple2"  "purple3"  "purple4"  

如果您正在使用迭代玩,使渐变平滑那么,您还需要调整ylim说法:选择0.5^9 * 0.5^9/beta(10,10)* [迭代],因为那将是x = 0.5时的最大值。

+0

这是不可思议的。谢谢!!! – CodeGuy 2013-02-21 23:49:12

+0

我希望我能再次投票给这个。 – N8TRO 2013-02-22 00:22:53