下記のサンプルdf
に示すようなデータがあります。 3つの米国州(CA、TX、NY)と合計のデータがあり、それぞれについてはact
、予測はfct
、予測値はpred
となります。checkboxGroupInputを使用してdfをサブセット化し、ggplot2をRで作成します。Shiny
私は、ユーザがプロット上で観察する状態を選択することができるシャイニー(Shiny)アプリを作成したいと考えています。これを行うにはcheckboxGroupInput
を使用しています。私はユーザの選択状態に基づいてdf
をサブセット化する私のコードのサーバ部分にという名前のreactive
関数を持っています。次に、reactive
という名前の関数をgl
という名前で作成し、ggplotを作成するために必要なすべてのgeom_line()
ステートメントを作成します。私がこれをやっているのは、それぞれの状態について同じcolor
を同じにしておき、linetype
を使って実際のものか、予測か、予測されたものかを区別するためです。
最後に、私はプロットを作成しようとしますが、ここで問題が始まります。エラーメッセージは表示されませんが、アプリケーションを実行するとプロットは表示されません。これを修正する方法、または私が望むものを達成するためのより良い方法はありますか?以下は、私が持っているコードとユーザーがすべての州と合計を選択した場合に表示したいもののプロットです。
library(shiny)
library(ggplot2)
library(scales)
library(lubridate)
df <- data.frame(Date=seq.Date(as.Date('2017-01-01'), as.Date('2017-05-01'), by='month'),
CAact=rnorm(5, 10, 2), TXact=rnorm(5, 10, 2), NYact=rnorm(5, 10, 2),Totalact=rnorm(5, 30, 2),
CAfct=rnorm(5, 10, 2), TXfct=rnorm(5, 10, 2), NYfct=rnorm(5, 10, 2), Totalfct=rnorm(5, 30, 2),
CApred=rnorm(5, 10, 2), TXpred=rnorm(5, 10, 2), NYpred=rnorm(5, 10, 2), Totalpred=rnorm(5, 30, 2)
)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
checkboxGroupInput('states', 'Select Regions',
choices=c('CA','TX','NY','Total'),
selected=c('CA','TX','NY','Total')
)
),
mainPanel(
plotOutput('portfolio')
)
)
)
server <- function(input, output){
#Function to subset df based on user selected states
DF <- reactive({
df <- df[,c('Date', names(df)[grep(paste(input$states, collapse='|'), names(df))])]
return(df)
})
#Generate all the 'geom_line' statements to create ggplot
gl <- reactive({
gl <- character()
lt <- 1
for(i in 2:length(DF())){
col <- substr(names(DF())[i], 1, 2)
if(grepl('Total', names(DF())[i])){
col <- 'Total'
}
if(grepl('fct', names(DF())[i])){
lt <- 5
} else if(grepl('pred', names(DF())[i])){
lt <- 4
}
line <- paste0("geom_line(aes(y=", names(DF())[i], ", color='", col, "'), linetype=", lt, ", size=1.25) + ")
gl <- paste0(gl, line)
}
})
#Create ggplot (not working)
output$portfolio <- renderPlot({
paste0("ggplot(data=DF(), aes(Date)) + ", gl(), "labs(x='', y='Balances ($B)')")
})
}
shinyApp(ui, server)
ありがとう、私はエラーを修正しましたが、あなたが言うように、プロットは表示されません。 –
私は物事を一緒に貼り付けるのではなく、これをもう少し伝統的にやります。 'state.colors < - c(CA = 'red'、TX = 'green'、NY = 'blue'、Total = 'orange')のような名前付きベクトルを作成することで、次に、ここに示すように 'scale_color_manual()'を使ってください:https://stackoverflow.com/questions/46410688/how-to-create-box-plots-with-all-points-where-for-each-group-the-上記の私の答えでは、p-46410885#46410885の色です。 – Balter
この例をあなたの答えに入れることができますか? –