ggplot2图形有几个x变量?

时间:2016-03-16 14:06:13

标签: r ggplot2

我需要帮助解决ggplot2的R图形问题。 让我们举一个例子:

date <- c("oct", "dec")

min.national <- c(17, 20)
min.international <- c(11, 12)
min.roaming <- c(5, 7)

mb.national <- c(115, 150)
mb.international <- c(72, 75)
mb.roaming <- c(30, 40)

df <- data.frame(min.national, min.international, min.roaming, mb.national, mb.international, mb.roaming)

我想要的是分钟有两个图形,一个兆字节边线。并使用 fill = date 在同一图形上获取三个变量(例如国内,国际和漫游中的分钟数)的条形图? 你觉得好吗? 感谢

2 个答案:

答案 0 :(得分:2)

df <- data.frame(date, min.national, min.international, min.roaming, mb.national, mb.international, mb.roaming)

df.stk <- tidyr::separate(melt(df), col="variable", into=c("min_byte", "type"), sep="\\.")

plt <- ggplot(df.stk, aes(type, value, fill = date)) + 
        geom_bar(stat = "identity") +
        facet_grid(.~min_byte)
print(plt)

enter image description here

答案 1 :(得分:2)

我很欣赏这里可能会遇到语言挑战,听起来你刚刚开始使用ggplot2所以不确定如何开始这个,所以我希望你发现这很有用。

分别处理分钟和mb是有意义的;他们是不同的单位。所以我只以分钟为例。通过正确的方法和tidyr库,我理解你想要实现的目标很简单。

library(tidyr)
library(ggplot2)
#first get your data in a data frame
min.df <- data.frame(national = min.national, international = min.international, roaming = min.roaming, month = date)
#now use the tidyr function to create a long data frame, you should recognize that this gives you a data structure readily suited to what you want to plot
min.df.long <- gather(min.df, "region", "minutes", 1:3)
ggplot(min.df.long) + geom_bar(aes(x = region, y = minutes, fill = month), stat = "identity")

enter image description here

如果您希望这些月份并排,我理解您的问题,那么您可以这样做:

ggplot(min.df.long) + geom_bar(aes(x = region, y = minutes, fill = factor(month, levels = c("oct", "dec"))), position = "dodge", stat = "identity") + labs(fill = "month")

关键参数是位置关键字,其余的只是使它更整洁。 enter image description here