2017-02-15 64 views
1

使用下面的數據,我想創建一個演示圖:煉油ggplot R代碼裏面出現的背後劇情點

name = c("Phil", "Ian", "Leslie", "Darla", "Silvia", "Ron", "Emily", "Jack") 
score = c(73.8, 73.5, 70.3, 68.9, 65.3, 61.4, 55.2, 54.3) 
tx = c(0,0,1,0,0,0,0,0) 
test1 <- data.frame(name, score, tx) 

該圖是爲了顯示每個點作爲一個大圈圓內的繪圖點的值。紅色虛線代表繪製值的平均值。灰色矩形代表均值附近的標準偏差。下面是我使用來創建圖表的代碼:

library(ggplot2) 
library(scales) 

cols <- c("1" = "#ff7f0e", "0" = "#1f77b4") 
txctrl <- c("1" = "#ffffff", "0" = "#000000") 

ggplot(test1, aes(x=score, y=reorder(name,score))) + 
    geom_vline(aes(xintercept=mean(score)), colour="red", linetype="dashed", size=1) + 
    geom_point(aes(colour = factor(tx), size=0), show.legend = FALSE) + 
    annotate("rect", xmin=(mean(test1$score)-sd(test1$score)), xmax=(mean(test1$score)+sd(test1$score)), ymin=-Inf, ymax=Inf, alpha=0.5, fill="grey90") + 
    # geom_label(aes(label=score), colour=txctrl, fontface = "bold") + 
    scale_colour_manual(values=cols) + 
    scale_size(range=c(11,11)) + 
    xlim(52,78) + 
    geom_text(aes(label=score), hjust=0.5, vjust=0.5, size=5, label=round(test1$score, digits = 0)) + 
    labs(y='Name', x='Score') + 
    theme_bw() + 
    theme(panel.border = element_blank(), 
     panel.grid.major = element_blank(), 
     panel.grid.minor = element_blank(), 
     axis.line = element_line(color=NA), 
     axis.ticks = element_blank(), 
     axis.text.x = element_blank(), 
     axis.title.x = element_blank(), 
     axis.text.y = element_text(size=14), 
     axis.title.y = element_blank()) 

這裏是上面的代碼的結果:

Resulting graph of preceding code.

我遇到的問題是該矩形衰落情節點的顏色。 如何讓灰色矩形出現在繪圖點和值標籤後面?

一層接一層地工作,我設法讓虛線的平均線坐在繪圖點後面。當我嘗試在標識繪圖點的圖層之前的任何位置移動帶註釋的矩形時,出現錯誤。

+1

您將圖層添加到ggplot的順序是它們的繪製順序。在'geom_point()'之前移動註解。不要在問題中添加「獎金」。一次提出一個問題。 – MrFlick

+0

這可能會有所幫助:http://stackoverflow.com/questions/20249653/insert-layer-underneath-existing-layers-in-ggplot2-object – jesstme

回答

1

嘗試使用geom_rect而不是註釋。然後,你會想從aes功能中刪除你的美學。我不能說爲什麼會產生一個錯誤,但它確實如此。

你可以在下面看看我的意思。

ggplot(test1, aes(x=score, y=reorder(name,score))) + 
geom_rect(xmin=(mean(score)-sd(score)), xmax=(mean(score)+sd(score)),ymin=-Inf, ymax=Inf, alpha=0.5,fill="grey90") + 
geom_vline(aes(xintercept=mean(score)), colour="red", linetype="dashed", size=1) + 
geom_point(aes(colour = factor(tx), size=0), show.legend = FALSE) + 
scale_colour_manual(values=cols) + 
scale_size(range=c(11,11)) + 
xlim(52,78) + 
geom_text(aes(label=score), hjust=0.5, vjust=0.5, size=5, label=round(test1$score, digits = 0)) + 
labs(y='Name', x='Score') + 
theme_bw() + 
theme(panel.border = element_blank(), 
    panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank(), 
    axis.line = element_line(color=NA), 
    axis.ticks = element_blank(), 
    axis.text.x = element_blank(), 
    axis.title.x = element_blank(), 
    axis.text.y = element_text(size=14), 
    axis.title.y = element_blank()) 
+0

謝謝你提供了額外的方向。我嘗試過使用geom_rect,但沒有從aes函數中刪除審美。這提供了我堅持的解決方案。 – Vondredi