我正在研究一个可以接受任何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上传格式的严格规定。
非常感谢任何帮助!
答案 0 :(得分:1)
假设您将x轴变量(日期)放在selectedxaxis
中,selectedproducts
和data
中的所选产品保存了已加载的数据:
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))