首页 > 解决方案 > “不是 gg/ggplot 类的 S3 对象”错误

问题描述

我收到以下错误:

错误:data必须是数据框或其他可 fortify()强制转换的对象,而不是 gg/ggplot 类的 S3 对象

这是我的代码,它与不同的数据集完美配合:

household_income <- ggplot(household_income, aes(nationality, avg_income))
household_income + 
  geom_boxplot(aes(fill=factor(nationality))) + 
  geom_dotplot(binaxis='y', 
               stackdir='center',
               binwidth = 1,
               dotsize = .45, 
               fill="red") +
  theme(axis.text.x = element_text(angle=0, vjust=.9))

我实际上是在尝试在这里复制 Box_Dot 图

标签: rggplot2

解决方案


您也可以使用中常用的管道 ( %>%)dplyr将数据传递给ggplot

制作示例data.frame:

household_income = data.frame(
   nationality =sample(1:5,100,replace=TRUE),
   avg_income = rnbinom(100,mu=50,size=1)
)

不知道您的 data.frame (因此请提供它以使其成为最小可重复的示例),为了geom_dotplot()覆盖boxplot(),国籍必须是一个因素。我曾经mutate()在下面动态分解它。你在箱线图上设置了一个较低的 alpha 来查看这些点:

library(ggplot2)
library(magrittr)

household_income %>% 
mutate(nationality=factor(nationality)) %>% 
ggplot(aes(nationality, avg_income))+ 
geom_boxplot(aes(fill=nationality),alpha=0.1) + 
geom_dotplot(binaxis='y',stackdir='center',dotsize=0.45,fill='red') + 
theme_bw()

在此处输入图像描述


推荐阅读