2015-07-10 82 views
1

我想用stat_summary()geom="line"geom="point"畫點1點的大小比線尺寸更大

對於我用下面的函數來繪製一個情節ggplot

drawPlot <- function(...) ggplot2::ggplot(...) + 
    stat_summary(fun.y=mean, geom="line") + 
    stat_summary(fun.y=mean, geom="point") + 
    scale_size_manual(values = c(0.5, 0.8, 1.2, 2, 3, 4, 5)) 

使用此功能時,我這樣做:

drawPlot(data = metric_sum, aes(x = x_metric, y=summedValue, size=as.factor(clusteringDistance))) 

我得到一個具有不同大小的線,並沒有任何點的情節。


相反,我想有一個圖,其中線將具有點爲好,這些點是1種尺寸比線本身更大,所以他們很明顯。

我相信這可以通過單獨繪製每個繪圖(不使用drawPlot函數)並對stat_summary(geom="point")執行aes來實現。

是否可以在drawPlot函數中實現相同功能?

回答

2

這些點正在繪製,但它們與線條顏色和大小相同,因此您無法看到它們。你可以在下面的例子中看到這個,你的代碼稍微改變了,以使用內置的mtcars數據幀。該線和點繪製在不同的顏色和點現在是可見:

drawPlot <- function(...) ggplot2::ggplot(...) + 
    stat_summary(fun.y=mean, geom="line", colour="grey40") + 
    stat_summary(fun.y=mean, geom="point", colour="yellow") + 
    scale_size_manual(values = c(1:3)) 

drawPlot(data = mtcars, aes(x = wt, y=mpg, size=as.factor(gear))) 

enter image description here

我不知道是否有設置線和點大小在兩個獨立的審美映射的方式,因爲它們都是同一個美學的關鍵。但這裏有一個快速入門,可能至少讓你開始朝着你想去的方向發展:

gear有三個層次。因此,在致電geom_point之前,我們在將齒輪轉化爲一個因子之前將齒輪值增加3。這有效地增加了三個新的水平gear在情節,總共六個級別。前三個級別適用於這些行,並且接下來的三個級別適用於這些點。然後我們可以在scale_size_manual的調用中獨立設置它們的尺寸。 (這攪亂傳說,但我不知道如何處理與不訴諸下級grid功能。)

drawPlot2 <- function(...) ggplot2::ggplot(...) + 
    stat_summary(fun.y=mean, geom="line", aes(size=factor(gear)), colour="grey40") + 
    stat_summary(fun.y=mean, geom="point", aes(size=factor(gear + 3)), 
       pch=21, fill="yellow", colour="black") + 
    scale_size_manual(values = c(1,1.5,2,2,3,4)) 

drawPlot2(data = mtcars, aes(x = wt, y=mpg)) 

enter image description here

+0

了不起的答案!除了它破壞我的傳奇,否則完美! – cross