【发布时间】: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 图