r - 按类别划分的水平条形图

标签 r plot bar-chart

我有以下数据框

A <- c(2020, 2020, 2020, 2021, 2021, 2021)
B <- c("category 1", "category 2", "category 3", "category 1", "category 2", "category 3")
C <- c(7, 10, 5, 11, 8, 7)

data <- data.frame(A, B, C)
names(data) <- c("yeat", "categories", "value")

如何绘制水平条形图,如下所示(即类别按每年的值排序):

horizental bar chart

最佳答案

lapply中使用barplot。按年份分割数据,并根据顺序绘制。我们还根据此方案提供条形 col=ors 以及使用 mtext 的标签。

颜色和标签可以方便地存储在矩阵 m 中,其中行名称按类别划分,以便我们以后可以轻松匹配。

(m <- matrix(c('#3C79A7', '#8ECBE9', '#FB4C58',
              "Category 1", "Category 2", "Category 3"), 3, 2,
            dimnames=list(sort(unique(data$categories)), NULL)))
#                    [,1]      [,2]        
# category 1 "#3C79A7" "Category 1"
# category 2 "#8ECBE9" "Category 2"
# category 3 "#FB4C58" "Category 3"

S <- split(data, data$year)
    
op <- par(mfrow=c(1, 2), mar=c(2, 6, 4, 2))  ## par: 2 plots, expand margins

lapply(names(S), \(x) {
  s <- S[[x]]
  u <- order(s$value)
  barplot(s$value[u], horiz=TRUE, col=m[s$categories[u], 1], border=NA,
          main=x[1], xaxt='n', yaxt='n', ylab='')
  mtext(m[s$categories[u], 2], 2, 1, at=seq_len(nrow(s)), las=2)
})

par(op)  ## reset pars

enter image description here


数据:

data <- structure(list(year = c(2020, 2020, 2020, 2021, 2021, 2021), 
    categories = c("category 1", "category 2", "category 3", 
    "category 1", "category 2", "category 3"), value = c(7, 10, 
    5, 11, 8, 7)), class = "data.frame", row.names = c(NA, -6L
))

关于r - 按类别划分的水平条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71536681/

相关文章:

r - 如何在两种不同类型的几何图形上创建图例ggplot2

java - 将 R 接口(interface)到 Java

python - 使用轴显示相关矩阵

java - MPAndroidChart 条形图 - 如何在组之间以随机 x 轴间隔对条形进行分组?

debugging - 上移一帧,调试R环境

r - 从整数向量构建一个更长的向量,包括与原始整数的距离最多为 10 的所有整数

r - 如何制作我在此处发布的 PCA 图

r - 更改 qplot (R) 中的图例大小

matlab - 我怎样才能让我的堆栈溢出?

d3.js - 堆叠条形图 d3.js 的每个条上的文本