假设我有以下数据框:
# Dummy data frame
df <- data.frame(x = rep(1:5, 2), y = runif(10), z = rep(c("A", "B"), each = 5))
# x y z
# 1 1 0.92024937 A
# 2 2 0.37246007 A
# 3 3 0.76632809 A
# 4 4 0.03418754 A
# 5 5 0.33770400 A
# 6 1 0.15367174 B
# 7 2 0.78498276 B
# 8 3 0.03341913 B
# 9 4 0.77484244 B
# 10 5 0.13309999 B
我想绘制案例z == "A"
作为点和案例z == "B"
作为线条。够简单的。
library(ggplot2)
# Plot data
g <- ggplot()
g <- g + geom_point(data = df %>% filter(z == "A"), aes(x = x, y = y))
g <- g + geom_line(data = df %>% filter(z == "B"), aes(x = x, y = y))
g
我的数据框和点和线的美学是相同的,所以这看起来有点冗长——特别是如果我想多次这样做的话(例如,z == "A"
通过z == "Z"
)。有什么办法可以说明吗ggplot(df, aes(x = x, y = y))
然后随后在适当的几何中陈述我的过滤或子集标准?
我发现问题本身的例子最具可读性,尽管很冗长。关于处理更多情况的问题的第二部分只需要进行更复杂的测试filter
例如使用%in%
(or grep
, grepl
等)在处理多种情况时。利用访问图层内默认绘图数据的可能性,并且正如 @MrFlick 所提到的,将美学映射移出各个图层会产生更简洁的代码。所有早期的答案都完成了情节,所以在这方面我的答案并不比他们中的任何一个更好......
library(ggplot2)
library(dplyr)
df <- data.frame(x = rep(1:5, 4),
y = runif(20),
z = rep(c("A", "B", "C", "Z"), each = 5))
g <- ggplot(data = df, aes(x = x, y = y)) +
geom_point(data = . %>% filter(z %in% c("A", "B", "C"))) +
geom_line(data = . %>% filter(z == "Z"))
g
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)