ggplot2 图例仅显示具有 legend.key 属性的部分边框
ggplot2 legend only showing partial border with legend.key attribute
我正在尝试使用 ggplot2 创建图表,但我不明白为什么 legend.key 属性只在图例的一部分周围放置了边框。请参阅下面的最小工作示例。关于修复的任何建议?此处提供的示例似乎工作正常 (https://github.com/hadley/ggplot2/wiki/Legend-Attributes#legendkey-rect)。
set.seed(12)
xy <- data.frame(x=c(rep(LETTERS[1], times=25), rep(LETTERS[2], times=25)),
y=rep(LETTERS[1:25], times=2),
type = sample(c(-2,-1,0,1,2), 50, replace=T))
xy$type <- factor(xy$type, c(-2, -1, 0, 1, 2))
ggplot(xy, aes(x=x, y=y, fill=type, height=0.95)) +
geom_tile() +
scale_fill_manual(values = c("#323D8D", "#FFFFFF", "#FFFFFF", "#FFFFFF", "#FF0000"),
na.value="#BEBEBE") +
scale_x_discrete(expand=c(0,0.51)) +
theme(legend.key = element_rect(colour="black")) +
theme(axis.ticks.x = element_blank()) +
theme(axis.ticks.y = element_blank()) +
theme(panel.grid.major.y=element_blank()) +
theme(panel.grid.major.x=element_blank()) +
theme(panel.grid.minor.y=element_blank()) +
theme(panel.grid.minor.x=element_blank()) +
theme(panel.background = element_rect(fill="#000000"))
我不确定为什么,但它似乎与在 Rstudio 中将图像渲染到屏幕有关(我假设您在 Rstudio 中工作)。
您所要做的就是使用 ggsave("plot.png")
并按预期绘制线条。此外,如果您保存为 pdf,您的图例将具有所需的行。
而且,正如@jeremycg 所说,如果您希望线条显示在屏幕上,您应该使用 legend.key = element_rect(colour="black", size=1))
将它们加粗一点(在我的屏幕上大小=1 就足够了)。
最后:不需要每次都输入主题指令,可以用“,”分隔,如:
theme(legend.key = element_rect(colour="black"),
axis.ticks.x = element_blank(),
axis.ticks.y = element_blank())
我没有测试过,但我认为这样会更快。
我正在尝试使用 ggplot2 创建图表,但我不明白为什么 legend.key 属性只在图例的一部分周围放置了边框。请参阅下面的最小工作示例。关于修复的任何建议?此处提供的示例似乎工作正常 (https://github.com/hadley/ggplot2/wiki/Legend-Attributes#legendkey-rect)。
set.seed(12)
xy <- data.frame(x=c(rep(LETTERS[1], times=25), rep(LETTERS[2], times=25)),
y=rep(LETTERS[1:25], times=2),
type = sample(c(-2,-1,0,1,2), 50, replace=T))
xy$type <- factor(xy$type, c(-2, -1, 0, 1, 2))
ggplot(xy, aes(x=x, y=y, fill=type, height=0.95)) +
geom_tile() +
scale_fill_manual(values = c("#323D8D", "#FFFFFF", "#FFFFFF", "#FFFFFF", "#FF0000"),
na.value="#BEBEBE") +
scale_x_discrete(expand=c(0,0.51)) +
theme(legend.key = element_rect(colour="black")) +
theme(axis.ticks.x = element_blank()) +
theme(axis.ticks.y = element_blank()) +
theme(panel.grid.major.y=element_blank()) +
theme(panel.grid.major.x=element_blank()) +
theme(panel.grid.minor.y=element_blank()) +
theme(panel.grid.minor.x=element_blank()) +
theme(panel.background = element_rect(fill="#000000"))
我不确定为什么,但它似乎与在 Rstudio 中将图像渲染到屏幕有关(我假设您在 Rstudio 中工作)。
您所要做的就是使用 ggsave("plot.png")
并按预期绘制线条。此外,如果您保存为 pdf,您的图例将具有所需的行。
而且,正如@jeremycg 所说,如果您希望线条显示在屏幕上,您应该使用 legend.key = element_rect(colour="black", size=1))
将它们加粗一点(在我的屏幕上大小=1 就足够了)。
最后:不需要每次都输入主题指令,可以用“,”分隔,如:
theme(legend.key = element_rect(colour="black"),
axis.ticks.x = element_blank(),
axis.ticks.y = element_blank())
我没有测试过,但我认为这样会更快。