1

我刚从 Excel 来到 R,对 ggplot2 图表质量的优雅感到兴奋。由于它们是不同的工具,因此具有不同的做事方式。我必须训练我的大脑以 R(ggplot2)的方式思考。

我想知道,如何在 ggplot2 中绘制多列数据。我想以以下数据为例:

State           Quarter 1   Quarter 2   Quarter 3   Total
Connecticut     385         410         521         1,316
Pennsylvania    545         416         598         1,559
Delaware        506         515         731         1,752
New Jersey      591         781         617         1,989
Maryland        946         436         895         2,277
Vermont         945         816         895         2,656
New York        910         867         946         2,723

Total           4,828       4,241       5,203       14,272

问题:

  1. 我可以将每个季度数据绘制到一个条形图上,如何在同一张图表上绘制所有季度?
  2. 这可能是 Excel 的方式,有没有更好的方法在 R 中表示这些数据?
4

2 回答 2

1
df <- read.csv(text="State,Quarter1,Quarter2,Quarter3,Total
Connecticut,385, 410, 521, 1316
Pennsylvania, 545, 416, 598, 1559
Delaware,506, 515, 731, 1752
New Jersey,591, 781, 617, 1989
Maryland,946, 436, 895, 2277
Vermont, 945, 816, 895, 2656
New York,910, 867, 946, 2723
", header=T)

library(reshape2)

df <- melt(df, variable.name="Quarter")

library(ggplot2)

ggplot(df[df$Quarter != "Total",]) + 
geom_bar(aes(State, value, fill = Quarter), stat="identity")

这将创建以下图表:

在此处输入图像描述

于 2013-04-21T04:10:33.707 回答
1

正如评论中所建议的,首先melt是数据框:

require(reshape2)
require(ggplot2)

data = read.table(text="
State,   Quarter1,   Quarter2,   Quarter3,   Total
Connecticut,     385,         410,         521,         1316
Pennsylvania,    545,         416,         598,         1559
Delaware,        506,         515,         731,         1752
New Jersey,      591,         781,         617,         1989
Maryland,        946,         436,         895,        2277
Vermont,         945,         816,         895,         2656
New York,        910,         867,         946,         2723
Total,           4828,       4241,       5203,       14272",header=T,sep=',')

data.new <- melt(head(data,-1))

现在对于堆积条形图:

ggplot(head(data.new,-1), aes(State,value,fill=variable)) + geom_bar(position="dodge")

在此处输入图像描述

对于并排条形图:

ggplot(head(data.new,-1), aes(State,value,fill=variable)) + geom_bar()

在此处输入图像描述

于 2013-04-21T05:30:40.233 回答