r - 如何使用最小代码ggplot2 / R从数据帧的不同变量中绘制不同图形中的变化图
问题描述
我想知道包或另一个包中是否有一个函数ggplot2
或一个for循环方式R
来从数据帧的各种变量/列创建不同的图图,而不需要对每个变量进行编码,每个变量的每个图。例如,如果我有一个名为 df 的数据框,其中包含几列:(id
数据键)、v1
、v2
、 ...、v10
。我想在 Y 轴和X 轴上绘制各种变量 ( v2
to ) ,但不对每个变量重复相同的代码。v8
v1
# For 1 plot, how could I code for various plots?
plot_v2 <- df %>% # (plot_name as column name, i.e plot_v2)
ggplot( aes(x=v1, y=v2, group=id, color=id)) +
geom_line()
这段代码创建了一个带有绘图的图形,我想知道一种方法来对 Y 轴上的所有变量执行此操作,每个变量v2
都有v8
一个新图形。
这只是一个理论问题,任何关于要查看的函数或编写 for 循环的方法的建议或提示都会非常有帮助。我无法提供任何样本数据。我曾尝试使用 for 循环,但是当我必须指定轴的变量aes()
名称以及绘图对象的名称时会出现一些问题。非常感谢任何帮助!
因为我的第一篇询问这个疑问的帖子碰巧被关闭了,我会说清楚,我不想在同一个绘图/图形中绘制所有变量,我想知道如何为每个变量创建一个新图形。就像在 Matlab 中一样,它每次都会使用 figure() 函数并遍历表的列。
解决方案
让我们定义一个示例数据框
df <- data.frame(
v1 = runif(40, min = 0, max = 20),
v2 = runif(40, min = -10, max = 10),
v3 = runif(40, min = -30, max = 40),
v4 = runif(40, min = -30, max = 40),
v5 = runif(40, min = -30, max = 40),
v6 = runif(40, min = -30, max = 40),
v7 = runif(40, min = -30, max = 40),
v8 = runif(40, min = -30, max = 40),
id = rep(c("a", "b", "c", "d"), each = 10)
)
我们可以定义一个函数,该函数将索引和数据框作为输入,并根据传递的索引生成图
# to change the selected columns, edit `[[i + 1]]`
make_plot <- function(i, df) {
df %>%
ggplot(aes(x = v1, y = .[[i + 1]], color = id)) +
geom_line()
}
最后,我们通过调用 lapply 函数来表示图
lapply(1:7, make_plot, df)
推荐阅读
- android - 当您打开所有最近的应用程序时,Cordova android 启动屏幕未显示(显示黑色窗口)
- c# - 统一启用隐藏移动输入后,输入字段不可编辑
- android - Moshi 日期适配器 begin_object 但被 begin_array
- git - 如何让我的分支显示“您的分支与 'origin/master' 是最新的
- javascript - 避免请求对象上的空字符串值
- python - 匹配熊猫系列对象字符串中的确切子字符串
- android - 如何使用 google vision api 检测人脸的颈部?
- ionic-framework - 如何使用蓝牙插件从 ionic 4 应用程序和物联网应用程序发送和接收数据
- testing - 运行 Rust 测试时,如何在函数内部执行蛮力函数验证?
- python - sklearn 预测期间的异常:float() 参数必须是字符串或数字,而不是“dict”(错误代码:2)