我正在设计一个 R 程序来输出任何 csv 文件输入的不同图形。我正在使用 Rstudio Shiny 和 ggplot2 来开发程序。
我的问题涉及按时间顺序而不是按字母顺序排列日期(这显然是默认值)。让我们以这段代码为例(我的代码有点不同,但这是之前帮助过我的人的代码):
相关帖子: 无法更改我的ggplot rshiny程序的图形形式,帮我找出错误?
在R中对月份进行排序 你如何对名义变量进行排序。例如 R 中的月份?
服务器.R
library(shiny)
library(datasets)
library(ggplot2)
X <- read.csv(file.choose())
# Define server logic required to summarize and view the selected dataset
shinyServer(function(input, output) {
output$opt.x <- renderUI({
selectInput("xcolumn", "X column to Plot",
names(Y())
)
})
output$opt.y <- renderUI({
selectInput("ycolumn", "Y Column",
names(Y()))
})
# Generate a summary of the dataset
output$summary <- renderPrint({
dataset <- X
summary(dataset)
})
# Show the first "n" observations
output$view <- renderTable({
head(X, n = input$obs)
})
createPlot <- function(df, colx, coly) {
p <- ggplot(data=df, aes(x=df[,colx],y=df[,coly]), environment = environment()) #+ geom_line(aes(x=df[,colx],y=df[,coly], group=colx))
p <- p + geom_line(aes(group=colx))
p <- p + xlab(names(df)[colx]) + ylab(names(df)[coly])
}
Y <- reactive({
X
})
# create a basic plot
output$plotBasic <- reactivePlot(function() {
df <- Y()
print(createPlot(df, colx=input$xcolumn, coly=input$ycolumn))
})
})
用户界面
library(shiny)
# Define UI for dataset viewer application
shinyUI(pageWithSidebar(
# Application title
headerPanel("My app!"),
# Sidebar with controls to select a dataset and specify the number
# of observations to view
sidebarPanel(
numericInput("obs", "Number of observations to view:", 13),
uiOutput("opt.x"), #dynamic UI
uiOutput("opt.y") #value comes from Server.R
),
# Show a summary of the dataset and an HTML table with the requested
# number of observations
mainPanel(
tabsetPanel(
tabPanel("Table", tableOutput("view")),
tabPanel("BasicGraph", plotOutput("plotBasic"))
)
)
))
如果您从您知道的列表开始,则可以使用 factor 或 as.Date 函数轻松解决此问题,但在这里我正在输入(可以假设格式为 mm-yyyy)并且我不知道如何设置x 列变量数据到一个变量。这是因为用户可以选择导入数据中的任意一列作为 X 列。