使用 ggplotly 的气泡图 - 使用滑块更改标签

Bubble Chart using ggplotly - Changing the labels using a slider

首先是我的数据:

df <- structure(list(rowname = c(
  "AA - 2018", "AA - 2019", "AA - 2020",
  "AB - 2018", "AB - 2019", "AB - 2020"
), Class = c(
  "AA", "AA",
  "AA", "AB", "AB", "AB"
), Year = c(
  2018L, 2019L, 2020L, 2018L,
  2019L, 2020L
), Vol = c(0.3, 0.4, 0.5, 0.2, 0.4, 0.7), Profit = c(
  -0.1,
  -0.4, 0.2, 0.5, 0.2, -0.9
), Amount = c(1L, 1L, 2L, 3L, 4L, 5L)), class = "data.frame", row.names = c(NA, -6L))

我正在尝试创建一个气泡图,其中气泡的大小取决于金额,并根据 x 轴上的盈利能力(占金额的百分比)和波动率(作为% 的数量)在 y 轴上。我添加了一个使用年份列的滑块,这样气泡就可以随着滑块年份的变化而变化。

我想做的是引入一个标签,它使用 'rowname' 列作为标签,它会根据滑块所在的年份而变化。例如。如果滑块在 2018 上,则一个气泡将标记为 AA - 2018,另一个气泡将标记为 AB - 2018,一旦滑块更改为 2019,则气泡将标记为 AA - 2019 和 AB - 2019 等。

当我 运行 下面的代码时,我同时获得了所有标签,看起来一团糟。

代码如下:

Bound <- 0.05
y_high <- max(df$Vol) + Bound
   y_low <- 0

x_high <-max(df$Profit) + Bound
x_low <- min(df$Profit) - Bound

plot <- ggplot(df, aes(x = Profit, y = Vol, size = Amount, color = Class)) +
  geom_point(aes(frame = Year), alpha = 0.2) + scale_size(range = c(5,50)) +
  geom_text(label = rownames(df))+
  scale_y_continuous(labels = scales::percent,expand = c(0, 0), limits = c(y_low,y_high)) +
  scale_x_continuous(labels = scales::percent,expand = c(0, 0), limits = c(x_low,x_high)) +
 

fig <- ggplotly(plot)

fig

您的代码有两个问题。

  1. 您仅在geom_point 中使用frame aes。因此,点因帧而异,但标签不变。要解决此问题,请将 frame = Year 放入全局 aes 中,即在 ggplot().

  2. 您希望标签等于列 rowname,但改用 rownames(df)。要解决此问题,请在 label.

    上映射 rowname

试试这个:

plot <- ggplot(df, aes(x = Profit, y = Vol, size = Amount, color = Class, frame = Year)) +
  geom_point(alpha = 0.2) +
  scale_size(range = c(5, 50)) +
  geom_text(aes(label = rowname), size = 5) +
  scale_y_continuous(labels = scales::percent, expand = c(0, 0), limits = c(y_low, y_high)) +
  scale_x_continuous(labels = scales::percent, expand = c(0, 0), limits = c(x_low, x_high))

fig <- ggplotly(plot)

fig