r - 使用 ggplot2 对绘图进行条件格式设置
问题描述
我正在编写一个利用 ggplot2 的自定义包。目的是制作符合公司品牌和风格的标准情节。
在函数中,用户将识别参数的输入。根据绘图类型,使用的比例需要不同(即离散值与连续值)。我希望函数根据参数的数据类型选择适当的比例。
scatter_plot_multiple <- function(data, xaxis, yaxis, grouping, title = "", subtitle = "", xlabel = "", ylabel = "") {
xaxis <- enquo(xaxis)
yaxis <- enquo(yaxis)
grouping <- enquo(grouping)
ggplot(data) +
aes(!!xaxis, !!yaxis, colour = !!grouping) +
geom_point() +
labs(title = title,
subtitle = subtitle,
x = xlabel,
y = ylabel) +
customTheme() +
custom_scale_colour()
}
在上一个函数中,我希望custom_scale_colour()
根据grouping
参数的数据类型进行更改。例如:
scatter_plot_multiple(mpg, cty, hwy, drv)
将使用 custom_scale_colour()
scatter_plot_multiple(mpg, cty, hwy, cyl)
将使用 custom_gradient_colour()
我不确定如何应对这一挑战。
解决方案
在 ggplot2 中,您可以像在 magrittr/dplyr 管道中一样添加条件语句。插入一个用大括号括起来的 if 语句:+ {if ([condition]) {[action]}}
. 应用于函数内引用的变量名,使用这种方法可能如下所示。
library(ggplot2)
library(dplyr)
library(rlang)
scatter_plot_multiple <- function(data, xaxis, yaxis, grouping, title = "", subtitle = "", xlabel = "", ylabel = "") {
xaxis <- enquo(xaxis)
yaxis <- enquo(yaxis)
grouping <- enquo(grouping)
groupingClass <- class(pull(data, as_name(grouping)))
ggplot(data) +
aes(!!xaxis, !!yaxis, colour = !!grouping) +
geom_point() +
labs(title = title,
subtitle = subtitle,
x = xlabel,
y = ylabel) +
customTheme() +
{if (groupingClass == 'character') {
custom_scale_colour()}} +
{if (groupingClass == 'numeric') {
custom_gradient_colour()}}
}
推荐阅读
- r - 将表前后元数据的.txt文件导入R
- javascript - 将大型 JSON 文件保存到 MySQL 时性能更好
- sql - 如何返回最大滚动平均值的日期范围?
- laravel - 带有选择框 Laravel 的表单的 POST 请求
- php - 防止机器人夸大我的读取/命中计数?
- jpa - 如何在 JPA 中创建包含属性的关系?
- python - RSA公钥大小python
- php - 使用 wp_audio_shortcode 的 Wordpress 音频
- android - Google Fit 多久在不同设备之间同步一次数据以及它们如何同步?
- unity3d - Unity 和 vuforia 无法生成 3D 角色