首页 > 解决方案 > 条形图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

我该如何解决?

标签: rggplot2graphicsstatisticsdata-analysis

解决方案


这个怎么样。我更改了数字变量名称以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)

在此处输入图像描述


推荐阅读