如何从 R 中的分组列制作单个直方图
How to make a single histogram from grouped columns in R
我有以下数据集:
year type count
1560 Person 2
1560 Public 1
1560 Thing 1
1578 Academic 1
1578 Public 1
1578 Thing 1
1582 Person 3
1582 Public 3
1582 Thing 3
...
我的目标是根据 group/type 在一个图中将此数据集绘制为三种不同颜色的直方图。
x 轴应该代表年份,而应该有四个 bin(每年每种类型 [Person/Public/Thing/Academic] 一个,代表该组的计数。
现在我有以下 R 代码:
dat <- read.csv(
file = filename
,header = T
,sep = "\t"
,quote = "\""
,row.names = NULL
,fileEncoding = "UTF8"
,stringsAsFactors = F);
melt_df <- melt(dat, id.vars = c("year","type"), measure.vars = c("count"));
ggplot(melt_df, aes(x = year, y = value, fill = variable)) +
geom_bar(stat = 'summary', fun.y = sum) +
theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
scale_y_continuous(limits=c(0,155), breaks=seq(0,155,5)) +
scale_x_continuous(limits=c(1550,2000), breaks=seq(1550,2000,10));
结果如下图:
ggplot from dataset above
任何人都可以指出正确的方向,如何完成这项工作?
请不要建议像这样重新排列数据集:
year Person Public Thing Academic
1560 2 1 1 0
...
当然我可以毫无问题地绘制这个数据集,但它不是我期望的格式,所以使用上面的数据集会很好。
简单做
ggplot(d, aes(factor(year), count, fill = type)) +
geom_col(position = "dodge")
数据
d <- read.table(text="year type count
1560 Person 2
1560 Public 1
1560 Thing 1
1578 Academic 1
1578 Public 1
1578 Thing 1
1582 Person 3
1582 Public 3
1582 Thing 3", header=T)
我有以下数据集:
year type count
1560 Person 2
1560 Public 1
1560 Thing 1
1578 Academic 1
1578 Public 1
1578 Thing 1
1582 Person 3
1582 Public 3
1582 Thing 3
...
我的目标是根据 group/type 在一个图中将此数据集绘制为三种不同颜色的直方图。 x 轴应该代表年份,而应该有四个 bin(每年每种类型 [Person/Public/Thing/Academic] 一个,代表该组的计数。
现在我有以下 R 代码:
dat <- read.csv(
file = filename
,header = T
,sep = "\t"
,quote = "\""
,row.names = NULL
,fileEncoding = "UTF8"
,stringsAsFactors = F);
melt_df <- melt(dat, id.vars = c("year","type"), measure.vars = c("count"));
ggplot(melt_df, aes(x = year, y = value, fill = variable)) +
geom_bar(stat = 'summary', fun.y = sum) +
theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
scale_y_continuous(limits=c(0,155), breaks=seq(0,155,5)) +
scale_x_continuous(limits=c(1550,2000), breaks=seq(1550,2000,10));
结果如下图: ggplot from dataset above
任何人都可以指出正确的方向,如何完成这项工作?
请不要建议像这样重新排列数据集:
year Person Public Thing Academic
1560 2 1 1 0
...
当然我可以毫无问题地绘制这个数据集,但它不是我期望的格式,所以使用上面的数据集会很好。
简单做
ggplot(d, aes(factor(year), count, fill = type)) +
geom_col(position = "dodge")
数据
d <- read.table(text="year type count
1560 Person 2
1560 Public 1
1560 Thing 1
1578 Academic 1
1578 Public 1
1578 Thing 1
1582 Person 3
1582 Public 3
1582 Thing 3", header=T)