【问题标题】:Stacked bar chart across multiple columns跨多个列的堆积条形图
【发布时间】:2017-12-13 20:36:17
【问题描述】:

我设法将我的初始数据集转换为这种形式:

   ElemId total_count coef_true coef_false coef_ratio
 1  a1           2         2          0          1
 2  a2           4         4          0          1
 3  a3           1         1          0          1
 4  a4           5         5          0          1
 5  a5           1         1          5          1
 6  a6           4         4          0          1
 7  a7           4         4          3          1
 8  a8           2         2          2          1
 9  a9           3         3          1          1
10  a10           1         1          4          1

现在我想要实现的是使用 ggplot 在单个条形图上绘制显示 coef_true 和 coef_false 的堆叠条形图,同时保持 coef_ratio 的顺序。有没有办法在不进一步转换数据集的情况下做到这一点?

编辑。 修改数据是可以的,虽然我尝试使用带有 melt(valves, measure.vars=c("init_true", "init_false")) 的融化并且条形图似乎松散了 coef_ratio 的顺序。

【问题讨论】:

  • 您不允许任何melt 操作,对吧?第二件事 - 你想要两个条在每个条中为ElemId 使用不同的颜色,对吗?
  • 对不起,我的陈述很不准确。我担心数据操作会破坏数据的顺序,我允许融化等,但我只想为每个 ElemId 制作一个带有 coefs 的图表,同时保留从 1 到 0 的 coef_ratio 的条形顺序
  • 你能显示足够的数据或同时具有coef_ratio 1 和0 等的子集吗?

标签: r ggplot2


【解决方案1】:

如果我理解正确,您想在 ElemId 上绘制 coef 值,其中 ElemIdcoef_ratio 重新排序。如果是这种情况,您可以执行以下操作:

library(tidyverse)

df %>% 
  gather(key, value, -c(coef_ratio, ElemId, total_count)) %>% 
  ggplot(aes(reorder(ElemId, coef_ratio), value)) +
  geom_col(aes(fill = key)) +
  labs(x = "ElemId reordered by coef_ratio")

我修改了数据,使 ElemId a10coef_ratio 为 0 以显示 x 轴的重新排序。

text <- "ElemId total_count coef_true coef_false coef_ratio
       1   a1           2         2          0          1
       2   a2           4         4          0          1
       3   a3           1         1          0          1
       4   a4           5         5          0          1
       5   a5           1         1          5          1
       6   a6           4         4          0          1
       7   a7           4         4          3          1
       8   a8           2         2          2          1
       9   a9           3         3          1          1
       10  a10          1         1          4          0"

df <- read.table(text = text, header = TRUE, stringsAsFactors = FALSE)

【讨论】:

    猜你喜欢
    • 2021-10-07
    • 2022-08-12
    • 1970-01-01
    • 2018-09-22
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    相关资源
    最近更新 更多