how to make colors change smoothly when plotting in R

旧街凉风 提交于 2019-12-11 07:28:31

问题


ENV

R 3.3.1

mini data

rdn<-c(0.8,1.8,2.8)
tdn<-c(1,2,3,4,5,6,7,8,9)

idn<-matrix(c(0.3, 0.3, 0.3, 0.2, 0.2, 0.4, 0.1, 0.1, 0.5, 0, 0.2, 0.5, 0, 0.3, 0.6, 0, 0.4, 0.6, 0, 0.4, 0.6, 0, 0.5, 0.7, 0, 0.5, 0.7), nrow=9, ncol=3, byrow=T)

What I have now:

code

filled.contour(tdn, rdn, idn,
    color.palette=colorRampPalette(c("blue","yellow","red")), 
    plot.title=title(main="Detail", sub="detail", 
                    xlab="t", ylab="lambda"), 
    plot.axes = { axis(side = 1, at = tdn, labels = tdn)
                  axis(side = 2, at = rdn, labels = rdn) },
    key.title=title(main="ratio"),
    key.axes = axis(4, seq(0, 1, by = 0.1)))

Current Result

Problem

The color range is not what I want. There are borders among colors so colors do not change smoothly from deep blue to deep red.

Expected

Question

how to make colors change smoothly like my Expeced figure when plotting in R? How do I remove problems above? And rainbow not works for me either. Thanks.

EDIT

Follow Haboryme's solution

The foreground not disappear.


回答1:


Close to @setempler answer but you might find it a bit closer to your expected output:

par(fg = NA,col="black")
filled.contour(x=tdn,
               y=rdn,
               z=idn,
               color.palette=colorRampPalette(c("blue","yellow","red")), 
               plot.title=title(main="Detail", sub="detail", 
                                xlab="t", ylab="lambda"), 
               nlevels=200,
               plot.axes = { axis(side = 1, at = tdn, labels = tdn)
                 axis(side = 2, at = rdn, labels = rdn) },
               key.title=title(main="ratio"),
               key.axes = axis(4, seq(0, 1, by = 0.1)))




回答2:


Unfortunately, filled.contour ...

  • fixes the number of levels/colours between the plot and key, so experimenting with the nlevels argument (and col instead color.palette) results in a weird output (smoother image, but unreadable key).

  • In addition, the contour lines cannot be modified. Thus, an increase to 200 levels (from initially 14 in your example) is still 'readable', but higher values generate unwanted side-effects.

Example:

n <- 200
filled.contour(tdn, rdn, idn,
               col=colorRampPalette(c("blue","yellow","red"))(n),
               levels = seq(0,1,length.out = n),
               plot.title=title(main="Detail", sub="detail", 
                                xlab="t", ylab="lambda"), 
               plot.axes = { axis(side = 1, at = tdn, labels = tdn)
                   axis(side = 2, at = rdn, labels = rdn) },
               key.title=title(main="ratio"),
               key.axes = axis(4, seq(0, 1, by = 0.1)))

Output:

Maybe experimenting with lattice::levelplot solves the problem. At least for the legend color key, a higher number of levels does not disturb. But the image is not 'smoothed'.

Example:

library(lattice)
levelplot(idn, row.values = tdn, column.values = rdn, cuts = n, col.regions = colorRampPalette(c("blue","yellow","red"))(n))

Output:



来源:https://stackoverflow.com/questions/42062811/how-to-make-colors-change-smoothly-when-plotting-in-r

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!