R 使用shiny和ggplot2交互打印多条线
我正在创建一个闪亮的应用程序,它将有一个R 使用shiny和ggplot2交互打印多条线,r,ggplot2,reshape2,R,Ggplot2,Reshape2,我正在创建一个闪亮的应用程序,它将有一个checkboxGroupInput,其中选中的每个框都将向频率图添加另一行。我正试着把我的头绕在重塑2和ggplot2周围,以了解如何使这成为可能 数据: head(testSet) date store_id product_id count 1 2015-08-15 3 1 8 2 2015-08-15 3 3 1 3 2015-08-17 3 1 7
checkboxGroupInput
,其中选中的每个框都将向频率图添加另一行。我正试着把我的头绕在重塑2
和ggplot2
周围,以了解如何使这成为可能
数据:
head(testSet)
date store_id product_id count
1 2015-08-15 3 1 8
2 2015-08-15 3 3 1
3 2015-08-17 3 1 7
4 2015-08-17 3 2 3
5 2015-08-17 3 3 1
6 2015-08-18 3 3 2
班级信息:
dput(droplevels(head(testSet, 10)))
structure(list(date = structure(c(16662, 16662, 16664,
16664, 16664, 16665, 16665, 16665, 16666, 16666), class = "Date"),
store_id = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), product_id = c(1L,
3L, 1L, 2L, 3L, 3L, 1L, 2L, 1L, 2L), count = c(8L, 1L, 7L,
3L, 1L, 2L, 18L, 1L, 0L, 2L)), .Names = c("date", "store_id",
"product_id", "count"), row.names = c(NA, 10L), class = "data.frame")
该图形应有一个x轴对应于日期
,一个y轴对应于计数
。我希望有一个复选框组输入,其中对于表示选中产品的每个框,将在图形上绘制一条对应于product_id
的线。数据已过滤到存储\u id
我的第一个想法是在绘图内部编写一个for循环,以便根据input$productId
向量的每个返回值呈现一条新的geom_line()然而,经过一些研究,这似乎是一个错误的方式去做的事情
目前,我正在尝试melt()
将数据分解为有用的内容,然后aes(…group=product\u id)
,但无论我尝试什么,都会出错
正在尝试融化数据:
meltSet <- melt(testSet, id.vars="product_id", value.name="count", variable.name="date")
熔炉尾
head(meltSet)
product_id date count
1 1 date 16662
2 3 date 16662
3 1 date 16664
4 2 date 16664
5 3 date 16664
6 3 date 16665
tail(meltSet)
product_id date count
76 9 count 5
77 1 count 19
78 2 count 1
79 3 count 39
80 8 count 1
81 9 count 4
绘图:
ggplot(data=meltSet, aes(x=date, y=count, group = product_id, colour = product_id)) + geom_line()
因此,我的轴和值都是不可靠的,而不是我所期望的设置情节 如果我理解正确,您不需要任何熔化,您只需要聚合数据,按日期和产品id汇总计数。您可以使用data.table实现此目的:
testSet = data.table(testSet)
aggrSet = testSet[, .(count=sum(count)), by=.(date, product_id)]
你可以在aggrSet上做你的ggplot。它现在有三列:日期、产品id、计数
当您像以前一样熔化时,您将两个不同类型的变量合并为日期:日期(date)和存储id(int)。melt
是正确的想法。如果不显示代码甚至错误文本,就很难知道自己做错了什么!请编辑以准确显示您用于melt()
的代码,可能是熔化数据帧的head()
,以及ggplot
代码的(简单)版本,以及您遇到的任何错误的全文。如果您与dput()
共享您的初始数据(例如dput(droplevels(head(testSet,10)))
,那么也会很好,这样就可以共享列的类信息。如果您使用的是因子、日期、数字或字符,这将很重要。我已经删除了与shinny
相关的标记-看起来shinny是您的最终目标,但这只是一个中间步骤。这将最终出现在一个闪亮的应用程序中,这一事实似乎无关紧要。谢谢@Gregor,我已经用我最近的尝试更新了这个问题。我相信我只是没有正确地融合我的数据。