我正在将csv文件上传到一个闪亮的版本,并试图从所选列中绘制ggplot。
output$plot = renderPlot(
{
df <- data_set()
gp <- NULL
if (!is.null(df)){
xv <- input$xaxisGrp
yv <- input$yaxisGrp
if (!is.null(xv) & !is.null(yv)){
if (sum(xv %in% names(df))>0){ # supress error when changing files
mdf <- melt(df,id.vars=xv,measure.vars=yv)
gp <- ggplot(data=mdf) +
geom_point(aes_string(x=xv,y="value",color="variable"))+
geom_smooth(method="lm")+
theme(axis.text.x=element_text(angle=45, hjust=1))+
theme_hc() +
scale_colour_hc()+theme(legend.title=element_blank())
}
}
}
return(gp)
}
我可以创建图表但是当我尝试添加
时+geom_smooth(method="lm")
我没有得到任何想法可能会发生什么?
给出这样的数据集:
dput(df)
structure(list(load = c(1L, 18L, 36L, 72L, 108L, 144L, 216L),
throughput = c(64.9, 995.9, 1652.4, 1853.2, 1828.9, 1775,
1702.2)), .Names = c("load", "throughput"), class = "data.frame", row.names = c(NA,
-7L))
我试着这样做:
plot(xy~yv, data=df)
我什么也看不见。但是为了测试它,当我执行以下操作时,它可以工作。我无法找出问题所在。我再次将文件上传到闪亮的应用程序以绘制和创建模型。有什么想法吗?
plot(mtcars$mpg~mtcars$cyl) ##this works
答案 0 :(得分:11)
您的问题很小:geom_smooth()
未引用任何数据。将美学aes()
普遍设置在ggplot()
内,而不仅仅放在geom_point()
中。下面的可重现的示例只需将该行剪切并粘贴到正确的位置。
首先,我们将mtcars写入csv文件以加载到shiny:
write.table(mtcars, "c://path//to//your//file.csv", row.names = TRUE, sep=",")
其次,运行此代码:
library(shiny); library(ggplot2); library(reshape2)
shinyApp(
ui = fluidPage(
sidebarLayout(
sidebarPanel(
fileInput("inputFile", "Browse for file"), #Upload button
#After file is uploaded, read the columns in the server function,
# and create a responsive dropdown menu for plotting the variables
uiOutput("plot.params") #Responsive x and y dropdown menu
),
mainPanel(
plotOutput("plot")
)
)
),
server = function(input, output, session) {
#Read in the uploaded data file and create a reactive variable called data_set
data_set <- reactive({if(is.null(input$inputFile)) return(NULL)
read.csv(input$inputFile$datapath, header = TRUE, sep=",")
})
#Create a (reactive) dropdown menu for selecting X and Y
output$plot.params <- renderUI({ list(
fluidRow(selectInput(inputId = "xaxisGrp", label = "X", choices = names(data_set() )) ),
fluidRow(selectInput(inputId = "yaxisGrp", label = "Y", choices = names(data_set() )) )
)})
#Create a plot- copied from OP with minor edit to ggplot()
output$plot = renderPlot(
{
df <- data_set()
gp <- NULL
if (!is.null(df)){
xv <- input$xaxisGrp #from the reactive ui selecInput
yv <- input$yaxisGrp #from the reactive ui selecInput
if (!is.null(xv) & !is.null(yv)){
if (sum(xv %in% names(df))>0){ # supress error when changing files
mdf <- melt(df,id.vars=xv,measure.vars=yv)
gp <- ggplot(data=mdf, aes_string(x=xv,y="value",color="variable")) +
geom_point()+ #aes() moved from here into ggplot()
geom_smooth(method="lm")
}
}
}
return(gp)
}
)
}
)