我目前有以下代码来创建这个图表: 大致上就是我想要的。但是有两个问题我希望能够进行更改,但是我自己在努力解决这些问题:1)删除标题为“Group”的图例,并使用标题为“Mean”的图例来代替黑色粗线(同时确保该线本身仍然为黑色),2)具有改变所显示的geom_polygons和geom_points的填充颜色为自定义颜色值的功能(不使图例消失)。谢谢。
library(ggplot2)
library(reshape)
library(car)
G1 <- 1:10
G2 <- 11:20
G3 <- 21:30
G4 <- 31:35
G5 <- 36:41
sdata <- read.csv("http://dl.dropbox.com/u/58164604/sdata.csv", stringsAsFactors = FALSE)
pdata<-melt(sdata, id.vars="Var")
jdata <-pdata
pdata$group <- recode(pdata$Var, "G1 = 'A'; G2 = 'B'; G3 = 'C'; G4 = 'D'; G5 = 'E'")
VarArea <- data.frame(unique(pdata$Var))
VarFinalArea <-c()
for (g in 1:max(VarArea))
{
VarNum<-pdata[which(pdata$Var==g),1:c(ncol(pdata))]
VarMin <- min(VarNum$value)
VarMax <- max(VarNum$value)
VarMinMax <- cbind(VarMin, VarMax)
VarFinalArea <- rbind(VarFinalArea,VarMinMax)
}
VarFinal <- data.frame(cbind(VarArea,VarFinalArea))
colnames(VarFinal)<-c("Variable", "Min", "Max")
VarFinal$group <- recode(VarFinal$Variable, "G1 = 'A'; G2 = 'B'; G3 = 'C'; G4 = 'D'; G5 = 'E'")
VarArea <- data.frame(unique(jdata$Var))
NumV <- max(VarArea)
VarFinalMin <-c()
for (g in 1:NumV)
{
VarNum<-jdata[which(jdata$Var==g),1:c(ncol(jdata))]
VarN <- g
VarMin <- min(VarNum$value)
VarMinN <- cbind(VarN, VarMin)
VarFinalMin <- rbind(VarFinalMin,VarMinN)
}
VFinalMin <- data.frame(VarFinalMin)
colnames(VFinalMin)<-c("Variable", "Value")
VFinalMin_Max<-max(VFinalMin$Value)
VarFinalMax <-c()
for (g in 1:NumV)
{
VarNum<-jdata[which(jdata$Var==g),1:c(ncol(jdata))]
VarN <- g
VarMax <- max(VarNum$value)
VarMaxN <- cbind(VarN, VarMax)
VarFinalMax <- rbind(VarFinalMax,VarMaxN)
}
VFinalMax <- data.frame(VarFinalMax)
colnames(VFinalMax)<-c("Variable", "Value")
VFinalMax_Min<-min(VFinalMax$Value)
VFinal<-rbind(VFinalMin, VFinalMax)
VFinal$Group <- recode(VFinal$Variable, "G1 = 'A'; G2 = 'B'; G3 = 'C'; G4 = 'D'; G5 = 'E'")
VLarge <- VFinal[which(VFinal$Value >= VFinalMax_Min),]
VLarge <- VLarge[order(-VLarge$Variable, VLarge$Group),]
VSmall <- VFinal[which(VFinal$Value <= VFinalMin_Max),]
VSmall <- VSmall[order(VSmall$Variable, VSmall$Group),]
VFinal <- rbind(VSmall, VLarge)
AMin <-min(jdata$value)
AMax <-max(jdata$value)
AMinValue<-round_any(AMin,1000, f =floor)
AMaxValue<-round_any(AMax,1000, f =ceiling)
ggplot(VFinal, aes(Variable, Value, colour = Group)) + geom_polygon(colour=NA, aes(fill=Group), alpha=0.5) +scale_x_discrete(name="Missing Variable Number", limits=c(1:NumV)) + theme(axis.text.x=element_text(angle=270, vjust=0.5, hjust=0.0))+ scale_y_continuous(name="Within Cluster Sum of Squares", limits=c(AMinValue, AMaxValue), breaks = seq(AMinValue, AMaxValue, 1000)) + guides(fill=guide_legend(title="Variable Groups"))
last_plot()+geom_line(data=subset(pdata,variable =='Mean'),size=1.5, alpha=0.5, aes(Var, value), colour="black", inherit.aes = FALSE)
last_plot()+geom_line(data=subset(pdata,variable!='Mean'),size=0.5, alpha=0.5, aes(Var, value, shape=variable), colour='black', inherit.aes = FALSE)
last_plot()+geom_point(data=subset(pdata,variable!='Mean'), aes(Var, value, shape = variable, col=group),alpha=1.0, inherit.aes = FALSE) + labs (shape = "Number of Clusters") + guides(scale_alpha(guide='none'))
last_plot()+ ggtitle("Clusters with Missing Variables") + theme(plot.title = element_text(size = 14, colour = "black", face = "bold"))
+ guides(colour = "none")
去掉图例,但是带有黑线的自定义图例不是 ggplot2 范例的一部分。您可以在图表上直接添加+ annotate("text", label = "Mean", ...)
,放置在线条旁边?对于 2),您可以使用scale_fill_manual
加入自己的颜色。last_plot()+geom_line(data=subset(pdata,variable =='Mean'),size=1.5, alpha=0.5, aes(Var, value, colour="black"), inherit.aes = FALSE)
- 通过将颜色放在aes
中,但当添加绘图的其他层时,它就消失了。 - Chrisaes(Var, value, size = '')
来创建均值线,然后在您的guides
调用中添加参数size = guide_legend(title = "Mean", override.aes = list(size = 1.5, colour = "black"))
。 - user1935457?scale_colour_manual
。例如,... + scale_colour_manual("变量组", values = c("A" = "红色", "B" = "蓝色", "C" = "紫色", "D" = "鲑鱼色", "E" = "橙色"))
。 - user1935457linetype
而不是size
,因为你正在设置aes
之外的手动大小。 - user1935457