2015-09-28 136 views
2

是否可以使用geom_line绘制不同尺寸(即粗线)的线条?ggplot2的线条不同的尺寸geom_line

尺寸参数是用于所有行是相同的,而不管该组:

bp <- ggplot(data=diamonds, aes(x=cut, y=depth)) + 
    geom_line(aes(color=cut), size=1) 

但是,我想线的厚度,以反映它们的相对重要性测量为观测数目:

relative_size <- table(diamonds$cut)/nrow(diamonds) 
bp <- ggplot(data=diamonds, aes(x=cut, y=depth)) + 
    geom_line(aes(color=cut), size=cut) 
bp 
# Error: Incompatible lengths for set aesthetics: size 

有趣的是,geom_line(..., size=cut)有效,但并不如预期,因为它根本不会改变线条大小。

+3

你可以把'大小= ....'了'aes'内。 – Heroka

+0

@贺冈,你想提供一个答案,我可以接受它吗? – MERose

+0

@梅尔LyzandeR已经提供了一个答案,你可以接受一个答案。 –

回答

3

为了做到这一点,您需要为relative_size创建一个新的变量,其长度与data.frame的行长度相同,并将其添加到data.frame中。为了做到这一点,你可以这样做:

#convert relative_size to a data.frame 
diams <- diamonds 
relative_size <- as.data.frame(table(diamonds$cut)/nrow(diamonds)) 

#merge it to the diams data.frame so that it has the same length 
diams <- merge(diams, relative_size, by.x='cut', by.y='Var1', all.x=TRUE) 

注意上面的可以通过代码来取代使用dplyr

diamonds %>% group_by(cut) %>% mutate(size = length(cut)/nrow(diamonds)) 

然后,你需要遵循@Heroka“在aes的内部使用您的建议和使用大小,在您的diams数据中新建立了一列。框架:

bp <- ggplot(data=diams, aes(x=cut, y=depth)) + 
    geom_line(aes(color=cut, size=Freq)) 
bp 

而且它的工作原理:

enter image description here

+1

增加了一些'dplyr'代码,可以简化你对'table'和'merge'的调用。 –

+0

@PaulHiemstra酷感谢,这将更快:) – LyzandeR

+0

'Freq'初始化在哪里? – Kulluk007