ggplot2绘图需求:按Country分组排布、配色并标记高人口City
用ggplot2实现分组x轴散点图并添加特定标签
完整实现代码
library(ggplot2) # 原始数据框 d <- data.frame(City = LETTERS[1:9], popu = c(8975,3421,5433,1066,4529,9012,6732,5801,3396), Country = c("UA","UA","AS","UK","UA","AS","UK","Is","Is")) # 调整城市顺序:按国家分组排列 d$City <- factor(d$City, levels = d$City[order(d$Country)]) # 绘制散点图 ggplot(d, aes(x = City, y = popu, color = Country)) + geom_point(size = 3) + # 给人口超7500的城市加标签 geom_text(data = subset(d, popu > 7500), aes(label = City), nudge_y = 200, size = 4) + labs(title = "城市人口分布", x = "城市", y = "人口数量", color = "所属国家") + theme_minimal()
关键步骤说明
按国家分组排布x轴&配色:
- 将
City转为因子类型,通过order(d$Country)得到按国家排序后的行索引,以此设置因子的层级,这样x轴上同属一个国家的城市会自动相邻排列。 - 在绘图的
aes映射里指定color = Country,ggplot会自动为不同国家分配区分色,要是需要自定义颜色,用scale_color_manual(values = c("UA" = "#2E8B57", "AS" = "#FF6347", "UK" = "#4682B4", "Is" = "#FFD700"))这类代码即可。
- 将
给高人口城市加标签:
- 用
geom_text实现标签,通过subset(d, popu > 7500)筛选出人口超过7500的城市数据。 nudge_y = 200让标签在对应点的上方偏移一段距离,避免和点重叠,偏移量可以根据你的数据范围调整。
- 用
内容的提问来源于stack exchange,提问作者Ollie
相关产品推荐
相关产品推荐

