我需要使用(希望如此)ggplot2 复制一个类似“温度计”的图表,这样我就可以将它放在 Shiny 应用程序中。 甚至有可能实现这样的目标吗?事实上,我只需要一个 每个地块都有一个温度计,我什至不需要多个。一旦我对其进行 Shiny-fy,用户将更改输入,温度计颜色也会改变,但颜色渐变应始终保持一致。 我只需要帮助在 ggplot2 中完成初始温度计,我完全不知道如何做圆边、渐变、旁边的图标等。
您可以构建指南扩展。首先,我们需要一个构造函数,它只需将一个新参数
max
传递给指南,该参数将作为温度计中“水银”上升的水平。
library(ggplot2)
guide_thermometer <- function(max, ...) {
new_guide(
max = max,
...,
super = GuideThermometer
)
}
接下来我们需要一个新的引导类。下面,我们继承了 colorbar 指南,注册
max
参数并调整 build_decor()
函数。调整的要点是我们使用圆角矩形来剪辑渐变并用作框架。
GuideThermometer <- ggproto(
"GuideThermometer", GuideColourbar,
params = c(GuideColourbar$params, list(max = NULL)),
build_decor = function(decor, grobs, elements, params) {
if (!is.null(params$max)) {
decor$colour[decor$value > params$max] <- NA
}
grobs <- GuideColourbar$build_decor(decor, grobs, elements, params)
rounded <- grid::roundrectGrob(
r = unit(0.5, "snpc"),
gp = grid::gpar(fill = NA)
)
grobs$frame <- rounded
grobs$bar <- grid::editGrob(
grobs$bar,
vp = grid::viewport(clip = rounded)
)
grobs
}
)
最后,您可以使用如下所示的新指南。添加笑脸只需在指南中设置正确的
breaks
和 label
即可。
ggplot(mpg, aes(displ, hwy, colour = cty)) +
geom_point() +
scale_colour_viridis_c(
guide = guide_thermometer(max = 25),
breaks = 25, label = "\u263a"
) +
theme(legend.text = element_text(size = 16))
创建于 2024-04-12,使用 reprex v2.1.0
免责声明:我不知道这会如何闪亮。我认为,由于剪切路径的原因,可能需要使用支持 R 4.1.0 中引入的图形功能的设备。