2017-03-22 8 views
3

下のキャプションのキーを、グラフの縦線を変更せずに横の位置に変更するにはどうすればよいですか。ggplotの凡例の「キー」の向きを変更するにはどうすればよいですか?

set.seed(000) 
m <- matrix(rnorm(100,0,1),100,1) 
dt <- data.frame(m) 
names(dt) <- c("X") 

library(ggplot2) 

g2 <- ggplot(dt, aes(x=X)) 
g2 <- g2+geom_histogram(aes(y=..density..),  # Histogram with density instead of count on y-axis 
         binwidth=.5, 
         colour="black", fill="white",breaks=seq(-2, 2, by = 0.1)) 
g2 <- g2+geom_density(alpha=.3, fill="#cccccc") # Overlay with transparent density plot 
g2 <- g2+ geom_vline(aes(xintercept=0, linetype="Valor Verdadeiro"),show.legend =TRUE) 
g2 <- g2+ geom_vline(aes(xintercept=mean(dt$X, na.rm=T), linetype="Valor Estimado"),show.legend =TRUE) 
g2 <- g2+ scale_linetype_manual(values=c("dotdash","solid")) # Overlay with transparent density plot 
g2 <- g2+ xlab(expression(paste(gamma[1])))+ylab("Densidade") 
g2 <- g2+ theme(legend.key.height = unit(2, "cm") , 
       legend.position = c(0.95, 0.95), 
       legend.justification = c("right", "top"), 
       legend.box.just = "right", 
       legend.margin = margin(6, 6, 6, 6), 
       legend.title=element_blank(), 
       legend.direction = "vertical", 
       legend.background = element_rect(fill="gray", size=.5, linetype="dotted")) 
g2 <- g2+ guides(linetype = guide_legend(override.aes = list(size = 1))) 
g2 

注:私はdotdashsolid形式であるキャプション内から行を回転したいです。

enter image description here

+0

あなたは、このソリューションをチェックする場合があります http://stackoverflow.com/questions/35703983/how-to-change-angle-of-line-in-customized-legend- in-ggplot2 –

+0

@JeroenBoeye動作しません、私は試しました! – fsbmat

答えて

2

あなたはggplotのグロブでの作業に頼るとgrid編集機能を使用する必要があります。

# Your data and plot 
set.seed(000) 
m <- matrix(rnorm(100,0,1),100,1) 
dt <- data.frame(m) 
names(dt) <- c("X") 

library(ggplot2) 

g2 <- ggplot(dt, aes(x=X)) 
g2 <- g2+geom_histogram(aes(y=..density..),  # Histogram with density instead of count on y-axis 
         binwidth=.5, 
         colour="black", fill="white",breaks=seq(-2, 2, by = 0.1)) 
g2 <- g2+geom_density(alpha=.3, fill="#cccccc") # Overlay with transparent density plot 
g2 <- g2+ geom_vline(aes(xintercept=0, linetype="Valor Verdadeiro"),show.legend =TRUE) 
g2 <- g2+ geom_vline(aes(xintercept=mean(dt$X, na.rm=T), linetype="Valor Estimado"),show.legend =TRUE) 
g2 <- g2+ scale_linetype_manual(values=c("dotdash","solid")) # Overlay with transparent density plot 
g2 <- g2+ xlab(expression(paste(gamma[1])))+ylab("Densidade") 
g2 <- g2+ theme(legend.key.height = unit(2, "cm") , 
       legend.position = c(0.95, 0.95), 
       legend.justification = c("right", "top"), 
       legend.box.just = "right", 
       legend.margin = margin(6, 6, 6, 6), 
       legend.title=element_blank(), 
       legend.direction = "vertical", 
       legend.background = element_rect(fill="gray", size=.5, linetype="dotted")) 
g2 <- g2+ guides(linetype = guide_legend(override.aes = list(size = 1))) 


# Adjust key height and width 
g2 = g2 + theme(
    legend.key.height = unit(.6, "cm"), 
    legend.key.width = unit(1, "cm")) 

# Get the ggplot Grob 
    gt = ggplotGrob(g2) 

# grid.ls(grid.force(gt)) # To get a list of editable grobs 

# Edit the relevant keys 
library(grid) 
gt <- editGrob(grid.force(gt), gPath("key-[3,4]-1-[1,2]"), 
     grep = TRUE, global = TRUE, 
     x0 = unit(0, "npc"), y0 = unit(0.5, "npc"), 
     x1 = unit(1, "npc"), y1 = unit(0.5, "npc")) 

# Draw it 
grid.newpage() 
grid.draw(gt) 

enter image description here

+0

ありがとうございました!一つの質問ですが、 'legend.direction =" horizo​​ntal "を変更すると、キーを水平に保つためにどこでコードを変更できますか? – fsbmat

+1

'grid.ls(grid.force(gt)')は編集可能grobsのリストを提供します。水平凡例では、関連するgrobsはkey-1-3-1、key-1-3-2、key-1 -7-1; key-1-7-2ですから、editGrobコマンドのgPathは 'gPath(" key-1- [3,7] - [1,2] ")' –

+0

ありがとうあなたは私をたくさん助けました! – fsbmat

関連する問題