使用 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
您的代码有两个问题。
您仅在geom_point
中使用frame
aes。因此,点因帧而异,但标签不变。要解决此问题,请将 frame = Year
放入全局 aes 中,即在 ggplot()
.
中
您希望标签等于列 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
首先是我的数据:
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
您的代码有两个问题。
您仅在
中geom_point
中使用frame
aes。因此,点因帧而异,但标签不变。要解决此问题,请将frame = Year
放入全局 aes 中,即在ggplot()
.您希望标签等于列
上映射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