【问题标题】:Display graph with ggplot in Shiny app with a function在带有函数的 Shiny 应用程序中使用 ggplot 显示图形
【发布时间】:2021-05-26 02:22:46
【问题描述】:

我现在正在做一个闪亮的网络应用程序,以绘制一些来自 csv 文件的数据。

这是我关于闪亮应用的代码:

# install.packages("shiny")
library(shiny)
source("test.R")
# library(...) that I need


# User Interface
ui <- fluidPage(
  titlePanel("Affichage de l'indice EPU"),
  
  sidebarLayout(
    sidebarPanel(
      helpText("Choix des paramètres"),
      selectInput("var", 
                  label = "Choisir une variable à afficher",
                  choices = list("Global", 
                                 "France",
                                 "Royaume-Uni"),
                  selected = "Percent White"),
      dateRangeInput("dateRange",
                     label = "Intervalle de temps : ",
                     format = "mm/yyyy",
                     language="fr",
                     start  = "2018-01-01",
                     end    = Sys.Date(),
                     startview = "year",
                     separator = " - ")
    ),
    mainPanel(plotOutput("p")         
    )
  )
)

# Define server logic required to draw a histogram ----
server <- function(input, output) {
  
  output$p <- renderPlot({
    graph_epu()

  })
}

shinyApp(ui = ui, server = server)

目前,我不使用用户界面功能中的输入,我只想绘制数据。 我的函数,在文件 test.R 中,做了一些事情来生成一个图表。 这是我的功能:


graph_epu <- function(){
  
  # On importe les données du csv dans les dataframes
  df_lesechos <- read.csv(file = "data/df_lesechos.csv", sep=",")
  df_latribune <- read.csv(file = "data/df_latribune.csv", sep=",")
  
  # On supprime le jour pour le remplacer par 01
  df_lesechos$Date <- substr(df_lesechos$Date,1,7)
  df_latribune$Date <- substr(df_latribune$Date,1,7)
  df_lesechos$Date <- paste(df_lesechos$Date,"-01",sep="")
  df_latribune$Date <- paste(df_latribune$Date,"-01",sep="")
  
  
  
  # Transforme la colonne Occurences au format numérique
  #df_lesechos <- transform(df_lesechos, Occurences = as.numeric(Occurences))
  #df_latribune <- transform(df_latribune, Occurences = as.numeric(Occurences))
  
  
  
  df_lesechos$Occurences <- as.numeric(df_lesechos$Occurences)
  df_latribune$Occurences <- as.numeric(df_latribune$Occurences)
  

  # On convertit la colonne date au format Date
  df_lesechos <- transform(df_lesechos, Date = as.Date(Date))
  df_latribune <- transform(df_latribune, Date = as.Date(Date))
  
  # On élimine les valeurs datant d'avant 2018
  df_lesechos <- df_lesechos[!(df_lesechos$Date < "2018-01-01"),]
  df_latribune <- df_latribune[!(df_latribune$Date < "2018-01-01"),]
  
  # On groupe par mois et on fait la somme des occurences
  df_lesechos <- df_lesechos %>% group_by(Date) %>% summarise(Occurences = sum(Occurences)) %>% arrange(desc(Date))
  df_latribune <- df_latribune %>% group_by(Date) %>% summarise(Occurences = sum(Occurences)) %>% arrange(desc(Date))
  
  # Calcul de la variance pour chaque journal
  echos_var <- var(df_lesechos$Occurences)
  tribune_var <- var(df_latribune$Occurences)
  
  # Divisions des occurences par l'écart type, ce qui nous donne un écart type unitaire
  df_lesechos$Occurences <- (df_lesechos$Occurences) / sqrt(echos_var)
  df_latribune$Occurences <- (df_latribune$Occurences) / sqrt(tribune_var)
  
  # La normalisation de chaque série mensuelles des différents journaux nous permets de les combiner
  # Création du dataframe qui va faire la somme des deux dataframes
  df_france <- bind_rows(df_lesechos,df_latribune)
  df_france <- df_france %>% group_by(Date) %>% summarise(Occurences = sum(Occurences)) %>% arrange(desc(Date))
  
  # On divise par 2 la série obtenue car on a 2 sources d'informations
  df_france$Occurences <- df_france$Occurences / 2
  
  # Calcul de la moyenne de la série 
  moyenne <- mean(df_france$Occurences)
  
  # On ramène la série à une moyenne de 100 afin d'obtenir l'indicateur EPU de chaque mois
  df_france$Occurences <- df_france$Occurences*(100/moyenne)
  
  # Visualisation de la série à l'aide ggplot2
  p <- df_france %>%
    ggplot(aes(x=Date, y=Occurences, text = paste0("Date : ", format(Date, "%Y-%m"), "\n",
                                                   "EPU : ", round(Occurences)))) +
    geom_area(fill="#5685D7", alpha=0.5, group=1) +
    geom_line(color="#FF0000", size=0.2, group=1) +
    ggtitle("FR Indice EPU") +
    ylab("EPU") +
    xlab("Années-Mois") +
    geom_point(size=0.5) +
    scale_x_date(breaks = df_france$Date, labels = date_format("%Y-%m")) +
    theme(axis.text.x = element_text(angle = 90),
          plot.title = element_text(size=14, face="italic", family="Avenir Next"),
          axis.title.x = element_text(family="Avenir Next"),
          axis.title.y = element_text(family="Avenir Next"))
  
  p <- ggplotly(p, tooltip = "text")
  p
  
}

对象 p 是图。 我真的不知道如何继续显示图表。当我运行应用程序时,只显示侧边栏,没有图表。我在控制台中有任何错误...

如果有人可以帮助我,那就太好了。

非常感谢!!!

【问题讨论】:

  • 我认为你必须使用 renderPlotly 和 poltlyOutput 来输出 plotly 图

标签: r ggplot2 shiny shinyapps


【解决方案1】:

在服务器端读取 csv 文件可能会有所帮助。试试这个

server <- function(input, output) {
  
  # On importe les données du csv dans les dataframes 
  df_lesechosi <- read.csv(file = "data/df_lesechos.csv", sep=",")
  df_latribunei <- read.csv(file = "data/df_latribune.csv", sep=",")
  
  mygraph <- reactive({
    graph_epu(df_lesechos=df_lesechosi, df_latribune=df_latribunei)
  })
  
  output$p <- renderPlotly({
    mygraph()
  })
}

### Your function should be as follows, and no need to read in csv files within this function
graph_epu <- function(df_lesechos="", df_latribune=""){...
  

【讨论】:

    猜你喜欢
    • 2021-03-13
    • 2021-05-09
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 2012-03-08
    相关资源
    最近更新 更多