Я использую это для карты, где я хочу, чтобы растровый слой, а также точечные данные отображались в легенде, которая расположена на реальном графике в пустом пространстве карты.Однако, когда я делаю это, на некоторых сторонах легенды появляются странные линии с двумя границами, вероятно, потому, что размеры двух легенд не совпадают.Я не уверен, есть ли способ исправить два размера легенды, чтобы соответствовать, или иначе найти размер легенды и добавить мой собственный прямоугольник вокруг легенды.Вот упрощенная версия, которая создает ту же проблему.Я показал код, включая границу, а также тот, где нет границы, и вы можете видеть, что размеры легенды немного отличаются.
library(RColorBrewer)
library(ggplot2)
library(raster)
r = raster()
r[] = 1:ncell(r)
df = as.data.frame(r, xy=TRUE)
x <- sample(-75:75, 100)
y <- sample(-75:75, 100)
xy <- data.frame(cbind(x,y))
plot <- ggplot(df) +
geom_raster(aes(x, y, fill=layer)) +
geom_point(data=xy, aes(x=x, y=y, colour="Purple Points"))+
scale_colour_manual(values = c("Purple Points"="purple"))+
scale_fill_distiller(palette='RdYlGn')+
theme(panel.background = element_rect(fill="white"),
panel.border = element_rect(color="black", fill=NA, size=1.2),
axis.text.x = element_blank(),
axis.title.x = element_blank(),
axis.ticks.x = element_blank(),
axis.text.y = element_blank(),
axis.title.y = element_blank(),
axis.ticks.y = element_blank(),
panel.grid = element_blank(),
legend.box.background = element_rect(color='black', fill="white", size=1.5),
legend.position = c(0.1,0.1),
legend.justification = c(0,0),
legend.key.height = unit(.25,"cm"),
legend.key.width = unit(.6, "cm"),
legend.title=element_text(size=8, vjust=2.5),
legend.key = element_rect(colour = NA, fill = NA),
legend.text = element_text(size=6),
legend.spacing.y = unit(0, "cm"))
plot
Производит:
plot <- ggplot(df) +
geom_raster(aes(x, y, fill=layer)) +
geom_point(data=xy, aes(x=x, y=y, colour="Purple Points"))+
scale_colour_manual(values = c("Purple Points"="purple"))+
scale_fill_distiller(palette='RdYlGn')+
theme(panel.background = element_rect(fill="white"),
panel.border = element_rect(color="black", fill=NA, size=1.2),
axis.text.x = element_blank(),
axis.title.x = element_blank(),
axis.ticks.x = element_blank(),
axis.text.y = element_blank(),
axis.title.y = element_blank(),
axis.ticks.y = element_blank(),
panel.grid = element_blank(),
legend.position = c(0.1,0.1),
legend.justification = c(0,0),
legend.key.height = unit(.25,"cm"),
legend.key.width = unit(.6, "cm"),
legend.title=element_text(size=8, vjust=2.5),
legend.key = element_rect(colour = NA, fill = NA),
legend.text = element_text(size=6),
legend.spacing.y = unit(0, "cm"))
Этот код исключает вызов legend.background () для темы и создает этот график, на котором вы можете видетьразные размеры двух легенд.