我有一个R脚本,突出显示美国地图上的某些州。我想强调两个功能,我遇到了第二个功能的问题。我附上了当前地图的样子。
非常感谢任何帮助。谢谢。
#cleanup
statedata <- read.csv(file = "statebondratingsmelted.csv", header = TRUE)
head(statedata)
summary(statedata)
statedata <- subset(statedata, Year==2017)
statedata$Rank = as.numeric(levels(statedata$Rank))[statedata$Rank]
statedata$region <- tolower(statedata$region)
snames <- data.frame(region=tolower(state.name), long=state.center$x, lat=state.center$y)
snames <- merge(snames, statedata, by="region")
dtrend <- filter(mergestate, downwardtrendflag==1)
aaflag <- filter(mergestate, aa_flag==1)
us <- map_data("state")
mergestate <- merge(statedata, us, by="region")
library(ggplot2)
library(ggmap)
# Map Code
ggplot(color="black") +
geom_map(data=us, map=us, aes(long, lat, map_id=region), fill="white", color = "#000000")+
geom_map(data=dtrend, map=us, aes(fill="red", map_id=region), color ="#000000")+
geom_map(data=aaflag, map=us, aes(fill="red", map_id=region), color ="#000000")+
geom_text(data=snames, aes(long, lat, label=Rating), size=3.0, color = "black")+
coord_map()
这是当前的输出:
statedata <- structure(list(region = c("alabama", "alaska", "arizona", "arkansas",
"california", "colorado", "connecticut", "delaware", "florida",
"georgia", "hawaii", "idaho", "illinois", "indiana", "iowa",
"kansas", "kentucky", "louisiana", "maine", "maryland", "massachusetts",
"michigan", "minnesota", "mississippi", "missouri", "montana",
"nebraska", "nevada", "new hampshire", "new jersey", "new mexico",
"new york", "north carolina", "north dakota", "ohio", "oklahoma",
"oregon", "pennsylvania", "rhode island", "south carolina", "south dakota",
"tennessee", "texas", "utah", "vermont", "virginia", "washington",
"west virginia", "wisconsin", "wyoming"), Year = c(2017L, 2017L,
2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L,
2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L,
2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L,
2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L,
2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L,
2017L, 2017L, 2017L), Rating = structure(c(4L, 4L, 4L, 4L, 5L,
4L, 5L, 7L, 7L, 7L, 6L, 6L, 9L, 7L, 7L, 5L, 3L, 4L, 4L, 7L, 6L,
5L, 6L, 4L, 7L, 4L, 7L, 4L, 4L, 2L, 6L, 6L, 7L, 6L, 6L, 6L, 6L,
5L, 4L, 6L, 7L, 7L, 7L, 7L, 6L, 7L, 6L, 5L, 4L, 6L), .Label = c("A",
"A-", "A+", "AA", "AA-", "AA+", "AAA", "BBB", "BBB-", "N/A"), class = "factor"),
Rank = c(3, 3, 3, 3, 4, 3, 4, 1, 1, 1, 2, 2, 10, 1, 1, 4,
5, 3, 3, 1, 2, 4, 2, 3, 1, 3, 1, 3, 3, 7, 2, 2, 1, 2, 2,
2, 2, 4, 3, 2, 1, 1, 1, 1, 2, 1, 2, 4, 3, 2), downwardtrendflag = structure(c(1L,
2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L,
1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 2L, 1L, 2L), .Label = c("0", "1", "FALSE"), class = "factor"),
aa_flag = c(0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L,
1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L)), .Names = c("region", "Year",
"Rating", "Rank", "downwardtrendflag", "aa_flag"), row.names = c(NA,
50L), class = "data.frame")
答案 0 :(得分:0)
问题的关键部分是询问如何绘制刻度。如果你使用符号的unicode,符号的行为就像ggplot中的文本一样,并且先前在这里回答:Adding arrow symbols in ggplot text in R
你的问题有点复杂,因为你想用不同的颜色绘制箭头。因此,此脚本会为箭头的绘图添加另一个图层。
您的数据的列downwardtrendflag
为1或0.我使用它来使用unicode“\ u2193”为数据创建标签。我改变了数据子集的方式,因为它有点令人困惑。
# Assign arrow to flagged states
library(plyr)
library(ggplot2)
library(ggmap)
us <- map_data("state")
# Format the data
statedata <- subset(statedata, Year==2017)
statedata$Rank = as.numeric(levels(statedata$Rank))[statedata$Rank]
statedata$region <- tolower(statedata$region)
snames <- data.frame(region=tolower(state.name), long=state.center$x, lat=state.center$y)
snames <- merge(snames, statedata, by="region")
# Find states which have either a downward trend or aa flag
highlight <- filter(mergestate, downwardtrendflag==1 | aa_flag==1)
# Create label for snames
snames$downwardtrendflag <- mapvalues(snames$downwardtrendflag, from = c(0,1), to = c("", '\u2193'))
要绘制箭头,我必须制作另一个geom图层,因为您希望颜色为红色。我使用参数nudge_x
来抵消箭头。
# Map Code
ggplot(color="black") +
geom_map(data=us, map=us, aes(long, lat, map_id=region), fill="white", color = "#000000") +
geom_map(data=highlight, map=us, aes(map_id=region), fill="#F8766D", color ="#000000") +
geom_text(data=snames, aes(long, lat, label=Rating), size=3.0, color = "black") +
geom_text(data=snames, aes(long, lat, label=downwardtrendflag), size=3.0, color = "red", nudge_x = 2)+
coord_map() +
theme_nothing()
从视觉上看,这张地图并不太棒,因为这两组标签存在冲突。你最好将评级作为一个等值线图绘制,然后将箭头覆盖在有问题的状态上,如下所示:
# First we must order the levels in the factor
snames$Rating <- factor(snames$Rating, levels = rev(c("BBB-", "A-","A+","AA-","AA","AA+" ,"AAA")))
# Map Code
ggplot(color="black") +
geom_map(data=snames, map=us, aes(map_id=region, fill = Rating), color = "#000000") +
geom_map(data=highlight, map=us, aes(map_id=region), fill="#F8766D", color ="#000000") +
geom_text(data=snames, aes(long, lat, label=downwardtrendlabel), size=3.0, color = "red")+
scale_fill_brewer(palette = "Reds") +
coord_map(ylim = c(25, 50)) +
labs(title = " US States Debt Rating", subtitle = " Arrows highlights states which have a dowward trend", caption = "Source: Add source of data") +
theme_nothing(legend = TRUE)