diff --git a/docs/components/r/index.rst b/docs/components/r/index.rst new file mode 100644 index 0000000..44aade4 --- /dev/null +++ b/docs/components/r/index.rst @@ -0,0 +1,482 @@ +******* +R +******* + +QuartzMap supports creating of a number of R HTML applications: + +1. R Leaflet: https://github.com/rstudio/leaflet/ + +2. Plotly: https://plotly.com/r/ + +3. Standard Plots + +.. contents:: Table of Contents + + +R Publishing +=================================== + +There are three options for publising your R code. + +Option 1: FTP. +------------ + +FTP Uploads are R files you have uploaded directly via FTP. + +It can also maps you uploaded via any FTP client. + + .. image:: Map-2.png + + +Option 2: Archive (Upload) +------------ + +Archive is a zipped archive file you can upload. + + + .. image:: Map-3.png + + +Option 3: Paste +----------------- + +Paste your R Leaflet code into the code box. + + + .. image:: R-Paste.png + + + +R Leaflet +=================================== + +To create an R Leaflet Map, click on "Add New" button. + +FTP, Upload, or Paste your code. + +Give your R code a Name and Description. + + +Example +-------------- + +The two main components are the libraries and saveWidget function + +.. code-block:: R + + #libraries + library(leaflet) + library(leaflet.extras) + require(sf) + library(htmlwidgets) + + # Your R Code Here + + #saveWidget + saveWidget(m, file = "index.html") + +An example Choropleth map is included in the installation. + + +.. code-block:: R + + library(leaflet) + library(leaflet.extras) + require(sf) + library(htmlwidgets) + + + # From https://leafletjs.com/examples/choropleth/us-states.js + states <- sf::read_sf("https://rstudio.github.io/leaflet/json/us-states.geojson") + + bins <- c(0, 10, 20, 50, 100, 200, 500, 1000, Inf) + pal <- colorBin("YlOrRd", domain = states$density, bins = bins) + + labels <- sprintf( + "%s
%g people / mi2", + states$name, states$density + ) %>% lapply(htmltools::HTML) + + m <- leaflet(states) %>% + setView(-96, 37.8, 4) %>% + addPolygons( + fillColor = ~pal(density), + weight = 2, + opacity = 1, + color = "white", + dashArray = "3", + fillOpacity = 0.7, + highlightOptions = highlightOptions( + weight = 5, + color = "#666", + dashArray = "", + fillOpacity = 0.7, + bringToFront = TRUE), + label = labels, + labelOptions = labelOptions( + style = list("font-weight" = "normal", padding = "3px 8px"), + textsize = "15px", + direction = "auto")) %>% + addLegend(pal = pal, values = ~density, opacity = 0.7, title = NULL, + position = "bottomright") %>% + addTiles(group="OpenStreetMap") %>% + addProviderTiles(providers$Esri.WorldImagery, group = "Esri World Imagery") %>% + addLayersControl(baseGroups=c("OpenStreetMap", "Esri World Imagery"), options=layersControlOptions(collapsed=FALSE)) %>% + addMeasurePathToolbar(options = measurePathOptions(imperial = FALSE, showDistances = TRUE)) %>% + addDrawToolbar( + targetGroup = "draws", + editOptions = editToolbarOptions( + selectedPathOptions = selectedPathOptions())) + + saveWidget(m, file = "index.html") + + +The output should look as below: + + .. image:: R-Choropleth.png + + + +R Plotly +=================================== + +To create an R Plotly Animated App, click on "Add New" button. + +FTP, Upload, or Paste your code. + +Give your R code a Name and Description. + + +Example +-------------- + +The example is animated Plotyl map with Play button. + +The three main components in this example are the plotly, dplyr, and htmlwidgets function. + + + +.. code-block:: R + + # Main libraries for Plotly + library(dplyr) + library(plotly) + library(htmlwidgets) + + # Your R Code Here + + #saveWidget + htmlwidgets::saveWidget(as_widget(p), file="index.html") + + +An example of a Plotly app is included in the installation. Here, we add the RPostgreSQL library to connect to PostgreSQL. + + +.. code-block:: R + + #load library + library(dplyr) + library(plotly) + library(htmlwidgets) + + #load data + df <- read.csv("graph.csv") + + #create map + p <- plot_geo(df, locationmode = 'world') %>% + add_trace( z = ~df$new_cases_per_million, locations = df$code, frame=~df$start_of_week, color = ~df$new_cases_per_million) + + #export as html file + htmlwidgets::saveWidget(p, file = "index.html") + + + +The output should look at below: + + + .. image:: R-Animated.png + + + + +R Plotly Dynamic Data (PostgreSQL) +=================================== + +To create an R Plotyl App with Dynamic Data, click on "Add New" button. + +FTP, Upload, or Paste your code. + +Give your R code a Name and Description. + + +Example +-------------- + +The main components in this example are the plotly, ggplot2, RPostgreSQL, and htmlwidgets function. + + + +.. code-block:: R + + # Main libraries for Plotly + library(plotly) + library(ggplot2) + library(RPostgreSQL) + library(htmlwidgets) + + # Your R Code Here + + #saveWidget + htmlwidgets::saveWidget(as_widget(p), file="index.html") + +The example is chart with dynamic PostgreSQL connection is contained in the Sample Apps (Simple Bee Harvest) + +Here, we add the RPostgreSQL library to connect to PostgreSQL. + + +.. code-block:: R + + library(plotly) + library(ggplot2) + library(RPostgreSQL) + library(htmlwidgets) + + conn <- RPostgreSQL::dbConnect("PostgreSQL", host = "localhost", dbname = "beedatabase", user = "admin1", password = "ORUVDrYBCQ") + + query_res <- dbGetQuery(conn, 'select area_id,bee_species,sum(average_harvest) from public.apiary GROUP BY (area_id,bee_species) ORDER BY(area_id)'); + area_harvest <- as.data.frame(query_res); + + p <- plot_ly(area_harvest, x=~area_id, y=~sum, type="bar", + text = ~bee_species, textposition = 'auto') %>% + layout(title = "Accumulated Average Harvest per Area for Apis Mellifera Carnica", + xaxis = list(title = "Area ID"), yaxis = list(title = "Average Harvest")) + + + htmlwidgets::saveWidget(as_widget(p), file="index.html") + + + +The output should look at below: + + + .. image:: rplotly-postgresql.png + + +R Standard Plot (PNG) +=================================== + +To create an R Standard Plot (PNG) Map, click on "Add New" button. + +FTP, Upload, or Paste your code. + +Give your R code a Name and Description. + + +Example +-------------- + +The three main components are the R3port and html_plot function. + +.. code-block:: R + + # Main libraries for Plotly + library(R3port) + + # Your R Code Here + + #output + html_plot(pl(), out="index.html") + + +An example of a Standard Plot (PNG) is included in the installation. + +.. code-block:: R + + library(R3port) + + set.seed(1919) # Create example data + x1 <- rnorm(1000) + y1 <- x1 + rnorm(1000) + + group <- rbinom(1000, 1, 0.3) + 1 # Create group variable + + pl <- function() { + plot(x1, y1, # Create plot with groups + main = "This is my Plot", + xlab = "X-Values", + ylab = "Y-Values", + col = group, + pch = group) + + legend("topleft", # Add legend to plot + legend = c("Group 1", "Group 2"), + col = 1:2, + pch = 1:2) + } + + html_plot(pl(), out="index.html") + + + +R Report (RMD) +=================================== + +To create an R Report App, click on "Add New" button. + +FTP, Upload, or Paste your code. + +Give your R code a Name and Description. + + +Example +-------------- + +The Demo Data contains a full R Report. + +It is the "My Super Fancy Report" created by David Keyes + +https://rfortherestofus.github.io/fundamentals/sample-report.html + +.. code-block:: R + + --- + title: "My Super Fancy Report" + author: "David Keyes" + output: html_document + --- + + ```{r setup, include=FALSE} + knitr::opts_chunk$set(echo = FALSE) + ``` + + + # Introduction + + This report is the best report ever. Pretty much the **bees' knees**. Can't say that I've *ever* seen a better report. + + ## Reasons Why This Report is the Best + + - It's amazing + - It's quite amazing + - It's seriously amazing + + ## R Markdown + + This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see . + + When you click the **Knit** button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this: + + ```{r cars, include = FALSE} + summary(cars) + ``` + + ## Including Plots + + You can also embed plots, for example: + + ```{r pressure, echo=FALSE} + plot(pressure) + ``` + + + Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot. + + + ```{r warning = FALSE, message = FALSE} + library(skimr) + + skim(cars) + ``` + +The output should look at below: + + + .. image:: r-report.png + + + + +R App Options +=================================== + +Name +-------------- + +Give your R app a name. The name will appear as the map title on the dashboard. + +.. image:: Name-Desc.png + + +Description +-------------- + +The Description is the text that will appear at the bottom of the map link + +.. image:: Name.png + + + +Data Update (Cache) +-------------- + +For dynamic R apps that connect to a databases, you can set the update frequency + + +.. image:: Update.png + +If you wish to set a custom interval, select custom: + +.. image:: Update-2.png + + +When Updates are selected, this is the interval at which your app will be recompiled against the database. + +If you have enabled Updates, but wish to Update immediately, you can do so by clicking the Clear Cache icon on the Map page: + +.. image:: clear-cache.png + + +Thumbnail Image: +-------------- + +Upload a thumbnail image for your map to be displayed on the home page. + +.. image:: Thumbnail.png + + +Info Box. +-------------- + +The InfoBox is a modal information box you can display to map users. + +.. image:: Info-Box.png + + +Security +-------------- + +Maps can be Private or Public. + +The Security section is where you assign permissions to your map. + +Security is Group based, so any users belonging to the Group will be able to view the map. + +.. image:: users-3.jpg + +1. Private + +Private apps can be viewed by the user logging into your map portal or via Secure Share link (for temporary access) + +For example, since we gave access to the Group containing user Jane Doe, when she logs in she will see only the two maps she has permissions to + +.. image:: users-2.jpg + +2. Public + +You can also tick the “Public” box to make your app public. + +.. image:: public-users.jpg + +If your map is “Public”, you can use the map url to display the map. + +By default, the app is full screen. You can also use an iframe.