我试图从不同的模拟中绘制降水趋势。我有一个这样的数据框,叫做df:
Type season X Y Val
1 25 Ana Annual 76000 2393000 9.724501
2 25 Ana Annual 76000 2401000 30.416625
3 25 Ana Annual 84000 2361000 9.724501
4 25 Ana Annual 84000 2401000 8.234632
5 25 Ana Annual 84000 2409000 30.416625
6 25 Ana Annual 84000 2417000 30.416625
...
类型可以有四个不同的值:25 Ana,SST80 T25,25 CD,Hom
季节可以有五个不同的值:年度,春季,夏季,秋季,冬季X和Y是覆盖法国的坐标
Val是趋势
我不想绘制连续值,因此我创建了具有离散比例的类。我为季节=年度和季节=(春季或夏季或秋季或冬季)创建两个不同的量表,因为趋势不具有相同的数量级。
coup_a <- c(-127.0405, -110.0000, -100.0000, -90.0000, -80.0000, -70.0000, -60.0000, -50.0000, -40.0000, -30.0000, -20.0000, -10.0000, 0.0000, 10.0000, 20.0000, 30.0000, 40.0000, 50.0000, 60.0000, 70.0000, 80.0000, 90.0000, 100.0000, 110.0000, 127.0405)
lab_a <- c("-110", "-100", "-90", "-80", "-70", "-60", "-50", "-40", "-30", "-20", "-10", "0", "10", "20", "30", "40", "50", "60", "70", "80", "90", "100", "110", " ")
coup_s <- c(-72.60114, -40.0000, -35.0000, -30.0000, -25.0000, -20.0000, -15.0000, -10.0000, -5.0000, 0.0000, 5.0000, 10.0000, 15.0000, 20.0000, 25.0000, 30.0000, 35.0000, 40.0000, 72.60114)
lab_s <- c("-40", "-35", "-30", "-25", "-20", "-15", "-10", "-5", "0", "5", "10", "15", "20", "25", "30", "35", "40", " ")
pl_a <- df[df$season=="Annual",]
pl_s <- df[df$season=="Spring" | df$season=="Summer" | df$season=="Autumn" | df$season=="Winter",]
现在由于我的两个尺度,我创建了离散类:
pl_a$Val2 <- cut(pl_a$Val, breaks=coup_a, labels =lab_a)
pl_s$Val2 <- cut(pl_s$Val, breaks=coup_s, labels =lab_s)
将colorbrewer颜色插值为具有与类相同数量的颜色
getPalette <- colorRampPalette(brewer.pal(11, "RdYlBu"))
colors_a <- getPalette(length(lab_a))
colors_s <- getPalette(length(lab_s))
情节:
p <- ggplot()
p <- (p
+ theme_bw()
+ facet_grid(saison ~ Type))
p <- (p + scale_y_continuous(limits=c(1580000,2730000),
breaks=seq(1600000,2700000, 200000),
labels= seq(1600,2700,200), expand=c(0,0))
+ scale_x_continuous(limits=c(0,1250000),
breaks= seq(0,1250000, 400000),
labels= seq(0,1250, 400), expand=c(0,0))
+ theme(panel.grid.major = element_blank(), axis.ticks=element_blank(), axis.title=element_blank(), axis.text=element_blank(), legend.key.size=unit(0.5, "cm"), legend.position="bottom")
+ coord_fixed(ratio=1, xlim=c(0, 1100000), ylim=c(1600000, 2730000)))
p1 <- (p
+ scale_fill_manual(name = "Trend", values = setNames(colors_a, lab_a), limits=lab_a, breaks=rev(lab_a), labels=rev(tex_a), na.value="black", guide=guide_legend(label.hjust=-2, label.position="bottom"))
+ geom_tile(data = pl_a[pl_a$Type=="25 Ana" | pl_a$Type=="SST80 T25" | pl_a$Type=="25 CD" | pl_a$Type=="Safran"),], aes(x=X, y=Y, fill= Val2))
+ geom_point(data = pl_a[pl_a$Type=="Hom",], aes(x=X, y=Y, fill= Val2), shape=21, size=2))
p2 <- (p
+ scale_fill_manual(name = "Trend", values = setNames(colors_s, lab_s), limits=lab_s, breaks=rev(lab_s), labels=rev(tex_s), na.value="black", guide=guide_legend(label.hjust=-2, label.position="bottom"))
+ geom_tile(data = pl_s[(pl_s$Type=="25 Ana" | pl_s$Type=="SST80 T25" | pl_s$Type=="25 CD" | pl_s$Type=="Safran"),], aes(x=X, y=Y, fill= Val2))
+ geom_point(data = pl_s[pl_s$Type=="Hom",], aes(x=X, y=Y, fill= Val2), shape=21, size=2))
grid.arrange(p1,p2, heights=c(1, 2.64))
tex_s和tex_a只是两个向量,如lab_s和lab_a(相同的长度),但每个类只有一个值,以便具有可读的比例:
tex_s <- c("-40", " ", "-30", " ", "-20", " ", "-10", " ", "0", " ", "10", " ", "20", " ", "30", " ", "40", " ")
它给了我:
正如你所看到的,我有一个特例,因为我在法国只有少数点为Type = Hom,而所有法国都有其他类型。这就是为什么我需要使用geom_tile和三种类型,geom_point使用type = Hom。
我有三个问题:
1)如何删除图例中的黑色圆圈而不在地图中删除它们?
2)我使用grid.arrange和高度(1,2.64)但实际上我只是测试了数字与年度地图和其他地图的大小大致相同,但我并不是真的了解它代表什么。如果有人可以告诉我?
3)为了简化比例,我使用&#34; lab&#34;但是为了得到正确的比例,值应该在两个类之间移动,如下所示(值与此不匹配):
当我的图例位于地图的右侧时(不使用legend.position =&#34; bottom&#34;)我可以使用legend.vjust = +/- 1.5来移动值,并且效果很好。但是当图例位于地图下方时,我会尝试使用legend.hjust,但它不起作用。正如你所看到的,0从两个班级转移而其他数字仍在同一个位置......我该怎么办?
感谢您的帮助