在多层图的一个方面显示特征子集
Displaying a subset of features in a facet of a multi-layer plot
我正在尝试生成一个多层图,其中一层中的点仅显示在使用另一层数据创建的小平面中。在下面的代码中,红色的点是 x1
或 x2
(就像 facet 的行标签一样)。
library(ggplot2)
set.seed(1000)
#generate first df
df1 = data.frame(x=rep(rep(seq(2,8,2),4),4),
y=rep(rep(seq(2,8,2),each=4),4),
v1=rep(c("x1","x2"),each=32),
v2=rep(rep(c("t1","t2"),each=16),2),
v3=rbinom(64,1,0.5))
# generate second df
df2 = data.frame(x=runif(20)*10,
y=runif(20)*10,
v4=sample(c("x1","x2"),20,T))
# create theme
t1=theme(panel.grid.major = element_blank(), text = element_text(size=18),
panel.grid.minor = element_blank(), strip.background= element_blank(),
axis.title.x = element_blank(), axis.title.y = element_blank())
# plot
ggplot() +
geom_point(data=df1, aes(x=x, y=y, colour = factor(v3)), shape=15, size=5) +
scale_colour_manual(values = c(NA,"black")) + facet_grid(v1~v2) +
geom_point(data=df2, aes(x=x,y=y, shape=v4), colour="red", size=4) +
coord_equal(ratio=1) + xlim(0, 10) + ylim(0, 10) + t1
EDIT: 黑色方块是通过手动将df1$v3 = 1
的颜色设置为black
和df1$v3 = 0
的颜色生成的 NA
. /编辑
但我真正想要的是仅显示 df2
中第一行 df2$v4 = x1
和第二行 df2$v4 = x2
的那些点(对应于df1$v1
的值和构面的行标签)。
我通过生成两个单独的图表来完成此操作...
ggplot() +
geom_point(data=df1[df1$v1=="x1",], shape=15, size=5,
aes(x=x, y=y, colour = factor(v3)), ) +
scale_colour_manual(values = c(NA,"black")) + facet_grid(~v2) +
geom_point(data=df2[df2$v4=="x1",], aes(x=x,y=y), colour="red", size=4) +
coord_equal(ratio=1) + xlim(0, 10) + ylim(0, 10) + t1
ggplot() +
geom_point(data=df1[df1$v1=="x2",], shape=15, size=5,
aes(x=x, y=y, colour = factor(v3)), ) +
scale_colour_manual(values = c(NA,"black")) + facet_grid(~v2) +
geom_point(data=df2[df2$v4=="x2",], aes(x=x,y=y), colour="red", size=4) +
coord_equal(ratio=1) + xlim(0, 10) + ylim(0, 10) + t1
...但我很好奇是否可以生成单个图,因为根据我的实际数据集,我有几个 x's
并且将这些图拼凑起来很耗时。
如果我们只是重命名 df2$v4
或创建一个名为 df2$v1
的新列是否有帮助,用于分面目的:
df2 <- dplyr::rename(df2, v1 = v4)
df2$v1 <- df2$v4
# either works
然后 ggplot
将按照您的意愿分配数据点,其中:
ggplot() +
geom_point(data=df1, aes(x=x, y=y, colour = factor(v3)), shape=15, size=5) +
scale_colour_manual(values = c(NA,"black")) +
facet_grid(v1~v2) +
geom_point(data=df2, aes(x=x,y=y), colour="red", size=4) +
coord_equal(ratio=1) + xlim(0, 10) + ylim(0, 10) +
t1
不是 100% 确定我理解你的问题...
我正在尝试生成一个多层图,其中一层中的点仅显示在使用另一层数据创建的小平面中。在下面的代码中,红色的点是 x1
或 x2
(就像 facet 的行标签一样)。
library(ggplot2)
set.seed(1000)
#generate first df
df1 = data.frame(x=rep(rep(seq(2,8,2),4),4),
y=rep(rep(seq(2,8,2),each=4),4),
v1=rep(c("x1","x2"),each=32),
v2=rep(rep(c("t1","t2"),each=16),2),
v3=rbinom(64,1,0.5))
# generate second df
df2 = data.frame(x=runif(20)*10,
y=runif(20)*10,
v4=sample(c("x1","x2"),20,T))
# create theme
t1=theme(panel.grid.major = element_blank(), text = element_text(size=18),
panel.grid.minor = element_blank(), strip.background= element_blank(),
axis.title.x = element_blank(), axis.title.y = element_blank())
# plot
ggplot() +
geom_point(data=df1, aes(x=x, y=y, colour = factor(v3)), shape=15, size=5) +
scale_colour_manual(values = c(NA,"black")) + facet_grid(v1~v2) +
geom_point(data=df2, aes(x=x,y=y, shape=v4), colour="red", size=4) +
coord_equal(ratio=1) + xlim(0, 10) + ylim(0, 10) + t1
EDIT: 黑色方块是通过手动将df1$v3 = 1
的颜色设置为black
和df1$v3 = 0
的颜色生成的 NA
. /编辑
但我真正想要的是仅显示 df2
中第一行 df2$v4 = x1
和第二行 df2$v4 = x2
的那些点(对应于df1$v1
的值和构面的行标签)。
我通过生成两个单独的图表来完成此操作...
ggplot() +
geom_point(data=df1[df1$v1=="x1",], shape=15, size=5,
aes(x=x, y=y, colour = factor(v3)), ) +
scale_colour_manual(values = c(NA,"black")) + facet_grid(~v2) +
geom_point(data=df2[df2$v4=="x1",], aes(x=x,y=y), colour="red", size=4) +
coord_equal(ratio=1) + xlim(0, 10) + ylim(0, 10) + t1
ggplot() +
geom_point(data=df1[df1$v1=="x2",], shape=15, size=5,
aes(x=x, y=y, colour = factor(v3)), ) +
scale_colour_manual(values = c(NA,"black")) + facet_grid(~v2) +
geom_point(data=df2[df2$v4=="x2",], aes(x=x,y=y), colour="red", size=4) +
coord_equal(ratio=1) + xlim(0, 10) + ylim(0, 10) + t1
...但我很好奇是否可以生成单个图,因为根据我的实际数据集,我有几个 x's
并且将这些图拼凑起来很耗时。
如果我们只是重命名 df2$v4
或创建一个名为 df2$v1
的新列是否有帮助,用于分面目的:
df2 <- dplyr::rename(df2, v1 = v4)
df2$v1 <- df2$v4
# either works
然后 ggplot
将按照您的意愿分配数据点,其中:
ggplot() +
geom_point(data=df1, aes(x=x, y=y, colour = factor(v3)), shape=15, size=5) +
scale_colour_manual(values = c(NA,"black")) +
facet_grid(v1~v2) +
geom_point(data=df2, aes(x=x,y=y), colour="red", size=4) +
coord_equal(ratio=1) + xlim(0, 10) + ylim(0, 10) +
t1
不是 100% 确定我理解你的问题...