【问题标题】:Plot bar chart by group side-by-side with ggplot2 in R [duplicate]在R中与ggplot2并排绘制条形图[重复]
【发布时间】:2022-01-01 10:44:55
【问题描述】:

我在 R 中有一个具有以下数据集结构(虚拟数据)的数据框:

Years    Spain     Russia     Malta
1995     31.3      45         84.3
2009     32.4      4          90

我希望将其绘制在条形图中,其中 X 是年份,对于 1995 年,每个国家/地区的值由并排的垂直条表示,与 2009 年相同。我的绘图代码数据是:

ggplot(data, aes(x = years)) +
  geom_histogram(binwidth=1, position="dodge") +
  theme_minimal()

但是,我的条形图绘制如下图所示,1) XX 每年之间的位置,2) 没有颜色来区分国家和 3) 这 3 个国家显然不是每年并​​排的。我如何在 R 中表示这一点?

【问题讨论】:

    标签: r ggplot2 plot bar-chart histogram


    【解决方案1】:

    更新:基础 R 版本:

    row.names(df) <- df$Years
    df <- df[ , 1:ncol(df)]
    df <- as.matrix(df)
    
    barplot(height = df[,-1], 
            col = row.names(df),
            legend = rownames(df),
            args.legend = list(x = "topleft"),
            beside = TRUE)
    
    

    你需要的是geom_bargeom_col 而不是geom_histogram

    首先使用pivot_longer 提供长格式数据 然后将geom_colposition = "dodge 一起使用:

    library(tidyverse)
    
    df %>% 
      pivot_longer(
        -Years
      ) %>% 
      ggplot(aes(x = factor(Years), y= value, fill=name))+
      geom_col(position = "dodge")
    
    

    【讨论】:

    • y=value 是什么?这些值是每个国家/地区的多个值。我应该在里面放什么?如果没有 tidy verse 包,我怎么能做到这一点?
    • 请看我的更新!