2014-10-20 64 views
0

我想在y軸上繪製一個離散變量對y上的一個連續變量。想象一下,在mtcars中,我正在嘗試繪製cyl與disp。如果disp的某些值是NA,那該怎麼辦?我想知道每個cyl值有多少個NA,並將其顯示在一個簡單的表格中,可能位於圖例下方(或圖例本身內)。有沒有一個簡單的(或複雜的)方法來做到這一點?R ggplot stat_summary:如何在圖例中包含NAs的數量?

相似和相關的問題,我提出:R - looking at means by subgroup and overall on a line graph

謝謝!

+0

是的,有是一個複雜的方式。但請注意,'ggplot2'是一個可視化工具。用ggplot2做所有事情並不是一個好主意。如果你想要一個表格,你可以用'knitr :: kable()','table()','tables :: tabular()'等來創建表格。 – kohske 2014-10-20 06:59:09

+1

如果你可以使用表格情節區,那麼這個Q是一個愚蠢的http://stackoverflow.com/questions/12318120/adding-table-within-the-plotting-region-of-a-ggplot-in-r#12318578 - 只是使帶有'table(is.na(foo $ X,foo $ Y))'或類似的表。 'annotation_custom'會被剪裁到繪圖區域,所以直到我們找到一種方法給註釋區域添加註釋.... – Spacedman 2014-10-20 07:07:00

+0

糟糕。表結構應該是'table(is.na(foo $ X),foo $ Y)'來得到一個2d表。 – Spacedman 2014-10-20 07:14:46

回答

0

此答案不符合所有問題要求,但由於有關數據應該如何呈現的細節有點模糊,因此無論如何我都會發帖。

因此,這裏是添加NA的方式計算傳說本身:

library(datasets) 
mycars <- mtcars 
mycars$disp[c(1,2,3)] <- NA 

lvls = levels(as.factor(mycars$cyl)) 
nacounts <- by(mycars, mycars$cyl, function(x) sum(is.na(x$disp))) 
labels = paste(lvls," (NA=",as.integer(nacounts),")",sep="") 

ggplot(data=mycars) + 
    geom_boxplot(aes(x=cyl,y=disp, fill=as.factor(cyl))) + 
    scale_fill_discrete(name="Cyl", labels=labels) 

Result

編輯

有關問題所指,到stat_summary圖:標籤描述線類型可以使用scale_linetype_ *函數添加。

如果你想擁有同樣的傳說爲上面的圖片中,我認爲你必須添加圖形元素描述缸,如:

ggplot(mycars,aes(cyl,disp)) + 
    stat_summary(fun.y=mean, geom="line", lwd=1.5) + 
    stat_summary(aes(lty=factor(vs)),fun.y="mean",geom="line") + 
    stat_summary(aes(color=factor(cyl)),fun.y="mean",geom="point",size=5) + 
    scale_x_continuous(breaks=c(4,6,8),labels=c("four","6","8")) + 
    scale_color_discrete(labels=labels) 

plot with point geometry overlay

+0

感謝您的迴應!是的,包括傳說中的NA在內甚至更好。我無法適應這裏創建的線圖,有什麼建議?:http://stackoverflow.com/questions/26452364/r-looking-at-means-by-subgroup-and-overall-on-a-line -graph/26452529#26452529 – garson 2014-10-20 14:54:02

+0

在您提到的示例中,圖例描述了從「vs」參數派生的線型。要更改線型標籤,請嘗試添加scale_linetype_manual(例如scale_linetype_manual(values = c(1,2),labels = c(「1」,「2」)))。我會更新答案 – etov 2014-10-20 15:22:54

+0

謝謝!有什麼方法可以將因素(vs)中的圖例標題更改爲其他內容?我想通過使用name =來改變因子(cyl)的標題。 – garson 2014-10-20 16:30:45