r中具有4个变量的分组条形图

问题描述 投票:0回答:1

我是r的初学者,我一直在努力寻找如何绘制此图形的方法。

我有四个变量(五个地方的砾石百分比,沙子的百分比,淤泥的百分比)。我正在尝试绘制每个站点(x)中这3种沉积物(y)的百分比。因此,在x轴上有5组,每组3条。


   Station   % gravel    % sand      % silt
1   PRA1    28.430000   70.06000    1.507000
2   PRA3    19.515000   78.07667    2.406000
3   PRA4    19.771000   78.63333    1.598333
4   PRB1    7.010667    91.38333    1.607333
5   PRB2    18.613333   79.62000    1.762000 

我尝试用以下方式绘制分组的条形图

grao <- read_excel("~/Desktop/Masters/Data/grao.xlsx")
colors <- c('#999999','#E69F00','#56B4E9','#94A813','#718200')
barplot(table(grao$Station, grao$`% gravel`, grao$`% sand`, grao$`% silt`), beside = TRUE, col = colors)

但是此错误消息不断发生:

'height'必须是向量或矩阵

我也尝试过

ggplot(grao, aes(Station, color=as.factor(`% gravel`), shape=as.factor(`% sand`))) + 
geom_bar() + scale_color_manual(values=c('#999999','#E69F00','#56B4E9','#94A813','#718200')+ theme(legend.position="top")

但是它正在创建疯狂的图形。

有人可以帮我吗?我已经被困在这一个星期了。

欢呼声

r bar-chart
1个回答
0
投票

我认为这可能是您要寻找的:

#install.packages("tidyverse")
library(tidyverse)
df <-  data.frame(
  station = c("PRA1", "PRA3", "PRA4", "PRB1", "PRB2"),
  gravel = c(28.4, 19.5, 19.7, 7.01, 18.6),
  sand = c(70.06, 78.07, 78.63, 91, 79),
  silt = c(1.5, 2.4, 1.6, 1.7, 1.66)
)

df2 <- df %>% 
  pivot_longer(cols = c("gravel", "sand", "silt"), names_to = "Sediment_Type", values_to = "Percentage")

ggplot(df2) +
  geom_bar(aes(x = station, y = Percentage, fill = Sediment_Type ), stat = "identity", position = "dodge")

您需要“延长”数据集。整洁的方法之一是确保所有列都代表一个变量。您会在初始数据帧中注意到,每个列名都是一个变量(“ Sediment_type”),每个列填充仅是每个变量的百分比(“ Percentage”)。函数pivot_longer()获取一个数据集,并允许其中一个收集所有列,然后将它们仅分为两列-身份和值。

完成此操作后,ggplot将允许您指定x轴,然后通过“填充”指定分组变量。您可以切换这两个。如果最终有大量数据和分组变量,则切面也是值得一看的选项!

希望这会有所帮助,

布伦南

© www.soinside.com 2019 - 2024. All rights reserved.