2017-08-03 49 views
2

權衡stat_smooth與值的數量的倒數給出的例子箱線像這樣GGPLOT2:我如何在GGPLOT2

ggplot(diamonds, aes(carat, price)) + 
    geom_boxplot(aes(group = cut_width(carat, 0.25)), outlier.alpha = 0.1) + 
    stat_smooth(method="lm", formula = y ~ poly(x,2), n= 40, se=TRUE, color="red", aes(group=1), size=1.5) 

我得到的是這樣一個形象:enter image description here

然而, stat_smooth線受到每個克拉類別中點數的很大影響。我寧願平等地對待每個類別,這意味着,在我看來,用一個特定的克拉值對每個點加權,與具有該值的總點數的倒數相加。 (所以,在5點時,該點的權重應爲1,在1點時,該點的權重應爲1/aBigNumber)。我已經嘗試過重量審美的情節,但它打破了盒狀圖。我試着加入權衡順利,但我得到一個錯誤:

Error: ggplot2 doesn't know how to deal with data of class uneval

所以,我怎麼重量平滑功能,這樣的類別都一視同仁(即逆點的數量該類別),並仍然保持輸出中的boxplot?

回答

2

你可以做這樣的事情......

library(dplyr) 
diamonds2 <- diamonds %>% mutate(cutcarat=cut_width(carat, 0.25)) %>% 
          group_by(cutcarat) %>% 
          summarise(carat=mean(carat), price=mean(price)) 
ggplot() + 
     geom_boxplot(data=diamonds, 
        aes(x=carat, y=price, group = cut_width(carat, 0.25)), 
        outlier.alpha = 0.1) + 
     geom_smooth(data=diamonds2, 
        aes(x=carat, y=price), method="lm", 
        formula = y ~ poly(x,2), n= 40, se=TRUE, color="red", size=1.5) 

enter image description here

+1

正如怎麼在這裏上的解釋:平滑函數擬合到具有值範圍和平均輸出矩陣對於這個數值範圍,本質上給出一個曲線擬合相等的加權值,因爲在每個點上只有一個。 – MrSampson