我正在使用R编程语言。我试图弄清楚一旦在基础R中创建了ggplot2 / plotly地图,该如何“重新创建”它们。
例如,我创建了一些数据并绘制了一个图:
library(Rtsne)
library(cluster)
library(ggplot2)
library(dplyr)
library(dbscan)
library(plotly)
#generate data
var_1 <- rnorm(100,1,4)
var_2<-rnorm(100,10,5)
var_3 <- sample( LETTERS[1:4], 100, replace=TRUE, prob=c(0.1, 0.2, 0.65, 0.05) )
response_variable <- sample( LETTERS[1:2], 100, replace=TRUE, prob=c(0.4, 0.6) )
#put them into a data frame called "f"
f <- data.frame(var_1, var_2, var_3, response_variable)
#declare var_3 and response_variable as factors
f$response_variable = as.factor(f$response_variable)
f$var_3 = as.factor(f$var_3)
#create id
f$ID <- seq_along(f[,1])
#gower distance
gower_dist <- daisy(f[, -c(4,5)],
metric = "gower")
#lof plot
lof <- lof(gower_dist, k=3)
plot(gower_dist, pch = ".", main = "LOF (k=3)")
points(gower_dist, cex = (lof-1)*3, pch = 1, col="red")
text(gower_dist[lof>2,], labels = round(lof, 1)[lof>2], pos = 3)
这是情节的图片:
现在,我试图在ggplot2和plotly中重新创建一个类似的图。我运行了一个称为tsne的统计算法:
# tsne
tsne_obj <- Rtsne(gower_dist, is_distance = TRUE)
tsne_data <- tsne_obj$Y %>%
data.frame() %>%
setNames(c("X", "Y")) %>%
mutate(
name = f$ID)
我希望新图的轴为:(tsne_data $ X,tsne_data $ Y)。
我不确定是否仍然可以使用红色圆圈在ggplot2中重新创建以前的曲线(红色圆圈的半径与“ lof”分数成正比)。是否仍然可以像以前一样在ggplot2中进行类似的绘制?是否可以将ggplot2中的点的大小更改为与“ lof”值成比例?
我尝试了以下方法:
plot = ggplot(aes(x = X, y = Y), data = tsne_data) + geom_point(aes())
并得到了这样的东西:
是否可以根据“ lof”的值来更改这些点的大小(例如
summary(lof)
hist(lof, breaks=10
)
是否有可能在您拖动ggplot2的图形表示形式的鼠标时显示lof得分和f $ ID?
plotly_plot = ggplotly(plot)
谢谢!
来源:https : //www.rdocumentation.org/packages/dbscan/versions/1.1-5/topics/lof https://dpmartin42.github.io/posts/r/cluster-mixed-types
您可以基于lof更改点大小。ggplotly
还可以调整图中的工具提示以显示lof和名称。
编辑:在工具提示中添加了var1,var2和var3
tsne_obj <- Rtsne(gower_dist, is_distance = TRUE)
tsne_data <- tsne_obj$Y %>%
data.frame() %>%
setNames(c("X", "Y")) %>%
mutate(
name = f$ID,
lof=lof,
var1=f$var_1,
var2=f$var_2,
var3=f$var_3
)
p1 <- ggplot(aes(x = X, y = Y, size=lof, key=name, var1=var1,
var2=var2, var3=var3), data = tsne_data) +
geom_point(shape=1, col="red")+
theme_minimal()
p1
ggplotly(p1, tooltip = c("lof", "name", "var1", "var2", "var3"))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句