我试图sankeyNetwork()
在networkD3包中使用Sankey图.
sankeyNetwork(Links = Flow_data, Nodes = Nodes_data,
Source = "Source_ID", Target = "Target",
Value = "value", NodeID = "Nodes_name",
width = 1000, height=600, fontsize = 16, nodeWidth = 50,
colourScale = "d3.scale.category20c()")
Run Code Online (Sandbox Code Playgroud)
可视化效果很好,但我想将颜色范围更改为单个范围.有没有机会改变SankeyNetwork的颜色?我需要一系列只有3种颜色,我可以自己设置(不是d3.scale的预定义colourScales).
我报告了一个问题https://github.com/rstudio/rmarkdown/issues/967,我想知道是否有解决方法(如何使这项工作)?
下面的可重复示例(改变n和nGroup以查看效果 - 当n = 100且nGroup = 10时不重叠):
---
title: "Test links to sections in DT"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo=FALSE)
knitr::opts_chunk$set(message=FALSE)
knitr::opts_chunk$set(warning=FALSE)
## DT Test
```{r echo=FALSE}
library(DT)
n <- 1000
nGroup <- 100
testDF <- data.frame(text=paste0("Section", 1:n),
number=1:n,
group=rep(1:(n/nGroup), n/nGroup))
datatable(head(testDF), caption="Whole table", rownames=FALSE, escape=FALSE, options=list(paging=FALSE, info=FALSE))
getDT<-function(x) {
a <- list()
a[[1]] <- htmltools::tags$h3("test1")
a[[2]] <- datatable(x[, c("text", "number")], caption=htmltools::tags$caption(style="caption-side: top; text-align: left;", "Group: ", htmltools::strong(x$group)), rownames=FALSE, escape=FALSE, filter=c("none"), options=list(paging=FALSE, info=FALSE))
a[[3]] <- …
Run Code Online (Sandbox Code Playgroud) 我有一个包含100个观测值的双变量数据集.我使用了六边形装箱,结果是26个六边形箱.为了保存26个六边形箱中每个的100个观测值的行,我使用了base::attr
R中的函数.在下面的代码中,这是在以下位置完成的:
attr(hexdf, "cID") <- h@cID
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建Plotly
六边形分箱的交互式R 对象,以便如果用户点击给定的六边形分区,它们将获得分组到该分区中的100个观察的行.我完成了这个目标的一部分.我的MWE如下:
library(plotly)
library(data.table)
library(GGally)
library(hexbin)
library(htmlwidgets)
set.seed(1)
bindata <- data.frame(ID = paste0("ID",1:100), A=rnorm(100), B=rnorm(100))
bindata$ID <- as.character(bindata$ID)
x = bindata[,c("A")]
y = bindata[,c("B")]
h <- hexbin(x=x, y=y, xbins=5, shape=1, IDs=TRUE)
hexdf <- data.frame (hcell2xy (h), hexID = h@cell, counts = h@count)
attr(hexdf, "cID") <- h@cID
pS <- ggplot(hexdf, aes(x=x, y=y, fill = counts, hexID=hexID)) + geom_hex(stat="identity")
ggPS <- ggplotly(pS)
myLength <- length(ggPS[["x"]][["data"]])
for (i in 1:myLength){
item =ggPS[["x"]][["data"]][[i]]$text[1]
if (!is.null(item)) …
Run Code Online (Sandbox Code Playgroud) 我想重点关注上面的流程,将蓝色的"热量发电"块连接到粉红色的"电网"块.你会注意到流量是526 TWh,这是#62行Energy$links
.
Energy$links
source target value
...
62 26 15 525.531
...
Run Code Online (Sandbox Code Playgroud)
现在让我们关注引用节点的source
和target
值Energy$nodes
.
Energy$nodes
name
...
15 Heating and cooling - homes
16 Electricity grid
...
26 Gas reserves
27 Thermal generation
...
Run Code Online (Sandbox Code Playgroud)
source
当它实际引用节点数据的行"27"时,该值为"26".当实际引用节点数据的行"16"时,目标值为"15".为什么链接数据中的源和目标值实际上是指节点数据中的行 x-1而不是x?除了在构建这些Sankey图时在我头脑中执行x - 1计算时,还有什么方法吗?
这是完整的Energy
数据:
> Energy
$`nodes`
name
1 Agricultural 'waste'
2 Bio-conversion
3 Liquid
4 Losses
5 Solid
6 Gas
7 Biofuel imports
8 Biomass imports
9 …
Run Code Online (Sandbox Code Playgroud) 在JS中这似乎是可能的。
添加带有URL的独立弹出窗口很容易:
library(leaflet)
content <- paste(sep = "<br/>",
"<b><a href='http://www.samurainoodle.com'>Samurai Noodle</a></b>"
)
leaflet() %>% addTiles() %>%
addPopups(-122.327298, 47.597131, content,
options = popupOptions(closeButton = FALSE)
)
Run Code Online (Sandbox Code Playgroud)
添加标记时也很简单,当单击该标记时,将在弹出窗口中提供一个URL:
leaflet() %>% addTiles() %>%
addMarkers(-122.327298, 47.597131, popup = content,
options = popupOptions(closeButton = FALSE)
)
Run Code Online (Sandbox Code Playgroud)
也许有一些习惯传递给传单了...
吗?
最后,自定义JS函数如何为每个地图标记显示不同的URL?考虑示例data.frame:
df <- data.frame(url = c("/sf/ask/tagged/python/",
"/sf/ask/tagged/r/")),
lng = c(-122.327298, -122.337298),
lat = c(47.597131,47.587131))
Run Code Online (Sandbox Code Playgroud)
* 之前曾有人问过这个问题,但我在这里再问一个问题,并举一个最小的,可复制的例子。
在 R 中,使用rgl和htmlwidgets库,我试图提取一个 HTML 文件,其中包含一个带切换按钮的小部件。
以下示例在 RStudio 查看器中执行我想要的操作。HTML 导出在没有切换按钮的情况下工作,但在 rglwidget 包含这些按钮时失败。
第一部分基于这些 rgl 示例,以及htmlwidgets 手册中的导出部分。
library(rgl)
open3d()
x <- sin(1:100)
y <- cos(1:100)
z <- -100:100/100
# draw a barrel
sids1 <- spheres3d(x, y, z, col = rainbow(1000),radius=0.05)
# draw a pole
sids2 <- spheres3d(0, 0, z, col = rainbow(1000),radius=0.05)
# create widgets with toggle buttons
widgets <- rglwidget() %>%
toggleWidget(ids = sids1, label = "Toggle Barrel") %>%
toggleWidget(ids = …
Run Code Online (Sandbox Code Playgroud) 我想让我的散点图点可点击,并在点击时打开每个点各自的超链接。我正在尝试使用 ggplotly 来做到这一点。使用 plotly() 构建绘图时,有一种简单的方法可以做到这一点(参见下面的第一个示例)。但是,在 ggplotly 上运行它时,单击时会打开一个空网页。
任何人都知道我如何使用下面的代码进行这项工作?代码的 OnRender 部分是否有解决方案(不熟悉 javascript)?使用 plotly 的第一个代码块有效。第二个代码块是我使用 ggplotly 的基本尝试,但它不起作用。
任何关于这方面的指导都会很棒!提前致谢
library(plotly)
library(htmlwidgets)
library(dplyr)
#1. Using plotly
mtcars$url <- paste0(
"http://google.com/#q=",
rownames(mtcars))
p <- plot_ly(mtcars, x = ~wt, y = ~mpg) %>%
add_markers(customdata = ~url)
onRender(p, "
function(el, x) {
el.on('plotly_click', function(d) {
var url = d.points[0].customdata;
window.open(url);
});
}
")
#2. Using ggplotly`
p <- ggplot(data = mtcars, aes(x = wt, y = mpg))+
geom_point()
pp <- ggplotly(p)
pp <- add_markers(pp, customdata = ~url) …
Run Code Online (Sandbox Code Playgroud) 我想使用Sankey流程图可视化美国各州的等级变化(即相对顺序的变化)。我正在使用networkd3软件包,并提出了以下内容:
library(dplyr)
library(networkD3)
df <- data_frame(origins=state.name[1:10], destinations=state.name[1:10])
lab <- c(df$origins, df$destinations)
nodes <- data.frame(node=c(0:9), name=lab)
links <- data.frame(source=c(0:9), target=c(10:19), value=rep(1,10))
sankeyNetwork(Links = links, Nodes = nodes, Source = 'source',
Target = 'target', Value = 'value', NodeID = 'name')
Run Code Online (Sandbox Code Playgroud)
我现在可以手动更改相对顺序。但是,我想知道是否有可能将订单固定在右侧并将阿拉巴马州置于第3级,加利福尼亚州置于第1级,等等...
我有这个代码:
library(networkD3)
# Load data
data(MisLinks)
data(MisNodes)
new.nodes <- MisNodes
new.nodes$var1 <- runif(nrow(MisNodes),1,2)
new.nodes$var2 <- runif(nrow(MisNodes),1,2)
# Some script to show the node index in the new.nodes data frame
script <- 'alert("row: " + (d.index + 1));'
# Plot
forceNetwork(Links = MisLinks, Nodes = new.nodes,
Source = "source", Target = "target",
Value = "value", NodeID = "name",
Group = "group", opacity = 0.8,
clickAction = script)
Run Code Online (Sandbox Code Playgroud)
我想通了通过询问来获取节点数据帧的行号d.index + 1
。但是我想显示一个包含所有节点信息的表,如下所示(也许格式更好):
name group size var1 var2
1 Myriel 1 15 …
Run Code Online (Sandbox Code Playgroud) 我有一个保存的 html 小部件(来自传单),我想在闪亮的应用程序中显示它。
usingincludeHTML()
在 ui.R 中给出时有效,但在使用 动态调用时无效renderUI()
。我有很多 .html 文件,我希望用户通过选择输入进行选择,所以我需要一个动态解决方案。
这篇流行文章在 Shiny App 中显示 HTML 文件的接受答案有一个动态解决方案,但它对我不起作用。没有给出错误,也没有渲染任何内容。
总之:
作品
ui <- fluidPage(
includeHTML("foo.html")
)
Run Code Online (Sandbox Code Playgroud)
不起作用
ui <- fluidPage(
htmlOutput("map")
)
server <- function(input,output){
output$map <- renderUI({
includeHTML(path = "foo.html")
})
}
Run Code Online (Sandbox Code Playgroud)
这个帖子也有相关,但是没找到解决办法。
htmlwidgets ×10
r ×9
networkd3 ×4
javascript ×3
leaflet ×2
shiny ×2
d3.js ×1
dt ×1
ggplotly ×1
htmltools ×1
networking ×1
onrender ×1
plotly ×1
r-markdown ×1
r-plotly ×1
rgl ×1
togglebutton ×1
widget ×1