2015-09-28 594 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