簡體   English   中英

R:ggplot2 和 plotly 的“cex”選項

[英]R: “cex” option for ggplot2 and plotly

我正在使用 R 編程語言。 一旦在基礎 R 中創建了圖,我試圖弄清楚如何在 ggplot2/plotly 中“重新創建”圖。

比如我創建了一些數據,做了一個plot:

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)

這是 plot 的圖片:

在此處輸入圖像描述

現在,我正在嘗試在 ggplot2 和 plotly 中重新創建類似的 plot。 我運行了一個名為 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 中重新創建以前的 plot(紅色圓圈的半徑與“lof”分數成比例)。 是否仍然可以像以前一樣在 ggplot2 中制作類似的 plot ? 是否可以將 ggplot2 中點的大小更改為與“lof”值成比例?

我嘗試了以下方法:

plot = ggplot(aes(x = X, y = Y), data = tsne_data) + geom_point(aes())

並得到了這樣的東西:

在此處輸入圖像描述

是否可以根據“lof”的值更改這些點的大小(例如

summary(lof)
hist(lof, breaks=10

)

是否有可能當您拖動 ggplot2 的 plotly 再現的鼠標時,它會顯示 lof 分數和 f$ID?

plotly_plot = ggplotly(plot)

謝謝!

Sources: https://www.rdocumentation.org/packages/dbscan/versions/1.1-5/topics/lof https://dpmartin42.github.io/posts/r/cluster-mixed-types

您可以根據 lof 改變點大小。 ggplotly圖表中的工具提示也可以調整為顯示 lof 和 name。

編輯:在工具提示中添加了 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"))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM