I would like to take the height of my plot reactive because sometimes I have to draw just one graph and sometimes two or three graphs. Here my code :
output$myplot<-renderPlot({
plot_to_draw <- data[data$code==input$code,"River_name"]
plot(plot_to_draw)
number_of_plot <- length(plot_to_draw)
},height = 500*number_of_plot)
But shiny reads the height of the plot just one time so that it's not reactive. Thank you for your answers !
renderPlot is an reactive function that can take input data from the ui. R script and feed it into the server. R script. It then actively updates the information within its function.
With ggplot2 graphics, the code in renderPlot should return a ggplot object; if instead the code prints the ggplot2 object with something like print(p) , then the coordinates for interactive graphics will not be properly scaled to the data space. See plotOutput() for more information about interactive plots.
I finally figuerd out a solution ;
server.R
output$myplot<-renderPlot({
plot_to_draw <- data[data$code==input$code,"River_name"]
plot(plot_to_draw)
number_of_plot <- length(plot_to_draw)
},height = function(){500*number_of_plot})
ui.R
plotOutput(outputId="myplot",height = "auto")
This is the solution that I finally got, after drudging with my app and thanks to all persons in this thread for your kind suggestions. Please don't mind the name of the variables.
In the server part:
#I had to transform my imput into a data.frame, otherwise sqldf didn't work.
country12<- reactive({as.data.frame(matrix(c(input$sel_country121),1,1))})
question12<-reactive({
country121 <- country12()
sqldf("SELECT dp.Year, dp.Type_of_Product COUNT (*) as num_products12 FROM dataPanelV5 dp, country121 p WHERE dp.Country_name = p.V1 GROUP BY dp.Year, dp.Type_of_Product")})
#I use this function to calculate the number of different types of products resulting from the query, using unique() and calculating its length, as that number is the number of facets.
n_facets12<-function(){
question121<- question12()
return (500*length(unique(question121$Type_of_Product)))}
output$barplot12 <- renderPlot({
question121<-question12()
ggplot(question121,aes(x=factor(Year),y=num_products12,fill=Type_of_Product)) + geom_bar(stat="identity") + facet_grid(Type_of_Product ~ .,scales = "free_y") +
geom_text(aes(label=num_products12), vjust=-0.2, colour="black") + scale_x_discrete(breaks=question121$Year,labels=as.character(question121$Year),position = "top") + theme(legend.position="top",axis.title.y=element_blank(),axis.text.y = element_blank(),panel.grid.major.y = element_blank(),panel.grid.minor.y = element_blank()) + labs(fill="Type_of_Product", x="Year")
},height = n_facets12)
#And it works!!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With