我的情节包括三个圆圈和两个点。我希望完成两个看似简单但难以完成的任务。我希望1)创建两个图例&2)更改住家点的形状,大小和颜色。使用以下功能生成的圆圈...
circleFun <- function(center,diameter, npoints){
# recovered from
# https://stackoverflow.com/questions/6862742/draw-a-circle-with-ggplot2
r = diameter / 2
tt <- seq(0,2*pi,length.out = npoints)
xx <- center[1] + r * cos(tt)
yy <- center[2] + r * sin(tt)
return(data.frame(x = xx, y = yy))
}
然后,我用3个不同的输入调用该函数,以为每个cirlce生成100个x-y点
A <- circleFun(c(0,0), 1, npoints=100) %>%
cbind("A") %>%
set_names(c("x", "y", "Neighborhood"))
B <- circleFun(c(.5, .5), 1, npoints=100) %>%
cbind("B") %>%
set_names(c("x", "y", "Neighborhood"))
C <- circleFun(c(1, 1), 1, npoints=100) %>%
cbind("C") %>%
set_names(c("x", "y", "Neighborhood"))
neigh <- rbind(A, B, C)
然后创建我的点数据
hh <- as.data.frame(matrix(c(.25,.5,.25,.5,1,2), 2, 3)) %>%
set_names(c("x", "y", "Household"))
到目前为止,我有两个不同的数据集,两个点,都遵循aes(x,y)。但是,它们的分组是不同的:第一个数据集按“邻居”分组,第二个数据集按“家庭”分组。
然后我画出到目前为止的情况。
# Plot Neighborhoods and set up plot specifics
c <- ggplot(data=neigh, aes(x,y, group = Neighborhood, color = Neighborhood)) +
geom_path(size = 1.5) +
xlab("Quality of Public Amenities") +
ylab("Price of Housing") +
ggtitle("Figure 2.5") +
theme(panel.grid = element_blank(),
axis.text.x = element_blank(),
axis.text.y = element_blank(),
axis.ticks.x = element_blank(),
axis.ticks.y = element_blank(),
plot.title = element_text(hjust=0.5, face = 'bold', size = 14))
# Add corresponding household points
c+geom_point(data=hh, aes(x=x,y=y,group = as.factor(Household), color = as.factor(Household)))
这是我的输出。
那我为什么要在这里寻求帮助?我希望1)创建两个图例,一个用于邻域,另一个用于家庭,2)更改家庭点的形状,大小和颜色。由于这两个点图的事实,R不允许我区分图的美感(
aes()
),这使我无法完成任务1和2。该示例是完全可复制的。 最佳答案
试试这个。首先,我仅将x
和y
用作全局美学。第二个,而不是在geom_point
上的color
中映射家庭,我在fill
上映射它,这将添加第二个图例。该解决方案的一个缺点。您必须从填充的形状中进行选择,例如填充点的形状21。点的大小可以通过size
参数设置,而颜色可以设置,例如通过scale_fill_manual
。
library(ggplot2)
library(dplyr)
library(purrr)
# Plot Neighborhoods and set up plot specifics
c <- ggplot(data=neigh, aes(x,y)) +
geom_path(aes(group = Neighborhood, color = Neighborhood), size = 1.5) +
xlab("Quality of Public Amenities") +
ylab("Price of Housing") +
ggtitle("Figure 2.5") +
theme(panel.grid = element_blank(),
axis.text.x = element_blank(),
axis.text.y = element_blank(),
axis.ticks.x = element_blank(),
axis.ticks.y = element_blank(),
plot.title = element_text(hjust=0.5, face = 'bold', size = 14))
# Add corresponding household points
c +
geom_point(data=hh, aes(group = as.factor(Household), fill = as.factor(Household)), shape = 21, color = "transparent", size = 2) +
scale_fill_manual(name = "Household", values = c("black", "orange"))
reprex package(v0.3.0)创建于2020-03-31
关于r - 在ggplot(R)中分离geom_point和geom_path绘图层,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60958138/