如何在单个图ggplot2中绘制多行图?

时间:2013-08-01 01:10:09

标签: r ggplot2 reshape shiny reshape2

我正在研究一个可以接受任何csv文件并输出图形的R Shiny程序。上传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变量实际上将被输入$ 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函数中使用'group',但这取决于在数据集中有一个分类器,这个分类器当前没有。

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

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

假设您将x轴变量(日期)放在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))