首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R: ggplot2的"cex“选项,并巧妙地

R: ggplot2的"cex“选项,并巧妙地
EN

Stack Overflow用户
提问于 2020-12-23 07:31:07
回答 1查看 338关注 0票数 0

我正在使用R编程语言。我正试图弄清楚,一旦在R基中创建了样地,如何在ggplot2 2/plotly中“重新创建”情节。

例如,我创建了一些数据并绘制了一个图:

代码语言:javascript
运行
复制
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中重新创建一个类似的情节。我运行了一个名为tsne的统计算法:

代码语言:javascript
运行
复制
# 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“值成比例?

我尝试了以下几点:

代码语言:javascript
运行
复制
plot = ggplot(aes(x = X, y = Y), data = tsne_data) + geom_point(aes())

得到了这样的东西:

是否可以根据"lof“的值来改变这些点的大小?

代码语言:javascript
运行
复制
summary(lof)
hist(lof, breaks=10

)

是否有可能在拖动ggplot2图形的鼠标时,显示lof得分和f$ID?

代码语言:javascript
运行
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-23 14:07:20

您可以根据lof更改点大小。ggplotly图中的工具提示也可以进行调整以显示lof和name。

编辑:在工具提示中添加了var1、var2和var3

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
ggplotly(p1, tooltip = c("lof", "name", "var1", "var2", "var3"))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65420500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档