我需要帮助解决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 在同一图形上获取三个变量(例如国内,国际和漫游中的分钟数)的条形图? 你觉得好吗? 感谢
答案 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)
答案 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")
如果您希望这些月份并排,我理解您的问题,那么您可以这样做:
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")