如何在单个ggplot2图中指定不同的调色板和线条大小

时间:2014-10-02 19:12:11

标签: r ggplot2

我在同一个ggplot2图表中显示了四个发行版,其中包含以下代码(可在此处下载的数据:https://www.dropbox.com/s/l5j7ckmm5s9lo8j/1.csv?dl=0):

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

fileName = "./1.csv" # downloadable there: https://www.dropbox.com/s/l5j7ckmm5s9lo8j/1.csv?dl=0

mydata = read.csv(fileName,sep=",", header=TRUE)

dataM = melt(mydata,c("bins"))

ggplot(data=dataM, aes(x=bins, y=value, colour=variable)) +
xlab("bins") + ylab("freq") + geom_line(size = .5, alpha = .9) +
scale_colour_brewer(type = "qual", palette = 7) +
geom_line(size = .5, alpha = .9) +
theme_bw() +
theme(plot.background = element_blank()
,panel.grid.minor = element_blank()
,axis.line = element_blank()
,legend.key = element_blank()
,legend.title = element_blank()) +
scale_y_continuous(expand=c(0,0)) + 
scale_x_continuous(expand=c(0,0))

enter image description here

如何更改此图表,以便B,E和W根据宽度为.5的特定调色板(例如:scale_colour_brewer)显示,而R显示在scale_colour_brewer(type = "qual", palette = 7)中,宽度为1?

2 个答案:

答案 0 :(得分:4)

您可以在单独的geom_line中调用数据的子集:

ggplot() +
  geom_line(data=dataM[dataM$variable!="R",], aes(x=bins, y=value, colour=variable), size = .5, alpha = .9) +
  geom_line(data=dataM[dataM$variable=="R",], aes(x=bins, y=value, colour=variable), size = 1.5, alpha = .9) +
  scale_colour_brewer(type = "qual", palette = 7) +
  theme_bw() +
  theme(plot.background = element_blank(), panel.grid.minor = element_blank(), axis.line = element_blank(),
        legend.key = element_blank(), legend.title = element_blank()) +
  scale_y_continuous("freq", expand=c(0,0)) + 
  scale_x_continuous("bins", expand=c(0,0))

这给出了: enter image description here


另一个解决方案(由@baptiste建议)手动设置sizecolour比例:

ggplot(data=dataM, aes(x=bins, y=value, colour=variable, size = variable)) +
  geom_line(alpha = .9) +
  scale_colour_manual(breaks=c("B","E","W","R"), values=c("green","orange","blue","pink")) +
  scale_size_manual(breaks=c("B","E","W","R"), values=c(0.5,0.5,0.5,1.5)) +
  theme_bw() +
  theme(plot.background = element_blank(), panel.grid.minor = element_blank(), axis.line = element_blank(),
        legend.key = element_blank(), legend.title = element_blank()) +
  scale_y_continuous("freq", expand=c(0,0)) + 
  scale_x_continuous("bins", expand=c(0,0))

这或多或少会产生相同的结果: enter image description here

答案 1 :(得分:0)

ggplot(aes(x=bins, y=value, colour=variable)) +
  geom_line(data=dataM[dataM$variable!="R",]) +
  geom_line(data=dataM[dataM$variable=="R",])