我是R和ggplot2的新手。我有一个带饮料消费数据的csv文件。第一列是年份,接下来的9列是饮料类型,如咖啡,茶,苏打等,其中包含该行年份值的消费金额值。数据涵盖41年。我一直在研究这个并尝试很多东西。我可以使用ggplot轻松地为任何一种类型的饮料创建点图。
但是,我想在每个图的x轴上创建水平堆积点图。所以,咖啡的情节,然后在咖啡的正下方,咖啡的情节等等。我想我想要使用facet。我还想我想让我的数据重组,所以它有3列:一年一年,一年为#34;类别" (即咖啡,茶,苏打水等),以及价值的最后一个。我的想法是,一旦我获得该表格中的数据,那么使用分面应该是直截了当的。
问题是,我似乎无法弄清楚如何以这种形式获取我的数据。以下是数据的前几行的外观:
Year Whole Milk Other Milk Total Milk Tea Coffee Diet Soda Regular Soda Total Soda Juice
1970 25.5 5.8 31.3 6.8 33.4 2.1 22.2 24.3 5.5
1971 25 6.3 31.3 7.2 32.2 2.2 23.3 25.5 5.8
1972 24.1 6.9 31 7.3 33.6 2.3 23.9 26.2 6
有人可以帮助我吗?
dput
数据是:
structure(list(Year = 1970:1972, `Whole Milk` = c(25.5, 25, 24.1
), `Other Milk` = c(5.8, 6.3, 6.9), `Total Milk` = c(31.3, 31.3,
31), Tea = c(6.8, 7.2, 7.3), Coffee = c(33.4, 32.2, 33.6), `Diet Soda` = c(2.1,
2.2, 2.3), `Regular Soda` = c(22.2, 23.3, 23.9), `Total Soda` = c(24.3,
25.5, 26.2), Juice = c(5.5, 5.8, 6)), .Names = c("Year", "Whole Milk",
"Other Milk", "Total Milk", "Tea", "Coffee", "Diet Soda", "Regular Soda",
"Total Soda", "Juice"), class = "data.frame", row.names = c(NA,
-3L))
答案 0 :(得分:6)
我有一点说我经常使用ggplot2,“当有疑问时,融化”。在reshape包中有一个函数melt(),就是这样做的。
tmp <- structure(list(Year = 1970:1972, `Whole Milk` = c(25.5, 25, 24.1
), `Other Milk` = c(5.8, 6.3, 6.9), `Total Milk` = c(31.3, 31.3,
31), Tea = c(6.8, 7.2, 7.3), Coffee = c(33.4, 32.2, 33.6), `Diet Soda` = c(2.1,
2.2, 2.3), `Regular Soda` = c(22.2, 23.3, 23.9), `Total Soda` = c(24.3,
25.5, 26.2), Juice = c(5.5, 5.8, 6)), .Names = c("Year", "Whole Milk",
"Other Milk", "Total Milk", "Tea", "Coffee", "Diet Soda", "Regular Soda",
"Total Soda", "Juice"), class = "data.frame", row.names = c(NA,
-3L))
library(reshape)
melt(tmp, id.vars="Year")
Year variable value
1 1970 Whole Milk 25.5
2 1971 Whole Milk 25.0
3 1972 Whole Milk 24.1
4 1970 Other Milk 5.8
5 1971 Other Milk 6.3
6 1972 Other Milk 6.9
7 1970 Total Milk 31.3
8 1971 Total Milk 31.3
9 1972 Total Milk 31.0
10 1970 Tea 6.8
11 1971 Tea 7.2
12 1972 Tea 7.3
13 1970 Coffee 33.4
...