0

我正在开发一个 R Shiny 程序,它可以获取任何 csv 文件并输出它的图形。上传 csv 的用户对数据的外观有一些指导,但我不希望它太严格。

我目前正在尝试使用 ggplot2 在一个图上绘制同一数据集的多条线以进行比较。

我目前正在上传的数据看起来像这样(简化,因为数据有超过 1000 行):

Date Hamburgers Salads Sodas Fries
12-01    4        4      3    2
12-02    1        7      3    9
12-03    22       24     45   34
12-04    23       44    46    22

我正在尝试输出一个在 X 轴上具有时间的图形(用户通过侧边栏选择它,因为他可以选择任何轴,但时间在这里最有意义)。对于 Y 轴,我想要 4 条线,颜色不同,随时间绘制每个变量。

我已经实现了所有“用户接受输入并选择要绘制图形的列”,但为了简单起见,我们可以假设在大多数情况下,这已经被硬编码(所以 Y 变量实际上是 input$y 等在我的实现中)

我尝试绘制数据的代码部分是:

output$plotLine <- renderPlot({
  p <- ggplot(data, aes_string(x=X, y=Y), environment = environment()) 
      p <- p + geom_point(size = 3) 
      p <- p + geom_line(aes(group=1)) 

  print(p)
})

这绘制了其中一条线,但我不知道如何在同一图上绘制其他线。我已经阅读了有关在 aes 函数中使用“组”的信息,但这取决于数据集中有一个分类器,而这个分类器目前没有。

我还研究了 reshape2 包中的 melt() 函数,但不确定它对我有什么帮助(对于多行问题和这个项目的更大意义,这样用户就不必严格遵守csv 的上传格式规则)。

任何帮助将非常感激!

4

1 回答 1

1

假设您将 xaxis 变量 (Date) 放入selectedxaxis,选定的产品放入selectedproductsdata保存加载的数据:

selectedxaxis = "Date"
selectedproducts = c("Sodas", "Salads")
widedata = subset(data, select = c(selectedxaxis, selectedcolumns))

longdata = melt(widedata, id.vars=selectedxaxis, variable.name='Product', value.name='Count')
ggplot(longdata) + geom_line(aes(Date, Count, color=Product))
于 2013-08-01T03:00:59.927 回答