r - 条形图ggplot2问题
问题描述
我正在尝试使用 ggplot2 函数运行条形图。我想组织图表的方式如下:“幼虫”和“蛹”出现在 X 轴上,值指的是 Y 上每个“幼虫”和“蛹”类别中的 3 种处理轴。
下面是我想重现的示例,但仅考虑前两个变量“larva”和“pupa”。
library(ggplot2)
gap3 <- aggregate(dados$nmol.de.H2O2.consumido.mg.de.PTNA ~ dados$Var2 + dados$Tratamento, data=dados, FUN=mean)
x11()
ggplot(gap3, aes(x = dados$Var2, y = dados$nmol.de.H2O2.consumido.mg.de.PTNA, fill = factor(dados$Tratamento))) +
geom_col(position = "stack")
出现以下错误:
Erro: Aesthetics must be either length 1 or the same as the data (6): x, y and fill
我该如何解决?
解决方案
这个怎么样。我更改了数字变量名称以number
使其更易于使用。
# load the data
dados <- structure(list(Tratamento = c("Controle", "Controle", "Controle",
"Controle", "Controle", "Controle", "IMD Princ\xedpio Ativo",
"IMD Princ\xedpio Ativo", "IMD Princ\xedpio Ativo", "IMD Princ\xedpio Ativo",
"IMD Princ\xedpio Ativo", "IMD Princ\xedpio Ativo", "IMD Comercial",
"IMD Comercial", "IMD Comercial", "IMD Comercial", "IMD Comercial",
"IMD Comercial", "Controle", "Controle", "Controle", "Controle",
"Controle", "Controle", "IMD Princ\xedpio Ativo", "IMD Princ\xedpio Ativo",
"IMD Princ\xedpio Ativo", "IMD Princ\xedpio Ativo", "IMD Princ\xedpio Ativo",
"IMD Princ\xedpio Ativo", "IMD Comercial", "IMD Comercial", "IMD Comercial",
"IMD Comercial", "IMD Comercial", "IMD Comercial"), number = c(24477,
33825, 24225, 15736, 21058, 21508, 23038, 28528, 38876, 35282,
2466, 271, 18289, 15286, 23326, 18198, 19957, 22898, 9541, 12495,
9672, 9723, 11265, 7627, 10617, 8553, 8483, 8071, 11029, 9408,
10346, 13249, 9723, 11546, 9408, 9541), Var2 = c("Larva", "Larva",
"Larva", "Larva", "Larva", "Larva", "Larva", "Larva", "Larva",
"Larva", "Larva", "Larva", "Larva", "Larva", "Larva", "Larva",
"Larva", "Larva", "Pupa", "Pupa", "Pupa", "Pupa", "Pupa", "Pupa",
"Pupa", "Pupa", "Pupa", "Pupa", "Pupa", "Pupa", "Pupa", "Pupa",
"Pupa", "Pupa", "Pupa", "Pupa")), row.names = c(NA, -36L), class = "data.frame")
library(ggplot2)
library(grid)
# aggregate to get the mean
gap3 <- aggregate(number ~ Var2 + Tratamento, data=dados, FUN=mean)
# calculate proportions of the mean numbers
gap3 <- gap3 %>%
group_by(Var2) %>%
mutate(prop = number/sum(number))
# Make the main plot
g1 <- ggplot(gap3, aes(x = Var2, y = number, fill = as.factor(Tratamento))) +
geom_col(position = "stack") +
theme_classic() +
labs(fill="Tratamento", x="",
y="Number of Caste-biased Genes") +
theme(legend.position="top",
axis.text.x = element_text(angle = 45, hjust=1))
# make the inset plot
g2 <- ggplot(gap3, aes(x=Var2, y=prop, fill=as.factor(Tratamento))) +
geom_col(position="stack", show.legend=FALSE) +
theme_classic() +
theme(axis.title.x=element_blank(),
axis.text.x=element_blank(),
axis.ticks.x=element_blank()) +
labs(x="", y="Proportion")
# put them together
g1 + annotation_custom(ggplotGrob(g2), xmin=1.5, xmax=2.5, ymin=35000, ymax=60000)
推荐阅读
- firebase - 为什么 Firebase 会返回已删除的帐户?
- php - 使用 Selenium PHP 和 Laravel 执行期间未定义的类常量 'pageLoadStrategy' {"exception":"[object] 错误
- c - 这个指针数组是如何打印出这个意想不到的结果的?
- google-chrome-extension - 是否可以在发布给所有人之前只使用几个指定的用户来测试我的 chrome 扩展的新版本?
- python - Django“此字段是必需的。” 在邮递员
- ios - Twilio 通话暂停 ios
- asp.net-core - 在我的 .NET Core 3.1 站点中设置区域和路由 - 我的所有链接现在都只是文本。它们如何再次成为链接?
- python - 按组将行插入数据帧,并且条目来自另一个 dataframe_complex 匹配
- java - 使用响应列表获取数据 Retrofit/OkHttp
- javascript - UseEffect 被多次调用