使用ggplot2在R中创建条形图上的趋势线

wgeznvg7  于 2023-03-10  发布在  其他
关注(0)|答案(2)|浏览(187)

我试图创建一个具有直的趋势线的条形图,但无法显示趋势线。
我使用的是ggplot2包,下面是我当前的条形图代码:

library(ggplot2)

ggplot(mydf, aes(x=round, y=means, fill=round)) +
  geom_smooth(method=lm, se=FALSE, col="black", linewidth=2) + 
  geom_bar(stat="identity", color="black", position=position_dodge()) + 
  geom_errorbar(aes(ymin=means-se, ymax=means+se), width=.2, position=position_dodge(.9),) +
  theme_classic() + 
  xlab("Round") + 
  ylab("Bead Mass (g)") + 
  ggtitle("Verbal") + 
  theme(legend.position="none") + 
  geom_smooth(method=lm, se=FALSE, col="black", linewidth=2)

我不知道geom_smooth()部分为什么不工作。有什么想法吗?请参见图表查看输出

bjg7j2ky

bjg7j2ky1#

有两件事会阻止绘制平滑,第一件事是x轴看起来是一个因子,因此需要将其转换为一个数值变量ke,第二件事是ggplot会自动将不同的填充(来自一个因子)视为单独的组,因此需要为平滑层覆盖这一点,给出:

library(ggplot2)

#Example data similar to the plot shown
mydf <- data.frame(round=factor(1:5), means=c(102, 75, 73, 95, 120), se=15)

ggplot(mydf, aes(x=as.numeric(round), y=means, fill=round)) +
   geom_bar(stat="identity", color="black", position=position_dodge()) + 
  geom_errorbar(aes(ymin=means-se, ymax=means+se), width=.2, position=position_dodge(.9),) +
  theme_classic() + 
  xlab("Round") + 
  ylab("Bead Mass (g)") + 
  ggtitle("Verbal") + 
  theme(legend.position="none") + 
  geom_smooth(aes(fill=NULL),  method=lm, se=FALSE, col="black", linewidth=2)

7vux5j2d

7vux5j2d2#

绘图的离散填充比例显示用于xfillround变量不是numeric,从而使geom_smooth无法正常工作。

问题重现
library(dplyr)
library(ggplot2)

mydf <- iris %>%
  mutate(round = as.character(as.numeric(as.factor(Species)))) %>%
  group_by(round) %>% 
  summarise(means = mean(Sepal.Length),
            se = sd(Sepal.Length)/sqrt(n())) %>%
  ungroup()

mydf
# A tibble: 3 x 3
  round means     se
  <chr> <dbl>  <dbl>
1 1      5.01 0.0498
2 2      5.94 0.0730
3 3      6.59 0.0899
ggplot(mydf, aes(x=round, y=means, fill=round)) +
  geom_smooth(method=lm, se=FALSE, col="black", linewidth=2) + 
  geom_bar(stat="identity", color="black", position=position_dodge()) + 
  geom_errorbar(aes(ymin=means-se, ymax=means+se), width=.2, position=position_dodge(.9),) +
  theme_classic() + 
  xlab("Round") + 
  ylab("Bead Mass (g)") + 
  ggtitle("Verbal") + 
  theme(legend.position="none") + 
  geom_smooth(method=lm, se=FALSE, col="black", linewidth=2)

溶液
  • x变量转换为全局aes中的numeric,并删除填充美学
  • 仅在geom_baraes中指定fill美学规范
ggplot(mydf, aes(x=as.numeric(round), y=means)) +
  geom_smooth(method=lm, se=FALSE, col="black", linewidth=2) + 
  geom_bar(aes(fill = round), stat="identity", color="black", position=position_dodge()) + 
  geom_errorbar(aes(ymin=means-se, ymax=means+se), width=.2, position=position_dodge(.9),) +
  theme_classic() + 
  xlab("Round") + 
  ylab("Bead Mass (g)") + 
  ggtitle("Verbal") + 
  theme(legend.position="none") + 
  geom_smooth(method=lm, se=FALSE, col="black", linewidth=2)

相关问题