首先,这是mydata(121315 * 4)的一部分:
- LONGITUDE LATITUDE NUM_PICKUPS TOTAL_REVENUE
- 1 121.6177 38.9124 21 337.0
- 2 121.8069 39.0210 16 454.7
- 3 121.5723 38.9645 38 696.9
- 4 121.6423 38.9258 622 13609.7
- 5 121.5647 38.9129 116 2016.7
- 6 121.6429 38.8846 120 2417.3
- 7 121.5852 38.9279 117 1975.0
- 8 121.6616 38.9189 94 1712.4
- 9 121.5812 38.9828 50 981.6
- 10 121.6411 38.9255 225 4696.2
看到这一点,第一列和第二列是经度和纬度.
mydata [1,3] = 21意味着在地方(121.6177,38.9124),有21个拾取.
然后,我使用NUM_PICKUPS desc来获取mydata:
- LONGITUDE LATITUDE NUM_PICKUPS TOTAL_REVENUE
- 121.6019 39.0181 14243 514716
- 121.5382 38.9609 13244 443754.7
- 121.5381 38.9609 9645 325056
- 121.5382 38.9608 8846 294345.6
- 121.602 39.0181 6556 232254.5
- 121.5383 38.9609 6152 208967.6
- 121.5383 38.9608 6014 207677.8
- 121.5381 38.9608 5544 185398.3
- 121.6018 39.018 4546 167662.1
- 121.5382 38.9607 4260 143088.9
- 121.5827 38.8948 4133 72202.8
- 121.6303 38.9183 3837 67683.6
- 121.5966 38.9665 3747 56378.7
还有mydata的摘要:
- summary(mydata)
- LONGITUDE LATITUDE NUM_PICKUPS TOTAL_REVENUE
- Min. :121.1 Min. :38.76 Min. : 10.00 Min. : 92.9
- 1st Qu.:121.6 1st Qu.:38.91 1st Qu.: 15.00 1st Qu.: 289.7
- Median :121.6 Median :38.92 Median : 27.00 Median : 515.1
- Mean :121.6 Mean :38.93 Mean : 57.03 Mean : 1067.6
- 3rd Qu.:121.6 3rd Qu.:38.96 3rd Qu.: 59.00 3rd Qu.: 1089.5
- Max. :122.0 Max. :39.32 Max. :14243.00 Max. :514716.0
现在,我想绘制由NUM_PICKUPS着色的地图,查看我的代码.
- g1 <- ggplot() + geom_point(data = mydata,aes(x = LONGITUDE,y = LATITUDE,color=NUM_PICKUPS))
是的,代码和图表都是正确的,但看起来颜色,很难识别出具有高num_pickups的地方在哪里?哪里少?
我尝试使用scale_colour_gradient()修改我的代码:
- g1 + scale_colour_gradient(low = "red",high = "white")
第三次尝试:这次我添加了alpha = I(1/100)和break()的参数:
- g1 <- ggplot() + geom_point(data = mydata,color=NUM_PICKUPS),alpha=I(1/100))
- g1 + scale_colour_gradient(low = "red",high = "white",breaks=c(0,2000,4000))
但它仍然无助!
第四次尝试:
- ggplot(data = mydata,color = NUM_PICKUPS)) + geom_point() + scale_colour_gradient(limits = c(0,60))
第五次尝试:
根据3年前的帖子,ggplot2 Color Scale Over Affected by Outliers,我尝试再次修改我的代码:
- mydata$NUM_PICKUPS1 <- "> 2000"
- mydata$NUM_PICKUPS1[mydata$NUM_PICKUPS <= 2000] <- NA
- g2 <- ggplot() + geom_point(data = subset(mydata,NUM_PICKUPS <= 2000),size=2) + geom_point(data = subset(mydata,NUM_PICKUPS > 2000),fill=NUM_PICKUPS1))
异常值确实发生了变化,但色标仍难以分类!
解决方法
根据我的评论和你的回答,我认为问题是你有一些异常值迫使规模扩大以适应它们.
从你的摘要()中,75%的NUM_PICKUPS案例在10到59之间.剩下的25%然后增加到14243,大三个数量级!
总而言之,NUM_PICKUPS值的范围太大,无法显示低于1,000的任何变化.
您选择的解决方案取决于您的数据以及您要对其执行的操作.一种选择是仅显示最多75%的值,并将最高25%排除在异常值之外.你可以通过手动设置限制来改变数据,我认为:
- g1 + scale_colour_gradient(limits = c(0,60))
另一种选择是转换数据(可能使用log()或log10()).例如,mydata $LOG_PICKUPS< -log10(mydata $NUM_PICKUPS)可能有助于缩小范围以进行绘图.