R:使用ggplot2平滑条形图中的分格数据

R:使用ggplot2平滑条形图中的分格数据,r,ggplot2,bar-chart,smoothing,density-plot,R,Ggplot2,Bar Chart,Smoothing,Density Plot,数据描述了商品(苹果和香蕉)在Villariba和Villabajo两个村庄之间道路沿线树木上的分布情况,这两个村庄长4000多米。数据要么已经装箱(即每500米汇总一次),要么位置误差较大,因此500米装箱是自然的。我们希望通过核平滑将它们处理并绘制为平滑的后事实分布。在ggplot2包中,有两种明显的方法可以做到这一点。首次读取数据(长格式) 每种方法都有缺点。叠加密度图(底部图形)是最理想的设计,但选项stat=“identity”(因为数据是分箱的)无法像正常情况那样创建外观良好的平滑

数据描述了商品(苹果和香蕉)在Villariba和Villabajo两个村庄之间道路沿线树木上的分布情况,这两个村庄长4000多米。数据要么已经装箱(即每500米汇总一次),要么位置误差较大,因此500米装箱是自然的。我们希望通过核平滑将它们处理并绘制为平滑的后事实分布。在
ggplot2
包中,有两种明显的方法可以做到这一点。首次读取数据(长格式)

每种方法都有缺点。叠加密度图(底部图形)是最理想的设计,但选项
stat=“identity”
(因为数据是分箱的)无法像正常情况那样创建外观良好的平滑分布。
stat\u smooth()
选项提供了近乎完美的曲线,但这些只是曲线。那么:如何将密度图的着色和平滑函数的平滑结合起来呢?这是在geom_density()中平滑数据,或者在
stat_smooth()
曲线下用半透明颜色填充空间?

这里有一种方法:

library(ggplot2)
p2 <-  ggplot(databas, aes(dist ,val ,fill = stuff)) + stat_smooth(aes(y = val,x = dist), method = "gam",se = FALSE,formula = y ~ s(x, k = 7))
添加带有
geom_区域的颜色

p2 + geom_area(data = p2_fill[p2_fill$group == "apples", ], 
                   aes(x=x, y=y), fill = "red", alpha = 0.2)+
  geom_area(data = p2_fill[p2_fill$group == "bananas", ], 
            aes(x=x, y=y), fill = "blue", alpha = 0.2)

完整答案:

ggplot(databas, aes(dist, val, color = stuff))+
  stat_smooth(aes(y = val,x = dist), method = "gam",se = FALSE, formula = y ~ s(x, k = 7))+
  geom_area(data = p2_fill[p2_fill$group == "apples", ], 
            aes(x=x, y=y), fill =  "#F8766D", alpha = 0.2, inherit.aes = F)+
  geom_area(data = p2_fill[p2_fill$group == "bananas", ], 
            aes(x=x, y=y), fill = "#00BFC4", alpha = 0.2, inherit.aes = F)+
  theme_classic()
这里有一种方法:

library(ggplot2)
p2 <-  ggplot(databas, aes(dist ,val ,fill = stuff)) + stat_smooth(aes(y = val,x = dist), method = "gam",se = FALSE,formula = y ~ s(x, k = 7))
添加带有
geom_区域的颜色

p2 + geom_area(data = p2_fill[p2_fill$group == "apples", ], 
                   aes(x=x, y=y), fill = "red", alpha = 0.2)+
  geom_area(data = p2_fill[p2_fill$group == "bananas", ], 
            aes(x=x, y=y), fill = "blue", alpha = 0.2)

完整答案:

ggplot(databas, aes(dist, val, color = stuff))+
  stat_smooth(aes(y = val,x = dist), method = "gam",se = FALSE, formula = y ~ s(x, k = 7))+
  geom_area(data = p2_fill[p2_fill$group == "apples", ], 
            aes(x=x, y=y), fill =  "#F8766D", alpha = 0.2, inherit.aes = F)+
  geom_area(data = p2_fill[p2_fill$group == "bananas", ], 
            aes(x=x, y=y), fill = "#00BFC4", alpha = 0.2, inherit.aes = F)+
  theme_classic()

如果您喜欢您的
gam
拟合,可以使用
geom\u功能区内的
stat=“smooth”
绘制曲线。诀窍是将
ymin
设置为0,将
ymax
设置为
.y..
,这是由预测线
stat\u smooth
创建的特殊变量

ggplot(databas, aes(x = dist, y = val, fill = stuff)) +
    geom_ribbon(stat = "smooth", aes(ymin = 0, ymax = ..y..), alpha = .5,
                method = "gam", se=FALSE, formula = y ~ s(x, k = 7))

如果您喜欢您的
gam
拟合,可以使用
geom\u功能区内的
stat=“smooth”
绘制曲线。诀窍是将
ymin
设置为0,将
ymax
设置为
.y..
,这是由预测线
stat\u smooth
创建的特殊变量

ggplot(databas, aes(x = dist, y = val, fill = stuff)) +
    geom_ribbon(stat = "smooth", aes(ymin = 0, ymax = ..y..), alpha = .5,
                method = "gam", se=FALSE, formula = y ~ s(x, k = 7))