stat_density_2d()我分别使用(左)和(右)在 R 中创建了以下图表geom_density2d_filled()。尽管两个图表在视觉上看起来相同,但级别却显着不同。
如何将这些价值观结合起来或解释?例如,右图中的黄色区域是否覆盖了最密集区域中观测值的 25%,青色区域是否覆盖了 50%。这些不同层次之间有何关系?
library(ggplot2)
set.seed(123)
dat <-
data.frame(
X = c(rnorm(300, 3, 2.5), rnorm(150, 7, 2)),
Y = c(rnorm(300, 6, 2.5), rnorm(150, 2, 2)))
ggplot(dat, aes(X, Y)) +
stat_density_2d(geom = "polygon",
aes(fill = after_stat(level)), bins = 4) +
geom_point(alpha = 0.1)
ggplot(dat, aes(X, Y)) +
geom_density2d_filled(
aes(fill = after_stat(level)),
contour_var = "ndensity",
breaks = seq(0.25, 1, length.out = 4)
) +
geom_point(alpha = 0.1)
# EDIT to incorporate chart based on comment
ggplot(dat, aes(X, …Run Code Online (Sandbox Code Playgroud) 我的目标是绘制一个包含循环的圆形网络,即边的起点和终点位于同一节点。如果节点之间有很多连接,就会出现循环总是画在右侧的问题。这会导致非常不愉快的图形呈现。对于小型网络,这可以手动计算(参见例如这篇文章)。
然而,对于可能并不总是包含相同环路的大型网络来说,这变得更加困难。因此,我正在寻找一种自动化的方法(而不是提到的手动过程)来将循环始终放置在网络的外部,以确保它们不会与图中的边缘重叠。
此问题的示例如下所示,其中,特别是节点“g”、“h”、“i”以及在某种程度上“j”遭受此问题。该图仅限于包含权重高于 5 的边,以表明并非所有循环都需要始终可用。
网络示例:
重现网络的代码:
# packages
library(ggraph)
library(igraph)
# create example data
set.seed(123)
adj_mat <- matrix(runif(100, 0, 10), nrow=10)
colnames(adj_mat) <- letters[1:10]
# create graph object and remove edges below threshold
g <- graph_from_adjacency_matrix(adj_mat, weighted = T, diag = T)
g <- delete.edges(g, which(E(g)$weight < 5))
# plot
ggraph(g, layout = "circle") +
geom_edge_link() +
geom_edge_loop() +
geom_node_circle(aes(r=0.1), fill = "orange") +
geom_node_text(aes(label = colnames(adj_mat))) +
theme(aspect.ratio = 1)
Run Code Online (Sandbox Code Playgroud) 我正在使用ggplot包含颜色条的多面图。我想将颜色条缩放到多面图的大小。按照 @AllanCameron 在这篇文章中关于单个图的想法并调整函数以考虑条带大小和图之间的空间,我能够正确计算出图例的大小。因此,无论ncol、panel.spacing.y或 ,图例的大小都被正确指定。strip.text.x。
但是,默认情况下,图例位于两个没有条带的图之间的中心。到目前为止,通过legend.position或调整图例并不能帮助正确指定它。如何将图例与图表顶部(即条带顶部)正确对齐(有关预期输出,请参阅右侧的图)?legend.justification
我仅在右侧图表中将图例对齐到顶部,而没有使用外部图形程序调整大小。因此,虽然左侧图表中的图例高度看起来太小,但实际上尺寸还不错。
library(ggplot2)
df <- expand.grid(
x = c(1, 2, 3),
y = c(1, 2, 3),
g = c("one", "two", "three", "four")
)
set.seed(1)
df$v <- runif(nrow(df), min = 0, max = 1)
make_fullsize <- function() structure("", class = "fullsizebar")
ggplot_add.fullsizebar <- function(obj, g, name = "fullsizebar") {
h <- ggplotGrob(g)$heights
panel <- which(grid::unitType(h) == "null")
panel_height <- unit(1, "npc") - …Run Code Online (Sandbox Code Playgroud)