gpt4 book ai didi

r - 向图例元素组添加注释和段

转载 作者:行者123 更新时间:2023-12-04 10:06:47 30 4
gpt4 key购买 nike

我的 ggplot 有以下图例:
enter image description here

我想对我的个人图例变量进行分组,并添加组名称和“括号”,如下图所示:
enter image description here

我的数据有 2 列:
1 - 美国各州
2 - 事件级别,范围为 10(高)- 1(低)

我也在使用数据 - us<-map_data("state"),它包含在 ggplot/map 包中。
我的代码:

ggplot()+ geom_map(data=us, map=us,aes(x=long, y=lat, map_id=region),
fill="#ffffff", color="#ffffff", size=0.15) +
geom_map(data=dfm4,map=us,aes(fill=ACTIVITY.LEVEL,map_id=STATENAME)
,color="#ffffff", size=0.15)+

scale_fill_manual("Activity",
values=c("10"="red4","9"="red2","8"="darkorange3",
"7"="orange3","6"="orange1",
"5"="gold2","4"="yellow","3"="olivedrab3","2"="olivedrab2",
"1"="olivedrab1"),
breaks=c("10","9","8","7","6","5","4","3","2","1"),
labels=c("High - 3","High - 2","High - 1","Moderate - 2","Moderate -
1","Minimal - 2","Minimal - 1","Low - 3","Low - 2","Low - 1"))+
labs(x="Longitude",y="Latitude")

可重现的数据:
state<-c("alabama", 
"alaska", "arizona", "arkansas", "california", "colorado", "connecticut",
"delaware", "district of columbia", "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",
"new york city", "north carolina", "north dakota", "ohio", "oklahoma",
"oregon", "pennsylvania", "puerto rico", "rhode island", "south carolina",
"south dakota", "tennessee", "texas", "utah", "vermont", "virgin islands",
"virginia", "washington", "west virginia", "wisconsin", "wyoming")

activity<-c("10", "10", "10", "10",
"8", "8", "6", "10", "10", "1", "10", "6", "4", "10", "10", "7",
"10", "10", "10", "2", "10", "10", "9", "9", "10", "10", "2",
"10", "8", "10", "10", "10", "10", "10", "3", "8", "10", "8",
"10", "10", "10", "10", "10", "10", "7", "10", "10", "1", "10",
"7", "10", "10", "9", "5")

reproducible_data<-data.frame(state,activity)

最佳答案

因为@erocoar 提供了 grob 挖掘替代方案,所以我不得不采用 create-a-plot-which-looks-like-a-legend 方式。

我在比 OP 更小的数据集和更简单的图上制定了我的解决方案,但核心问题是相同的:要对十个图例元素进行分组和注释。我相信这种方法的主要思想可以很容易地适应其他 geomaes

library(data.table)
library(ggplot2)
library(cowplot)

# 'original' data
dt <- data.table(x = sample(1:10), y = sample(1:10), z = sample(factor(1:10)))

# color vector
cols <- c("1" = "olivedrab1", "2" = "olivedrab2", # min
"3" = "olivedrab3", "4" = "yellow", "5" = "gold2", # low
"6" = "orange1", "7" = "orange3", # moderate
"8" = "darkorange3", "9" = "red2", "10" = "red4") # high

# original plot, without legend
p1 <- ggplot(data = dt, aes(x = x, y = y, color = z)) +
geom_point(size = 5) +
scale_color_manual(values = cols, guide = FALSE)

# create data to plot the legend
# x and y to create a vertical row of points
# all levels of the variable to be represented in the legend (here z)
d <- data.table(x = 1, y = 1:10, z = factor(1:10))

# cut z into groups which should be displayed as text in legend
d[ , grp := cut(as.numeric(z), breaks = c(0, 2, 5, 7, 11),
labels = c("min", "low", "mod", "high"))]

# calculate the start, end and mid points of each group
# used for vertical segments
d2 <- d[ , .(x = 1, y = min(y), yend = max(y), ymid = mean(y)), by = grp]

# end points of segments in long format, used for horizontal 'ticks' on the segments
d3 <- data.table(x = 1, y = unlist(d2[ , .(y, yend)]))

# offset (trial and error)
v <- 0.3

# plot the 'legend'
p2 <- ggplot(mapping = aes(x = x, y = y)) +
geom_point(data = d, aes(color = z), size = 5) +
geom_segment(data = d2,
aes(x = x + v, xend = x + v, yend = yend)) +
geom_segment(data = d3,
aes(x = x + v, xend = x + (v - 0.1), yend = y)) +
geom_text(data = d2, aes(x = x + v + 0.4, y = ymid, label = grp)) +
scale_color_manual(values = cols, guide = FALSE) +
scale_x_continuous(limits = c(0, 2)) +
theme_void()

# combine original plot and custom legend
plot_grid(p1,
plot_grid(NULL, p2, NULL, nrow = 3, rel_heights = c(1, 1.5, 1)),
rel_widths = c(3, 1))

enter image description here

ggplot 中,图例是 aes 中映射的直接结果。一些小的修改可以在 themeguide_legend(override.aes 中完成。为了进一步定制,您必须或多或少地诉诸于手动“绘图”,或者通过洞穴探险(例如 Custom legend with imported images ),或者通过创建一个作为图例添加到原始情节的情节(例如 Create a unique legend based on a contingency (2x2) table in geom_map or ggplot2? )。

自定义图例的另一个示例,再次 grob hacking 与“绘制”图例: Overlay base R graphics on top of ggplot2

关于r - 向图例元素组添加注释和段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49064845/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com