条形图ggplot2问题
Bar chart ggplot2 problems
我正在尝试使用 ggplot2 函数 运行 条形图。
我想要组织图表的方式如下:
“幼虫”和“蛹”出现在 X 轴上,值指的是 Y 轴上“幼虫”和“蛹”类别中每个类别的 3 种处理方法。
下面是我想重现的例子,但只考虑了前两个变量“幼虫”和“蛹”。
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)
我正在尝试使用 ggplot2 函数 运行 条形图。 我想要组织图表的方式如下: “幼虫”和“蛹”出现在 X 轴上,值指的是 Y 轴上“幼虫”和“蛹”类别中每个类别的 3 种处理方法。
下面是我想重现的例子,但只考虑了前两个变量“幼虫”和“蛹”。
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)