2015-07-10 53 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