可以使用以下代码生成堆栈条形图:
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轴上有每个类别的标签
答案 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))
这与您的示例输出略有不同,类别为x值而不是“2006-07”和“2007-08”(我假设你添加了这个以使代码工作?)。