R:ggplot更好的渐变色

Rac*_*wal 6 r ggplot2 dataframe

我正在使用ggplot绘制比例堆积条形图.我得到的情节是这样的: 在此输入图像描述

这是我正在使用的自编函数:

df <- data.frame(id=letters[1:3],val0=1:3,val1=4:6,val2=7:9, val3=2:4, val4=1:3, val5=4:6, val6=10:12, val7=12:14)

PropBarPlot<-function(df, mytitle=""){
   melteddf<-melt(df, id=names(df)[1], na.rm=T)
   ggplot(melteddf, aes_string(x=names(df)[1], y="value", fill="variable")) + 
     geom_bar(position="fill") + 
     theme(axis.text.x = element_text(angle=90, vjust=1)) + 
     labs(title=mytitle)
}

print(PropBarPlot(df))
Run Code Online (Sandbox Code Playgroud)

在这里val4val5没有太大的不同.

但由于颜色,其中一些是无法区分的.有人能告诉我如何选择更好的颜色,以便它们可以区分吗?

谢谢.

Sim*_*lon 14

使用scale_fill_brewer哪个使用来自ColorBrewer网站的调色板,由包实现RColorBrewer

ggplot(diamonds, aes(clarity, fill=cut) ) +
geom_bar( ) +
scale_fill_brewer( type = "div" , palette = "RdBu" )
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

您可以选择多种不同的调色板.

require(RColorBrewer)
?brewer.pal
Run Code Online (Sandbox Code Playgroud)

如果你需要更多的颜色,你可以使用这些colorRampPalette功能在一些颜色之间进行插值(我会使用brewer.pal调色板).你可以这样做:

# Create a function to interpolate between some colours
mypal <- colorRampPalette( brewer.pal( 6 , "RdBu" ) )
# Run function asking for 19 colours
mypal(19)
 [1] "#B2182B" "#C2373A" "#D35749" "#E47658" "#F0936D" "#F4A989" "#F8BFA5"
 [8] "#FCD6C1" "#F3DDD0" "#E7E0DB" "#DAE2E6" "#CBE1EE" "#ADD1E5" "#90C0DB"
 [15] "#72AFD2" "#5B9DC9" "#478BBF" "#3478B5" "#2166AC"
Run Code Online (Sandbox Code Playgroud)

在您需要8种颜色的示例中,您可以使用以下颜色scale_fill_manual():

PropBarPlot<-function(df, mytitle=""){
   melteddf<-melt(df, id=names(df)[1], na.rm=T)
   ggplot(melteddf, aes_string(x=names(df)[1], y="value", fill="variable")) + 
     geom_bar(position="fill") + 
     theme(axis.text.x = element_text(angle=90, vjust=1)) + 
     labs(title=mytitle)+
    scale_fill_manual( values = mypal(8) )
}

print(PropBarPlot(df))
Run Code Online (Sandbox Code Playgroud)

  • 那么你在一个情节中有太多的颜色类别!由于某种原因,调色板具有最大数量的颜色.考虑使用facet_wrap或facet_ grid分割您的绘图. (3认同)

Rac*_*wal 2

感谢@zelite 和@SimonO101 的帮助。这是你们俩提议的更简单的版本。添加到这里是为了完整性。

library(ggplot2)
library(reshape2)
library(RColorBrewer)

getColors<-function(n){
   mypal<-colorRampPalette(brewer.pal(12, "Paired"))
   sample(mypal(n), n, replace=FALSE)
}

PropBarPlot<-function(df, mytitle=""){
   melteddf<-melt(df, id=names(df)[1], na.rm=T)
   n<-length(levels(factor(melteddf$variable)))

   ggplot(melteddf, aes_string(x=names(df)[1], y="value", fill="variable")) + 
      geom_bar(position="fill") + 
      scale_fill_manual(values=getColors(n)) + 
      theme(axis.text.x = element_text(angle=90, vjust=1)) + 
      labs(title=mytitle)
}

df <- data.frame(id=letters[1:3],
             val0=1:3,
             val1=4:6,
             val2=7:9, 
             val3=2:4, 
             val4=1:3, 
             val5=4:6, 
             val6=10:12, 
             val7=12:14)

print(PropBarPlot(df))
Run Code Online (Sandbox Code Playgroud)

谢谢。