【发布时间】:2016-01-26 20:57:29
【问题描述】:
我正在尝试制作多张不同地图的 GIF,显示犯罪活动在一天中的不同时间如何在城市中移动。为了做到这一点,我制作了几个不同的stat_density2d() 图,每个时间间隔一个图。代码如下:
data <- read.csv(".../CrimeLocationAndTime.csv",
stringsAsFactors = FALSE)
# Get base map layer
denver = c(lon = -104.9903, lat = 39.7392)
denver_map = get_map(location = denver, zoom = 13, color = "bw")
# Get data slices
twoAMTimeSlice <- data[data$time == "2:00 AM",]
tenAMTimeSlice <- data[data$time == "10:00 AM",]
# Create density map
ggmap(denver_map, extent = "panel", maprange=FALSE) +
stat_density2d(data = twoAMTimeSlice,
aes(x = longitude, y = latitude, fill = ..level.., alpha = ..level..),
size = 0.1, bins = 16, geom = 'polygon') +
scale_fill_gradient(low = "green", high = "red", limits=c(0,2000)) + # Color scale
scale_alpha(range = c(0.1, 0.4), guide = "legend") + # Here is the alpha scale
geom_text(label = twoAMTimeSlice$time[1], x = -104.95, y=39.775) +
theme(plot.title = element_text(size = rel(1.5), vjust = 1),
axis.title = element_blank(),
text = element_text(size = 12)) +
labs(title = "Criminal Occurrences by Time of Day")
所以这是我的问题:我需要我的 alpha 比例在我的所有地图中保持一致。目前,如果我在不同时间制作不同犯罪数量的图表,则 alpha 比例不会保持一致。这在这些图片中很明显:
观察这张图片中的绿色如何非常透明,而红色则更不透明。这是我想应用于所有地图的正确比例。
在这里,观察绿色是如何非常不透明的。您还可以看到上一张图片的图例变化。这是不好的。我希望这张图片中的绿色和上一张一样不透明。
我使用scale_fill_gradient 的limits 参数实现了颜色 的比例一致性。然而,这个论点在应用于scale_alpha 时会给出不可靠的结果。
【问题讨论】:
-
“古怪”是什么意思?具体是什么地方出了问题?切换到
scale_alpha_continuous(limits=c(...,...))而不是scale_alpha是否可以解决问题? -
在通过我的代码回答您的问题时,我找到了解决方案。最初,当我使用
limits=c(0.05, 0.4)时,我的“古怪”结果来自(我认为limits的域是alpha 级别,因此是[0,1])。我试过limits=c(0, 2000),效果很好。感谢您提出正确的问题!