Created
April 6, 2022 15:32
-
-
Save fraupflaume/7b8f598f23635f51348cd578f51ec33a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
title: "Just for antonoyaro8" | |
output: | |
flexdashboard::flex_dashboard: | |
orientation: columns | |
vertical_layout: fill | |
--- | |
<!--- V8 update: removed commented out code from v7 | |
removed switch statement used for checking size changes | |
removed most of the extremely sarcastic comments---> | |
<style> | |
select { | |
// A reset of styles, including removing the default drop-down arrow | |
appearance: none; | |
background-color: transparent; | |
border: none; | |
padding: 0 1em 0 0; | |
margin: 0; | |
width: 100%; | |
font-family: inherit; | |
font-size: inherit; | |
cursor: inherit; | |
line-height: inherit; | |
} | |
.select { | |
display: grid; | |
grid-template-areas: "select"; | |
align-items: center; | |
position: relative; | |
min-width: 15ch; | |
max-width: 100ch; | |
border: 1px solid var(--select-border); | |
border-radius: 0.25em; | |
padding: 0.25em 0.5em; | |
font-size: 1.25rem; | |
cursor: pointer; | |
line-height: 1.1; | |
background-color: #fff; | |
background-image: linear-gradient(to top, #f9f9f9, #fff 33%); | |
} | |
select[multiple] { | |
padding-right: 0; | |
/* Safari will not show options unless labels fit */ | |
height: 50rem; // how many options show at one time | |
font-size: 1rem; | |
} | |
#column-1 > div.containIt > div.visNetwork canvas { | |
width: 100%; | |
height: 80%; | |
} | |
.containIt { | |
display: flex; | |
flex-flow: row wrap; | |
flex-grow: 1; | |
justify-content: space-around; | |
align-items: flex-start; | |
align-content: space-around; | |
overflow: hidden; | |
height: 100%; | |
width: 100%; | |
margin-top: 2vw; | |
height: 80vh; | |
widhth: 80vw; | |
overflow: hidden; | |
} | |
</style> | |
```{r setup, include=FALSE} | |
library(flexdashboard) | |
library(visNetwork) | |
library(htmltools) | |
library(igraph) | |
library(tidyverse) | |
library(shinyRPG) # not a cran pkg; used for selecting graphs | |
# remotes::install_github("RinteRface/shinyRPG") | |
# knitr::opts_chunk$set(echo = FALSE) not needed with flexdashboard | |
``` | |
```{r dataStuff} | |
# essentially the original code from the question | |
set.seed(123) | |
n=15 | |
data = data.frame(tibble(d = paste(1:n))) | |
relations = data.frame(tibble( | |
from = sample(data$d), | |
to = lead(from, default=from[1]), | |
)) | |
data$name = c("new york", "chicago", "los angeles", "orlando", "houston", "seattle", "washington", "baltimore", "atlanta", "las vegas", "oakland", "phoenix", "kansas", "miami", "newark" ) | |
graph = graph_from_data_frame(relations, directed = T, vertices = data) | |
#red circle: starting point and final point | |
V(graph)$color <- ifelse(data$d == relations$from[1], "red", "orange") | |
# a = visIgraph(graph) | |
m_1 = 1 | |
m_2 = 23.6 | |
a = toVisNetworkData(graph) %>% | |
c(., list(main = paste0("Trip ", m_1, " : "), | |
submain = paste0 (m_2, "KM") )) %>% | |
do.call(visNetwork, .) %>% | |
visIgraphLayout(layout = "layout_in_circle") %>% | |
visEdges(arrows = 'to') | |
# collect the correct order | |
df2 <- data %>% | |
mutate(d = as.numeric(d), | |
nuname = factor(a$x$edges$from, | |
levels = unlist(data$name))) %>% | |
arrange(nuname) %>% | |
select(d) %>% unlist(use.names = F) | |
# [1] 11 5 2 8 7 6 10 14 15 4 12 9 13 3 1 | |
V(graph)$name = data$label = paste0(df2, "\n", data$name) | |
a = visIgraph(graph) | |
m_1 = 1 | |
m_2 = 23.6 | |
a = toVisNetworkData(graph) %>% | |
c(., list( | |
main = list( | |
text = paste0("Trip ", m_1, " : "), | |
style = "font-family: Georgia; font-size: 100%; font-weight: bold; text-align:center;"), | |
submain = list( | |
text = paste0(m_2, "KM"), | |
style = "font-family: Georgia; font-size: 100%; text-align:center;")) | |
) %>% | |
do.call(visNetwork, .) %>% | |
visInteraction(navigationButtons = TRUE) %>% | |
visIgraphLayout(layout = "layout_in_circle") %>% | |
visEdges(arrows = 'to') # %>% | |
# visOptions(width = "100%", height = "80%", autoResize = T) | |
# remove the knitr sizers; causes an issue when rendering in HTML w/ hide/view | |
a[["sizingPolicy"]][["knitr"]][["figure"]] <- FALSE | |
# create copies | |
y = x = w = v = u = t = s = r = q = p = o = n = m = l = k = j = i = h = g = f = e = d = c = b = a | |
``` | |
Column {data-width=200} | |
----------------------------------------------------------------------- | |
### Select Options | |
You can select one or more options from the list. | |
```{r selectiver} | |
# create select/deselect features | |
tagSel <- rpgSelect( | |
"selectBox", | |
"Selections:", | |
c(setNames(1:25, letters[1:25])), # left is values, right is labels | |
multiple = T | |
) # other attributes controlled by css at the top | |
tagSel$attribs$class <- 'select select--multiple' | |
tagSel$children[[2]]$attribs$class <- "mutli-select" | |
tagSel$children[[2]]$attribs$onchange <- "getOps(this)" | |
tagSel | |
``` | |
Column | |
----------------------------------------------------------------------- | |
<div class="containIt"> | |
```{r notNow, include=T} | |
# draw the graphs... | |
a | |
b | |
c | |
d | |
e | |
f | |
g | |
h | |
i | |
j | |
k | |
l | |
m | |
n | |
o | |
p | |
q | |
r | |
s | |
t | |
u | |
v | |
w | |
x | |
y | |
``` | |
</div> | |
```{r pickMe,results='asis',engine='js'} | |
//remove inherent knitr element (doesn't play nice with vis-Netowrk) | |
byeknit = document.querySelector('#column-1 > div.containIt > div.knitr-options'); | |
byeknit.remove(1); | |
// Reset sizing of widgets for the initial layout | |
// first- capture the size of the viewing pane | |
h = document.querySelector('#column-1 > div.containIt').clientHeight; | |
w = document.querySelector('#column-1 > div.containIt').clientWidth; | |
hw = h * w; | |
// find the elements needed in the HTML code | |
cont = document.querySelectorAll('#column-1 > div.containIt > div'); | |
// use viewer sizes to establish the right size for each graph (85% of avail) | |
newHeight = Math.floor(Math.sqrt(hw/cont.length)) * .85; | |
// loop through all of the graphs and reset their sizes | |
for(i = 0; i < cont.length; ++i){ | |
cont[i].style.height = newHeight + 'px'; // the widget | |
cont[i].style.width = newHeight + 'px'; | |
cn = cont[i].childNodes; | |
if(cn.length > 0){ | |
th = cn[0].clientHeight + cn[1].clientHeight; // the canvas | |
console.log("canvas found"); | |
mb = newheight - th; | |
cn[5].style.height = mb + 'px'; //canvas control attempt | |
} | |
} | |
// establish controls for when different graphs are selected/deselected | |
function resizePlease(count) { //resize plots based on selections | |
// screen may have resized** | |
h = document.querySelector('#column-1 > div.containIt').clientHeight; | |
w = document.querySelector('#column-1 > div.containIt').clientWidth; | |
hw = h * w; // get the area | |
// based on selected count** these should fit--- | |
// RStudio! | |
newHeight = Math.floor(Math.sqrt(hw/count)) * .85; | |
for(i = 0; i < graphy.length; ++i){ | |
graphy[i].style.height = newHeight + 'px'; | |
graphy[i].style.width = newHeight + 'px'; | |
gcn = graphy[i].childNodes; | |
if(cn.length > 0){ | |
th = gcn[0].clientHeight + gcn[1].clientHeight; | |
mb = newHeight - th; | |
gcn[5].style.height = mb + 'px'; //canvas control attempt | |
canYouPLEASElisten = graphy[i].querySelector('canvas'); | |
canYouPLEASElisten.style.height = mb + 'px'; //trigger zoom extent!! | |
canYouPLEASElisten.style.height = '100%'; | |
} | |
} | |
} | |
// Something selected by user triggers this function | |
function getOps(sel) { | |
//get ref to select list and display text box | |
graphy = document.querySelectorAll('#column-1 div.visNetwork'); | |
count = 0; // reset count of selected vis | |
// loop through selections | |
for(i = 0; i < sel.length; i++) { | |
opt = sel.options[i]; | |
if ( opt.selected ) { | |
count++ | |
graphy[i].style.display = 'block'; | |
console.log(count + " options selected"); | |
} else { | |
graphy[i].style.display = 'none'; | |
} | |
} | |
resizePlease(count); | |
} | |
``` |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment