我是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")
但是它正在创建疯狂的图形。
有人可以帮我吗?我已经被困在这一个星期了。
欢呼声
我认为这可能是您要寻找的:
#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轴,然后通过“填充”指定分组变量。您可以切换这两个。如果最终有大量数据和分组变量,则切面也是值得一看的选项!
希望这会有所帮助,
布伦南