R 基于两种不同条件的ggplot映射填充
我想制作一个地图,其中状态根据一个标准着色,并根据不同的标准交叉阴影线(或以其他方式区分)。到目前为止,我得到的是R 基于两种不同条件的ggplot映射填充,r,ggplot2,mapping,ggmap,R,Ggplot2,Mapping,Ggmap,我想制作一个地图,其中状态根据一个标准着色,并根据不同的标准交叉阴影线(或以其他方式区分)。到目前为止,我得到的是 library(ggmap) library(mapdata) library(ggplot2) library(dplyr) region<-c("california","nevada","oregon","washington") var1<-c(0,1,0,1) var2<-c(3,4,4,3) my_data<-data.frame(region,
library(ggmap)
library(mapdata)
library(ggplot2)
library(dplyr)
region<-c("california","nevada","oregon","washington")
var1<-c(0,1,0,1)
var2<-c(3,4,4,3)
my_data<-data.frame(region, var1, var2)
all_states_map <- map_data("state")
Total <- inner_join(all_states_map,my_data, by = "region")
Total$var1<-as.factor(Total$var1)
my_map <- ggplot() + geom_polygon(data=Total, aes(x=long, y=lat, group = Total$group, fill=Total$var1),colour="white",
show.legend=TRUE) + scale_fill_manual(values=c("blue","gray"))
库(ggmap)
图书馆(地图数据)
图书馆(GG2)
图书馆(dplyr)
区域这与您希望看到的接近吗
ggplot() + geom_polygon(data=Total, aes(x=long, y=lat, group = group,
fill = paste(var1, var2, sep = ", ")), colour="white") +
scale_fill_manual(values=c("blue","gray", "green", "red")) +
labs(fill = "(var1, var2)")
另一个选项是将透明度设置为绘图的另一个维度,因此它会像,哪个可能更接近您想要的
ggplot() + geom_polygon(data=Total, aes(x=long, y=lat, group = group,
fill = var1, alpha = as.factor(var2)), colour="white") +
scale_fill_manual(values=c("blue","red")) +
scale_alpha_manual(values = c(0.5, 1)) +
labs(alpha = "var2", fill = "var1")
在ggplot中似乎没有简单的解决方案。区分的一种方法是在多段线周围使用不同的轮廓,如本例所示:
ggplot() +
geom_polygon(data=Total, aes(x=long, y=lat, group = Total$group,
fill=Total$var1,colour=as.factor(var2)),
,size=3,show.legend=TRUE) +
scale_fill_manual(values=c("blue","gray"))+
scale_color_manual(values=c("black",NA))
但正如您所见,由于多边形打印顺序,这导致加利福尼亚州和其他州之间的线宽不一致。我们可以通过增加var2等于3的状态的组数,以快速而肮脏的方式解决这个问题:
Total2<-Total%>%
mutate(group=ifelse(var2==3,group+100,group))
ggplot() +
geom_polygon(data=Total2, aes(x=long, y=lat, group = Total2$group,
fill=Total2$var1,colour=as.factor(Total2$var2)),
,size=3,show.legend=TRUE) +
scale_fill_manual(values=c("blue","gray"))+
scale_color_manual(values=c("black",NA))
Total2%
变异(组=ifelse(var2==3,组+100,组))
ggplot()+
几何多边形(数据=Total2,aes(x=long,y=lat,group=Total2$group,
填充=Total2$var1,颜色=as.factor(Total2$var2)),
,大小=3,显示图例=TRUE)+
刻度填充手动(值=c(“蓝色”、“灰色”))+
比例-颜色-手册(值=c(“黑色”,NA))
如果您真的想进行交叉阴影处理,您可能必须放弃ggplot以进行此操作:
这可能不太理想,但可能在某种程度上有所帮助
library(ggmap)
library(mapdata)
library(ggplot2)
library(dplyr)
library(sp)
region<-c("california","nevada","oregon","washington")
var1<-c(0,1,0,1)
var2<-c(3,4,4,3)
my_data<-data.frame(region, var1, var2)
all_states_map <- map_data("state")
Total <- inner_join(all_states_map,my_data, by = "region")
Total$var1<-as.factor(Total$var1)
randomPoints <- NULL
# For each region find a set of points inside each state
for(i in region){
sub <- subset(Total, region == i)
sub.sr = SpatialPolygons(list(Polygons(list(Polygon(sub[,1:2])), "a")))
smple <- as.data.frame(spsample(sub.sr, n = 100, "regular"))
temp <- data.frame(x = smple[,1], y = smple[,2], region = i, var1 = unique(sub$var1), var2 = unique(sub$var2))
randomPoints <- rbind(randomPoints, temp)
}
ggplot() +
geom_polygon(data=Total, aes(x=long, y=lat, group = group, fill=var1), color = "white") +
geom_point(data = randomPoints, aes(x = x, y = y, shape = as.factor(var2)), size = 1) +
scale_shape_manual(values = c(1, 2))
库(ggmap)
图书馆(地图数据)
图书馆(GG2)
图书馆(dplyr)
图书馆(sp)
雷吉奥尼可能最终需要做类似的事情,但这并不是我想要的。我用一个例子编辑了这个问题。我正在寻找一种方法,使这两种不同的东西看起来相互独立。您可能需要执行以下示例: