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