如何在堆叠的条形图中选择所需的数据

时间:2018-07-02 21:45:41

标签: r ggplot2

已经有一段时间了。

我想绘制一个堆叠的条形图,在x轴上显示月份,在y轴上显示值。

我的数据框看起来像这样,但是我大约有90行。

编辑数据示例:

data <- data.frame(
  x = sample(c("a","b"), 24, replace = TRUE),
  y = sample(c("a","b","c","d"), 24, replace = TRUE),
  z = sample(1:24)
)

我认为类似这样的方法应该可以起到近似作用。

[![在此处输入图片描述] [1]] [1]

数字变量的值将显示在条形图上,XDURAC值将显示为文本在条形图上。

基本上,我想要类似的图,但在行进的“ 19”栏上具有“ 19DURAC”值(例如5.04),而不是表示为条。

要制作此dfr adn图,我使用了以下代码:

durac_v3 <- durac_v2
library("reshape", lib.loc="~/R/win-library/3.5")
durac_v3$MESES <- row.names(durac_v3)
mdfr <- melt(as.data.frame(durac_v3, id.vars="MESES"))

library(scales)
p <- ggplot(mdfr, aes(mdfr$MESES, value, fill = variable)) +
  geom_bar(position = "fill", stat = "identity") +
  scale_y_continuous(labels = percent)

好吧,这是一个很大的修改。伙计们,很抱歉,自从我使用R或堆栈以来已经很长时间了。从这里阅读

数据帧将是这样:

data <- data.frame(
  x = sample(c(1:12), 80, replace = TRUE),
  y = sample(c("19","19DURAC","50","50DURAC","PUSH","PUSHDURAC","GRATIS","GRATISDURAC"), 80, replace = TRUE),
  z = sample(1:80)
)

x是一年中的月份(1月:1月,12月:12月),y是分类变量(例如,州名),z是其值(花费的时间) DURAC结尾的每个单词都包含一些内容,彼此之间的人数相同)。

首先,我想要一个堆积的条形图,其中月份在x轴上。 其次,对于我的y列,我的条形图仅表示数据的值而没有DURAC结尾。这意味着1950PUSHGRATIS。 第三,我希望将19DURAC值表示为条形19上的注释,将50DURAC值表示为50上的等等,依此类推。

再次,如果我不解释自己,我很抱歉。我有点生锈。

DPUT的输出

dput(head(mdfr))
structure(list(MESES = c("1", "2", "3", "4", "5", "6"), variable = structure(c(1L, 
1L, 1L, 1L, 1L, 1L), .Label = c("19", "19DURAC", "50", "50DURAC", 
"PUSH", "PUSHDURAC", "GRATIS", "GRATISDURAC"), class = "factor"), 
    value = c(NA, NA, 1431, 982, 766, NA)), row.names = c(NA, 
6L), class = "data.frame")

1 个答案:

答案 0 :(得分:1)

如果您可以使用dplyr而不是reshape,则以下解决方案应基于您共享的数据集的图片起作用

library(ggplot2)
library(scales)
library(dplyr)
durac_v3 %>% 
  group_by(MESES, variable) %>% 
  summarise(value = sum(value, na.rm = TRUE)) %>% 
ggplot(aes(MESES, value, fill = variable)) +
  geom_col(position = "fill") +
  scale_y_continuous(labels = percent) +
  geom_text(aes(x = MESES, y = value, label = value), position = "fill", vjust = 2)
相关问题