2017-01-04 42 views
2

我讀哈德利韋翰的ggplot2 book,並希望得到我的解決方案意見的練習一個地塊之間的共同傳說:創建從子集

6.5.1節
練習1

以下代碼創建兩幅mpg數據集圖。修改代碼,以便圖例和座標軸相匹配,而無需使用facetting!

fwd <- subset(mpg, drv == "f") 
rwd <- subset(mpg, drv == "r") 
ggplot(fwd, aes(displ, hwy, colour = class)) + geom_point() 
ggplot(rwd, aes(displ, hwy, colour = class)) + geom_point() 

enter image description here 這裏是我的解決方案:

ggplot(fwd, aes(displ, hwy, colour = class)) + 
    geom_point() + 
    lims(x = c(0, 7), y = c(0, 45)) + 
    geom_point(aes(colour = class), alpha = 0, data = mpg) + 
    guides(colour = guide_legend(override.aes = list(alpha = 1))) 

ggplot(rwd, aes(displ, hwy, colour = class)) + 
    geom_point() + 
    lims(x = c(0, 7), y = c(0, 45)) + 
    geom_point(aes(colour = class), alpha = 0, data = mpg) + 
    guides(colour = guide_legend(override.aes = list(alpha = 1))) 

enter image description here 我覺得我的想法很聰明,但它不會是有效的更大的數據集。有沒有更直接的方法來解決這個問題?或者這是練習所針對的目標?

+1

問題:它會影響軸的限制。它創造了無形的點。那些混亂輸出文件和一些設備有alpha透明度的問題。從概念上講,添加新數據以實現數據集的不同表示不能成爲ggplot2中的解決方案。這樣的解決方案不符合圖形語法。 – Roland

回答

2

只需使用drop = FALSE即可保留所有因子水平。您的解決方案

mpg$class <- as.factor(mpg$class) # convert to factor 
fwd <- subset(mpg, drv == "f") 
rwd <- subset(mpg, drv == "r") 
ggplot(fwd, aes(displ, hwy, colour = class)) + geom_point() + scale_colour_discrete(drop=FALSE) 
ggplot(rwd, aes(displ, hwy, colour = class)) + geom_point() + scale_colour_discrete(drop=FALSE) 

enter image description here

+0

謝謝!我知道會有更直接的事情。 – Novice