我正在尝试将凸包覆盖在嘈杂的数据之上。我只想要主群集上的船体(而不是红色离群值)。
在绘制所有点时我如何绘制其他所有船体?
在尝试解决方法时,我不小心使所有异常值消失了。此外,在Shiny应用程序中绘制实际数据时,形状(21-25)变形。
通过构建统计信息或修改映射可以解决此问题吗?
要求:我还想将内容保留在ggplot2
中,因为这些内容都将包裹在ShinyApp中,如果用户单击复选框,则将绘制船体。每个图的簇数不同,但第一个总是离群值。
数据生成
library(dbscan)
library(ggplot2)
data("DS3")
DS3_cl <- hdbscan(DS3, minPts = 25)
DS3_comb <- DS3
DS3_comb$cluster <- as.character(DS3_cl$cluster)
图形函数/参数
cols <- c('#e41a1c','#377eb8','#4daf4a','#984ea3','#ff7f00','#a65628','#f781bf','#999999','#ffff33')
cols_2 <- c(NA,'#377eb8','#4daf4a','#984ea3','#ff7f00','#a65628','#f781bf','#999999','#ffff33')
StatChull <- ggproto("StatChull", Stat,
compute_group = function(data, scales) {
data[chull(data$x, data$y), , drop = FALSE]
},
# Do the outlier removal around here?
required_aes = c("x", "y")
)
stat_chull <- function(mapping = NULL, data = NULL, geom = "polygon",
position = "identity", na.rm = FALSE, show.legend = NA,
inherit.aes = TRUE, ...) {
layer(
stat = StatChull, data = data, mapping = mapping, geom = geom,
position = position, show.legend = show.legend, inherit.aes = inherit.aes,
params = list(na.rm = na.rm, ...)
)
}
图:
plot_1 <- ggplot(data = DS3_comb, aes(X, Y, color = cluster)) +
geom_point(alpha = 0.4) +
scale_color_manual(values = cols) +
theme_bw()
plot_2 <- plot_1 + stat_chull(fill = NA)
解决方法尝试:
plot_3 <- ggplot(data = DS3_comb, aes(X,Y, fill = cluster, color = cluster)) +
geom_point(shape = 21, alpha = 0.4) +
scale_fill_manual(values = cols) +
scale_color_manual(values = cols_2) +
theme_bw()
咨询的来源: