R - ggplot - 如何根据值自动设置点颜色?

时间:2018-02-05 00:18:18

标签: r ggplot2 gradient ggmap

我的问题类似于this question

但我无法将其转移到我自己的数据中。

我有一个这样的数据帧(超过1400行):

     Code                  Stationsname Startdatum      LAT      LON Höhe  Area     Mean
1 AT0ENK1       Enzenkirchen im Sauwald 03.06.1998 48.39167 13.67111  525 rural 55.76619
2 AT0ILL1                       Illmitz 01.05.1978 47.77000 16.76640  117 rural 58.98511
3 AT0PIL1          Pillersdorf bei Retz 01.02.1992 48.72111 15.94223  315 rural 59.47489
4 AT0SON1                     Sonnblick 01.09.1986 47.05444 12.95834 3106 rural 97.23856
5 AT0VOR1 Vorhegg bei K”tschach-Mauthen 04.12.1990 46.67972 12.97195 1020 rural 70.65373
6 AT0ZIL1             Ried im Zillertal 08.08.2008 47.30667 11.86389  555 rural 36.76401

现在我想用ggplot创建一个地图,并根据Mean列中的值显示不同颜色的点,它从18到98.

如果列Höhe中的值超过700,我还想将符号从点更改为三角形。

直到现在我这样做了:

library(ggmap)
library(ggplot2)

Europe <- get_map(location = "Europe", zoom = 3)

p = ggmap(Europe)

p = p + geom_point(data = Cluster, aes(LON, LAT, color = Mean), 
                   size = 1.5, pch = ifelse(Höhe < 700,'19','17')) +
    scale_x_continuous(limits = c(-25.0, 40.00), expand = c(0, 0)) +
    scale_y_continuous(limits = c(34.00, 71.0), expand = c(0, 0)) +
    scale_colour_gradient ---??

但我不知道如何继续分配颜色。

1 个答案:

答案 0 :(得分:3)

我使用他的数据与OP进行了讨论。他的一个问题是让scale_colour_gradient2()工作。解决方案是设置一个中点值。默认情况下,它在函数中设置为0。在他的情况下,他有一个连续变量,其中位数约为50。

library(ggmap)
library(ggplot2)
library(RColorBrewer)

Europe2 <- get_map(maptype = "toner-2011", location = "Europe", zoom = 4) 

ggmap(Europe2) +
geom_point(data = Cluster, aes(x = LON, y = LAT, color = Mean, shape = Höhe > 700), size = 1.5, alpha = 0.4) + 
scale_shape_manual(name = "Altitude", values = c(19, 17)) + 
scale_colour_gradient2(low = "#3288bd", mid = "#fee08b", high = "#d53e4f",
                       midpoint = median(Cluster$Mean, rm.na = TRUE))

enter image description here

似乎地图中的颜色不是很好,因为给定值似乎倾向于保持接近中值。我认为OP需要使用cut()创建一个新的分组变量,并为这些组指定颜色或使用另一种scale_color类型的函数。我用RColorBrewer包提出了以下内容。我认为OP需要考虑他是如何使用颜色来刷新图形的。

ggmap(Europe2) +
geom_point(data = Cluster, aes(x = LON, y = LAT, color = Mean, shape = Höhe > 700), size = 1.5, alpha = 0.4) + 
scale_shape_manual(name = "Altitude", values = c(19, 17)) + 
scale_colour_distiller(palette = "Set1")  

enter image description here