我正在尝试创建一个树状图,用标签和几何点来传达单独的信息。但是,我编写的用于使分支末尾的点美观的代码会覆盖标签的美观代码。如何在同一个情节中传达两种美学?
这是该图的基本代码:
p2 <- ggplot(segment(dendro_data(nt.agna.dend))) +
geom_segment(aes(x=x, y=y, xend=xend, yend=yend))
其中 nt.agna.data 是树状图的数据
这是文本的编码
p3 <- p2 + geom_text(data=label(dendro_data(nt.agna.dend)),
aes(label=label, x=x, y=y, colour=n_labs$group),
hjust = 1.5, angle = 90, size = 2.3)
其中 n_labs 包含树状图点的标记信息。
这会创建一个类似 的图,其中标签按颜色排列 但是,当我包含点美学数据时,文本美学会被覆盖:
p4 <- p3 + geom_point(data=label(dendro_data(nt.agna.dend)),
aes(x=x,y=y,shape=n_labs$factor, colour=n_labs$factor),
size = 2.3) +
scale_shape_manual(values=c(20,4)) +
scale_colour_manual(values=c("PRE"="red","NOT"="black"))
创建像这样的情节,其中的点具有美观性,但标签没有。 我怎样才能在同一个情节中传达两种美学信息,而不会让一个信息覆盖另一个信息?,我做错了什么?
要为标签和点着色,您必须创建适当的调色板,其中包括要分配给标签组的颜色和点类别的颜色。因为您的调色板仅将颜色分配给
nlabs$factor
的类别。因此,您的标签被分配为 na.value=
。
使用一些基于
ggdendro
入门 小插图中的默认示例的虚假示例数据:
library(ggdendro)
library(ggplot2)
set.seed(123)
model <- hclust(dist(USArrests), "ave")
nt.agna.dend <- as.dendrogram(model)
n_labs <- label(dendro_data(nt.agna.dend))
n_labs$group <- sample(LETTERS[1:9], nrow(n_labs), replace = TRUE)
n_labs$factor <- sample(c("PRE", "NOT"), nrow(n_labs), replace = TRUE)
# Create color palette
pal_color <- scales::hue_pal()(length(unique(n_labs$group)))
names(pal_color) <- unique(n_labs$group)
pal_color <- c(pal_color, c("PRE" = "red", "NOT" = "black"))
ggplot(segment(dendro_data(nt.agna.dend))) +
geom_segment(aes(x = x, y = y, xend = xend, yend = yend)) +
geom_text(
data = label(dendro_data(nt.agna.dend)),
aes(label = label, x = x, y = y, colour = n_labs$group),
hjust = 1, angle = 90, size = 2.3, nudge_y = -2
) +
geom_point(
data = label(dendro_data(nt.agna.dend)),
aes(x = x, y = y, shape = n_labs$factor, colour = n_labs$factor),
size = 2.3
) +
scale_shape_manual(values = c(20, 4)) +
scale_colour_manual(values = pal_color) +
scale_y_continuous(expand = expansion(mult = .05, add = c(20, 0)))