R:绘制多条曲线与一个变量,但有 4 个因素
R: plot multiple curves vs one var but for 4 factors
我有一个 DF 看起来像:
id app vac dac
1: 1 1000802 579 455
2: 1 1000803 1284 918
3: 1 1000807 68 66
4: 1 1000809 1470 903
5: 2 1000802 407 188
6: 2 1000803 365 364
7: 2 1000807 938 116
8: 2 1000809 699 570
我需要在相同的 canvas 上为每个 app
绘制 vac
和 dac
作为 id
的函数。我知道如何通过使用 melt
和使用 ggplot
进行批量绘图来仅对一个 app
执行此操作。但是我不知道如何为任意数量的 factors/levels 做这件事。
在此示例中,4 app
共有 8 条曲线。有什么想法吗?
这是测试的数据框。谢谢!!
df = structure(list(id = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), app = c(1000802,
1000803, 1000807, 1000809, 1000802, 1000803, 1000807, 1000809
), vac = c(579, 1284, 68, 1470, 407, 365, 938, 699), dac = c(455,
918, 66, 903, 188, 364, 116, 570)), .Names = c("id", "app", "vac",
"dac"), class = c("data.table", "data.frame"), row.names = c(NA,
-8L))
编辑:对轴的一些说明,
x
axis = id
,y
axis = vac
和 dac
的值对于 4 个 app
因素中的每一个
我不确定,我理解你的问题,但我会做类似
ggplot(df,aes(vac,app,group=app)) + geom_point(aes(color=factor(app)))
有点不清楚你在找什么,但如果你正在寻找一条连接 vac
和 dac
值的直线,这里有一个使用 dplyr
的解决方案和 tidyr
.
首先,gather
vac
和 dac
列(这与 reshape2::melt
类似,但语法更容易理解)。然后,将 variable
(其中有 "vac" 和 "dac")设置为您的 x-locations,value
(来自旧的 vac
和 dac
列)作为你的 y,然后将 app
和 id
映射到美学(这里,color
和 linetype
)。设置 group
以确保它连接正确的点对,并添加 geom_line
:
df %>%
gather(variable, value, vac, dac) %>%
ggplot(aes(x = variable
, y = value
, color = factor(app)
, linetype = factor(id)
, group = paste(app, id))) +
geom_line()
给予
鉴于问题编辑,您可以像这样更改轴:
df %>%
gather(variable, value, vac, dac) %>%
ggplot(aes(x = id
, y = value
, color = factor(app)
, linetype = variable
, group = paste(app, variable))) +
geom_line()
给予
我有一个 DF 看起来像:
id app vac dac
1: 1 1000802 579 455
2: 1 1000803 1284 918
3: 1 1000807 68 66
4: 1 1000809 1470 903
5: 2 1000802 407 188
6: 2 1000803 365 364
7: 2 1000807 938 116
8: 2 1000809 699 570
我需要在相同的 canvas 上为每个 app
绘制 vac
和 dac
作为 id
的函数。我知道如何通过使用 melt
和使用 ggplot
进行批量绘图来仅对一个 app
执行此操作。但是我不知道如何为任意数量的 factors/levels 做这件事。
在此示例中,4 app
共有 8 条曲线。有什么想法吗?
这是测试的数据框。谢谢!!
df = structure(list(id = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), app = c(1000802,
1000803, 1000807, 1000809, 1000802, 1000803, 1000807, 1000809
), vac = c(579, 1284, 68, 1470, 407, 365, 938, 699), dac = c(455,
918, 66, 903, 188, 364, 116, 570)), .Names = c("id", "app", "vac",
"dac"), class = c("data.table", "data.frame"), row.names = c(NA,
-8L))
编辑:对轴的一些说明,
x
axis = id
,y
axis = vac
和 dac
的值对于 4 个 app
因素中的每一个
我不确定,我理解你的问题,但我会做类似
ggplot(df,aes(vac,app,group=app)) + geom_point(aes(color=factor(app)))
有点不清楚你在找什么,但如果你正在寻找一条连接 vac
和 dac
值的直线,这里有一个使用 dplyr
的解决方案和 tidyr
.
首先,gather
vac
和 dac
列(这与 reshape2::melt
类似,但语法更容易理解)。然后,将 variable
(其中有 "vac" 和 "dac")设置为您的 x-locations,value
(来自旧的 vac
和 dac
列)作为你的 y,然后将 app
和 id
映射到美学(这里,color
和 linetype
)。设置 group
以确保它连接正确的点对,并添加 geom_line
:
df %>%
gather(variable, value, vac, dac) %>%
ggplot(aes(x = variable
, y = value
, color = factor(app)
, linetype = factor(id)
, group = paste(app, id))) +
geom_line()
给予
鉴于问题编辑,您可以像这样更改轴:
df %>%
gather(variable, value, vac, dac) %>%
ggplot(aes(x = id
, y = value
, color = factor(app)
, linetype = variable
, group = paste(app, variable))) +
geom_line()
给予