堆栈条形图是和没有答案的数量

时间:2018-03-25 14:39:37

标签: r ggplot2

可以使用以下代码生成堆栈条形图:

library(ggplot2)
Year      <- c(rep(c("2006-07", "2007-08", "2008-09", "2009-10"), each = 4))
Category  <- c(rep(c("A", "B", "C", "D"), times = 4))
Frequency <- c(168, 259, 226, 340, 216, 431, 319, 368, 423, 645, 234, 685, 166, 467, 274, 251)
Data      <- data.frame(Year, Category, Frequency)
library(ggplot2)
ggplot(Data, aes(x = Year, y = Frequency, fill = Category, label = Frequency)) +
  geom_bar(stat = "identity") +
  geom_text(size = 3, position = position_stack(vjust = 0.5))

我的案例有3列类别,yes和no aswers的数量为两个独立的列。

我想创建一个这样的图表,但是关于频率。 我在catA栏中的含义是yes和no。其他两个类别相同。

category <- c("catA", "catB", "catC")
yes <- c(124, 50, 23)
no <- c(21,42,62)
df <- data.frame(category, yes, no)

如何转换代码?

作为示例输出:

library(ggplot2)
Year      <- c(rep(c("2006-07", "2007-08"), each = 2))
Category  <- c(rep(c("A", "B"), times = 2))
Frequency <- c(168, 259, 226, 340)
Data      <- data.frame(Year, Category, Frequency)
library(ggplot2)
ggplot(Data, aes(x = Year, y = Frequency, fill = Category, label = Frequency)) +
    geom_bar(stat = "identity") +
    geom_text(size = 3, position = position_stack(vjust = 0.5))

但没有年份,并且在x轴上有每个类别的标签

1 个答案:

答案 0 :(得分:1)

幸运的是,使用包reshape2很容易实现,这可以将您的数据框转换为长格式,可以更轻松地使用ggplot2

df_long <- reshape2::melt(df, id = "category")

ggplot(df_long, aes(x = category, y = value, fill = variable, label = value)) +
  geom_bar(stat = "identity") +
  geom_text(size = 3, position = position_stack(vjust = 0.5))

enter image description here

这与您的示例输出略有不同,类别为x值而不是“2006-07”和“2007-08”(我假设你添加了这个以使代码工作?)。