R 修改ggplot2气泡图的图例比例

R 修改ggplot2气泡图的图例比例,r,plot,ggplot2,R,Plot,Ggplot2,我正在用R绘制一张地图,用人口决定的点大小绘制几个城市;它是叠加在Tirgris/线条形状文件上的气泡区。一切都很好,除了传说没有一个很好的五月数据规模。我有几个社区约800-1100人,一个社区约2000人,两个社区约25000人以上。ggplot创造的传说中有10000、20000和30000人口的泡沫。我希望是2000、20000和30000左右。我做了很多研究,但没有发现任何有希望的东西 library(ggplot) library(rgdal) library(tigris) ci

我正在用R绘制一张地图,用人口决定的点大小绘制几个城市;它是叠加在Tirgris/线条形状文件上的气泡区。一切都很好,除了传说没有一个很好的五月数据规模。我有几个社区约800-1100人,一个社区约2000人,两个社区约25000人以上。ggplot创造的传说中有10000、20000和30000人口的泡沫。我希望是2000、20000和30000左右。我做了很多研究,但没有发现任何有希望的东西

library(ggplot)
library(rgdal)
library(tigris)

cities.data = read.csv("cities.csv", header = TRUE)
latah.mp <- county_subdivisions(state = '16', county = '057', cb = TRUE)                                                # reads TIGER/Line data from US Census for Latah County
whitman.mp <- county_subdivisions(state = '53', county = '075', cb = TRUE)                                              # reads TIGER/Line data from US Census for Whitman County
region.mp = rbind_tigris(latah.mp, whitman.mp)                                                                  # binds county shapefiles into one image
region.map <- fortify(region.mp)

ggplot() +
 geom_map(data = region.map, map = region.map, aes(x = long, y = lat, map_id = id), fill = "#CCE5CC", color = "#BBD4BB") +
 geom_point(data = cities.data, aes(x = long, y = lat, size = Population), alpha = 0.5, color = "black") +
 scale_size_continuous(range = c(1,10)) +
 annotate("text", x = -117.163454, y = 46.6827, label = "Pullman", size = 2.5) +
 annotate("text", x = -116.998909, y = 46.6827, label = "Moscow", size = 2.5) +
 annotate("text", x = -117.311862, y = 46.8897, label = "Colfax", size = 2.5) +
 annotate("text", x = -116.772232, y = 46.7075, label = "Troy", size = 2.5) +
 annotate("text", x = -117.07534, y = 46.8803, label = "Palouse", size = 2.5) +
 annotate("text", x = -116.92887, y = 46.5215, label = "Genessee", size = 2.5) +
 annotate("text", x = -117.073984, y = 47.1953, label = "Teko", size = 2.5) +
 annotate("text", x = -116.897068, y = 46.8930, label = "Potlatch", size = 2.5) +
 theme_classic() +
 coord_quickmap() +
 theme(axis.line = element_blank(), axis.text.x = element_blank(), axis.text.y = element_blank(), axis.ticks = element_blank(), axis.title.x=element_blank(), axis.title.y=element_blank())

我在使用类似数据集时发现了三种可能的解决方案。根据您使用的特定数据集和条件,您选择的内容可能会有所不同:

(1) 使用
scale\u fill\u gradient
使用不同的比例(对数等)。(可能想玩不同的音阶)

(3) 通过手动操作输入到地图中的数据来创建您自己的离散比例(在本例中,我使用了dataset
data
,您映射的值为
value
),这是最繁琐的解决方案,但如果您的数据分布非常明确,则可能也是最好的解决方案

# initial data manipulation before creating map
data$value[data$value < 1000] <- 0
data$value[data$value > 1000 & data$value < 2000] <- 1
data$value[data$value > 2000] <- 2
data$value <- as.factor(data$value)
...
p <- p + scale_fill_manual(values=c("white", "#034e7b","#3690c0"),
                           breaks=c('0','1','2'), 
                           labels=c( '< 1000', '1000-2000', '>2000'))
#创建地图前的初始数据操作

数据$value[data$value<1000]1000和data$value<2000]2000]可能
scale\u size\u continuous(范围=c(1,10),中断=c(2000,20000,30000))
p <- p + scale_fill_gradient( trans = 'log')
p <- p + scale_fill_gradientn(colours=topo.colors(7),
                              breaks=c(0,1000,2000),
                              limits=c(0,5000))
# initial data manipulation before creating map
data$value[data$value < 1000] <- 0
data$value[data$value > 1000 & data$value < 2000] <- 1
data$value[data$value > 2000] <- 2
data$value <- as.factor(data$value)
...
p <- p + scale_fill_manual(values=c("white", "#034e7b","#3690c0"),
                           breaks=c('0','1','2'), 
                           labels=c( '< 1000', '1000-2000', '>2000'))