在 R 中的气泡图上显示唯一值

Show unique values on bubbles graph in R

我正在使用一个看起来或多或少像这样的数据库:

dput(ex)

structure(list(clave = c("01", "02", "03", "04", "05", "06", 
"07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", 
"18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", 
"29", "30", "31", "32", "33"), n = c(2127, 3519, 153, 2070, 3089, 
2971, 3005, 152, 53409, 2351, 4599, 3121, 4828, 7588, 25714, 
4218, 3032, 295, 3856, 3885, 7044, 3246, 2589, 2559, 2223, 2316, 
3560, 2695, 2465, 6742, 4024, 2065, 1627)), row.names = c(NA, 
-33L), class = c("tbl_df", "tbl", "data.frame"))

我正在使用 packcircles 包为一个变量创建气泡图,因为标准气泡被添加为 ggplot 的第三维。我也在使用 paletteer 库:

library(packcircles)
library(paletteer)

下一个代码创建将在图表上使用的 data.frame。首先,我为气泡(圆圈)创建坐标,然后合并我的 claven 来自原始 data.frame:

的变量
# Create circles
ex_ <- circleProgressiveLayout(ex$n)
ex_ <- circleLayoutVertices(ex_, npoints=50)

# Incorporate variables
ex_$clave <- rep(ex$clave, each=51)
ex_$n <- rep(ex$n, each=51)

# Palette
colors <- paletteer_c("ggthemes::Green-Gold", 33)

现在我们准备绘制图表了:

ggplot(data = ex_, aes(x, y, fill=clave)) +
    geom_polygon() +
    coord_fixed(ratio = 4/5) +
    theme_void() +
    scale_fill_manual(values = rev(colors)) +
    geom_text(size = 3, label= unique(ex_$n))-> my_graph

plotly::ggplotly(my_graph)

上面的代码抛出以下错误:

Error in `check_aesthetics()`:
! Aesthetics must be either length 1 or the same as the data (1683): label
Run `rlang::last_error()` to see where the error occurred.

如果我改用:

ggplot(data = ex_, aes(x, y, fill=clave)) +
    geom_polygon() +
    coord_fixed(ratio = 4/5) +
    theme_void() +
    scale_fill_manual(values = rev(colors)) +
    geom_text(size = 3, label= ex_$n)-> my_graph

plotly::ggplotly(my_graph)

现在每个圆圈都被文字包围(51 次相同的文字)。我想要的是当你将鼠标指针穿过每个圆圈时,只显示 claven 的一个值。

任何处理此问题的建议或想法将不胜感激。

这个怎么样。 mouse-over 在下面的静态图片中不起作用,但如果你 运行 代码,它应该。

  ex <- structure(list(clave = c("01", "02", "03", "04", "05", "06", 
                               "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", 
                               "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", 
                               "29", "30", "31", "32", "33"), n = c(2127, 3519, 153, 2070, 3089, 
                                                                    2971, 3005, 152, 53409, 2351, 4599, 3121, 4828, 7588, 25714, 
                                                                    4218, 3032, 295, 3856, 3885, 7044, 3246, 2589, 2559, 2223, 2316, 
                                                                    3560, 2695, 2465, 6742, 4024, 2065, 1627)), row.names = c(NA, 
                                                                                                                              -33L), class = c("tbl_df", "tbl", "data.frame"))

library(tidyverse)
library(packcircles)
library(paletteer)
ex_ <- circleProgressiveLayout(ex$n)
ex_ <- circleLayoutVertices(ex_, npoints=50)

# Incorporate variables
ex_$clave <- rep(ex$clave, each=51)
ex_$n <- rep(ex$n, each=51)

# Palette
colors <- paletteer_c("ggthemes::Green-Gold", 33)

ex_ <- ex_ %>% 
  mutate(lab = paste0("clave: ", clave, "\nN: ", n))

ggplot(data = ex_, aes(x, y, fill=clave, text=lab)) +
  geom_polygon() +
  coord_fixed(ratio = 4/5) +
  theme_void() +
  scale_fill_manual(values = rev(colors))-> my_graph

plotly::ggplotly(my_graph, tooltip = "text")

reprex package (v2.0.1)

于 2022-04-06 创建