简体   繁体   English

如何在R中绘制堆积条形图?

[英]How to plot a stacked bar plot in R?

I have a sample data like this: It looks simple but I can't figure the way out, I'm new to R. Please help! 我有一个这样的示例数据:看起来很简单,但我找不到出路,我是R的新手。请帮助!

clust4   catch
    1  131711493
    2   41683530
    3  143101724
    4   35849946 

How can I get a stacked bar plot which shows the percentage of each cluster by the value of the catch column? 如何获得堆积的条形图,以catch列的值显示每个群集的百分比? and get the legend name like this below: 并获得以下图例名称:

group(legend name)
Cluster1
Cluster2
Cluster3
Cluster4

I have tried many times but it just showed 4 different stacked bar plots and also couldn't change the legend name from 1,2,3,4 to cluster 1,...) 我已经尝试了很多次,但它只显示了4种不同的堆叠条形图,并且也无法将图例名称从1,2,3,4更改为簇1,...)

Sorry for not inserting any photo because I don't have enough reputation to do that. 很抱歉没有插入任何照片,因为我没有足够的声誉。

This is the basic code for stacked bar plot in R using ggplot2 library change the variables according to your dataset and plot it 这是使用ggplot2库在R中堆叠条形图的基本代码,请根据您的数据集更改变量并进行绘制

# library
  library(ggplot2)

# create a dataset
specie=c(rep("sorgho" , 3) , rep("poacee" , 3) , rep("banana" , 3) , 
rep("triticum" , 3) )
condition=rep(c("normal" , "stress" , "Nitrogen") , 4)
value=abs(rnorm(12 , 0 , 15))
data=data.frame(specie,condition,value)

# Grouped
ggplot(data, aes(fill=condition, y=value, x=specie)) +
geom_bar(position="dodge", stat="identity")

# Stacked
ggplot(data, aes(fill=condition, y=value, x=specie)) +
geom_bar( stat="identity")

# Stacked Percent
ggplot(data, aes(fill=condition, y=value, x=specie)) +
geom_bar( stat="identity", position="fill")

Solution1: ggplot2 解决方案1:ggplot2

library(tidyverse)
df %>% mutate(catch = catch / sum(catch),
              clust4 = paste0("Cluster-", clust4)) %>%
  ggplot(aes(x = "", y = catch, fill = clust4)) +
  geom_bar(stat = "identity", color = "black") +
  coord_flip()

在此处输入图片说明


Solution2: graphics 解决方案2:图形

prop <- df$catch / sum(df$catch)
color <- RColorBrewer::brewer.pal(4, "Set2")
barplot(as.matrix(prop), horiz = T, col = color,
        xlim = c(0, 1.2), ylim = c(-0.5, 2),
        legend.text = paste0("Cluster-", 1:4),
        args.legend = list(x = "right", bty = "n"))

在此处输入图片说明


Color Proportion 颜色比例

     clust4     catch
1 Cluster-1 0.3738122
2 Cluster-2 0.1183026
3 Cluster-3 0.4061390
4 Cluster-4 0.1017462

Data 数据

df <- read.table(text = "clust4      catch
                              1  131711493
                              2   41683530
                              3  143101724
                              4   35849946", header = T)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM