我在networkD3包中创建了一个sankey图.我想修改节点和链接的颜色和透明度.
我的数据networkD3_data最后附上.
问题1:如何使用用户定义的调色板修改节点颜色?
我不知道如何使用用户定义的调色板修改颜色.我必须使用特定于每个节点源的相同调色板来与我拥有的其他绘图保持一致.
目前,通过定义,我可以让每个源节点都是不同的颜色,所有目标节点都是相同的颜色NodeGroup.下面的图表接近我想要的,但是现在我想自己指定每个源节点的颜色.
library(networkD3)
sankeyNetwork(Links = networkD3_data$links, Nodes = networkD3_data$nodes, Source = "source", Target = "target", Value = "value", NodeID = "name", NodeGroup="group", fontSize=14)
Run Code Online (Sandbox Code Playgroud)
?sankeyNetwork说有一个colourScale参数,它带有"指定节点的分类色标的字符串".我认为这意味着我可以将具有所需颜色的列添加到networkD3_data$nodes数据框并按此调用colourScale:
sankeyNetwork(Links = networkD3_data$links, Nodes = networkD3_data$nodes, Source = "source", Target = "target", Value = "value", NodeID = "name", NodeGroup="group", fontSize=14, colourScale="colors")
Run Code Online (Sandbox Code Playgroud)
但这不起作用,没有产生情节.我搜索了stackoverflow,并在2014年找到了答案:在这里,但我认为这不再适用,因为我在Error: unexpected symbol调用这些提议的解决方案时遇到错误(或者我可能只是不知道如何正确实现).
d3.scale.ordinal().range(["#7d3945","#e0677b", "#244457"])
d3.scaleOrdinal().range(["#7d3945","#e0677b", "#244457"])
Run Code Online (Sandbox Code Playgroud)
问题2:是否可以定义源和目标的显示顺序?
那么源从Source0到Source10列出,目标从Target11到Target47?这套在哪里?我知道这对于允许算法最佳地定位节点是违反直觉的.
问题3:如何使用用户定义的调色板修改链接颜色并更改透明度/不透明度?
我还想使用与源相同的颜色方案对源发出的链接进行颜色编码.我可以通过定义来做到这一点LinkGroup,见下图.我再次接近我想要的,但我只需要指定自己使用的颜色,我不知道在哪里修改它.我还想调整不透明度,使源颜色比链接颜色更坚固.
sankeyNetwork(Links = …Run Code Online (Sandbox Code Playgroud) 我想改变我的fviz_clust情节的结果。具体来说,将图例更改为“簇”而不是“簇”,同时删除图例中找到的卷曲线(我认为它们是字母,但不完全确定)。
我知道fviz_cluster与其他元素一起工作,ggplot.因此我的第一个想法是更改每个scale_..._..情节中的图例标题,但这仍然导致原始图例显示。其次,我以为我可以引入一个scale_shape_manual()对象ggplot,但情节忽略了它。
代码:
km.res <- kmeans(iris[,-5], 3)
p <- fviz_cluster(km.res, iris[,-5]) +
scale_color_brewer(palette='Set2') + # set guides=FALSE to remove legend
scale_fill_brewer(palette='Set2') +
scale_shape_manual('1'=22,'2'=23,'3'=24) # plot ignores this
ggtitle(label='')
p
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想显示一个与 fviz_cluster 生成的非常相似的图例,但图例中每个形状周围都有形状和颜色框。最后的标题是“集群”。
在下面的示例中,是否有可能的解决方法来左对齐由geom_label_repel(或geom_text_repel)创建的文本标签,其中所有文本都以正值放置,nudge_x并且仅在direction参数中调整了 y 位置?目前,默认行为是居中对齐文本:
library(ggplot2)
library(ggrepel)
ggplot(mtcars, aes(x=factor(gear), y=mpg, colour=factor(gear))) +
geom_point(size=3) +
facet_wrap(~cyl, labeller=label_both) +
scale_x_discrete(expand=c(0, 1.5)) +
geom_label_repel(aes(label=rownames(mtcars)),
size=3, segment.size=0.25, nudge_x=0.5, direction="y")
Run Code Online (Sandbox Code Playgroud)
我希望通过如下例所示的设置来模拟geom_label(或geom_text) 中可能的左对齐hjust=0,同时能够在 y 方向自动排斥标签:
ggplot(mtcars, aes(x=factor(gear), y=mpg, colour=factor(gear))) +
geom_point(size=3) +
facet_wrap(~cyl, labeller=label_both) +
scale_x_discrete(expand=c(0, 1.5)) +
geom_label(aes(label=rownames(mtcars)), size=3, nudge_x=0.2, hjust=0)
Run Code Online (Sandbox Code Playgroud)
编辑:作为一个黑客,是否有可能将 hjust(和 vjust)构建到 ggrepel 中?