R:有没有办法在 ggplot 图例中添加未使用的数据级别?
R: Is there a way to add unused data levels in a ggplot legend?
我正在尝试使用 ggplot 在我用颜色编码的从 0 到 4 的因子类型向量上呈现地图。向量在我命名为 spat.dataframe
的数据框中,向量是 qt
.
# plot
ggplot(spat.dataframe, aes(long,lat,group=group)) + # the data
geom_polygon(aes(fill=as.factor(qt))) + # make polygons
scale_fill_manual(values = c("0"="#F0F0F0","1"="green","2"="red","3"="blue","4"="purple"),
labels = c(paste0("white (",length(spat.dataframe[spat.dataframe$qt==0,]),")"),
paste0("green (",length(spat.dataframe[spat.dataframe$qt==1,]),")"),
paste0("red (",length(spat.dataframe[spat.dataframe$qt==2,]),")"),
paste0("blue (",length(spat.dataframe[spat.dataframe$qt==3,]),")"),
paste0("pink (",length(spat.dataframe[spat.dataframe$qt==4,]),")")),
drop=F,
name=NULL) +
theme(line = element_blank(), # remove the background, tickmarks, etc
axis.text = element_blank(),
axis.title = element_blank(),
panel.background = element_blank()) +
ggtitle(title) +
geom_path( colour = "#6b6b6b", size = .5 ) +
coord_equal()
我的问题出在 图例 部分,因为我想做的是显示所有图例选项,即使矢量中没有列出任何图例选项。所以蓝色和紫色的值也是如此。尝试起来似乎有点困难,但我希望它出现在我的图形上,这样我还可以显示可能值的数量以及与该值关联的多边形数量。因此,对于我的向量 qt
中的值 3 和 4,两者均为零(即 blue (0)
和 purple (0)
)。
如有任何建议,我们将不胜感激。谢谢。
这是一个使用 mtcars
的工作示例,摘自 ggplot2
文档 here。也就是说,您可以将 scale_color_manual
与 limits
参数一起使用。
在下面评论后编辑:limits
参数很重要,您可以将它传递给 scale_color_manual
或 scale_fill_manual
。
cols <- c("8" = "red","4" = "blue","6" = "darkgreen", "10" = "orange")
plot <- ggplot(mtcars, aes(x = mpg, y = wt, colour = factor(cyl))) + geom_point()
plot + scale_color_manual(values = cols,
limits = c("4", "6", "8", "10"),
labels = c("this", "is", "my", "test"))
这应该足以让您适应您的问题。如果没有你的实际数据集,我很难确定这是否有效,但这里有一个 应该 有效的解决方案:
cols= c("0"="#F0F0F0","1"="green","2"="red","3"="blue","4"="purple")
ggplot(spat.dataframe, aes(long,lat,group=group)) + # the data
geom_polygon(aes(fill=as.factor(qt))) + # make polygons
scale_fill_manual(limits = c("0", "1", "2", "3", "4")
values = cols,
labels = c(paste0("white (",length(spat.dataframe[spat.dataframe$qt==0,]),")"),
paste0("green (",length(spat.dataframe[spat.dataframe$qt==1,]),")"),
paste0("red (",length(spat.dataframe[spat.dataframe$qt==2,]),")"),
paste0("blue (",length(spat.dataframe[spat.dataframe$qt==3,]),")"),
paste0("pink (",length(spat.dataframe[spat.dataframe$qt==4,]),")")),
drop=F,
name=NULL) +
theme(line = element_blank(), # remove the background, tickmarks, etc
axis.text = element_blank(),
axis.title = element_blank(),
panel.background = element_blank()) +
ggtitle(title) +
geom_path( colour = "#6b6b6b", size = .5 ) +
coord_equal()
我正在尝试使用 ggplot 在我用颜色编码的从 0 到 4 的因子类型向量上呈现地图。向量在我命名为 spat.dataframe
的数据框中,向量是 qt
.
# plot
ggplot(spat.dataframe, aes(long,lat,group=group)) + # the data
geom_polygon(aes(fill=as.factor(qt))) + # make polygons
scale_fill_manual(values = c("0"="#F0F0F0","1"="green","2"="red","3"="blue","4"="purple"),
labels = c(paste0("white (",length(spat.dataframe[spat.dataframe$qt==0,]),")"),
paste0("green (",length(spat.dataframe[spat.dataframe$qt==1,]),")"),
paste0("red (",length(spat.dataframe[spat.dataframe$qt==2,]),")"),
paste0("blue (",length(spat.dataframe[spat.dataframe$qt==3,]),")"),
paste0("pink (",length(spat.dataframe[spat.dataframe$qt==4,]),")")),
drop=F,
name=NULL) +
theme(line = element_blank(), # remove the background, tickmarks, etc
axis.text = element_blank(),
axis.title = element_blank(),
panel.background = element_blank()) +
ggtitle(title) +
geom_path( colour = "#6b6b6b", size = .5 ) +
coord_equal()
我的问题出在 图例 部分,因为我想做的是显示所有图例选项,即使矢量中没有列出任何图例选项。所以蓝色和紫色的值也是如此。尝试起来似乎有点困难,但我希望它出现在我的图形上,这样我还可以显示可能值的数量以及与该值关联的多边形数量。因此,对于我的向量 qt
中的值 3 和 4,两者均为零(即 blue (0)
和 purple (0)
)。
如有任何建议,我们将不胜感激。谢谢。
这是一个使用 mtcars
的工作示例,摘自 ggplot2
文档 here。也就是说,您可以将 scale_color_manual
与 limits
参数一起使用。
在下面评论后编辑:limits
参数很重要,您可以将它传递给 scale_color_manual
或 scale_fill_manual
。
cols <- c("8" = "red","4" = "blue","6" = "darkgreen", "10" = "orange")
plot <- ggplot(mtcars, aes(x = mpg, y = wt, colour = factor(cyl))) + geom_point()
plot + scale_color_manual(values = cols,
limits = c("4", "6", "8", "10"),
labels = c("this", "is", "my", "test"))
这应该足以让您适应您的问题。如果没有你的实际数据集,我很难确定这是否有效,但这里有一个 应该 有效的解决方案:
cols= c("0"="#F0F0F0","1"="green","2"="red","3"="blue","4"="purple")
ggplot(spat.dataframe, aes(long,lat,group=group)) + # the data
geom_polygon(aes(fill=as.factor(qt))) + # make polygons
scale_fill_manual(limits = c("0", "1", "2", "3", "4")
values = cols,
labels = c(paste0("white (",length(spat.dataframe[spat.dataframe$qt==0,]),")"),
paste0("green (",length(spat.dataframe[spat.dataframe$qt==1,]),")"),
paste0("red (",length(spat.dataframe[spat.dataframe$qt==2,]),")"),
paste0("blue (",length(spat.dataframe[spat.dataframe$qt==3,]),")"),
paste0("pink (",length(spat.dataframe[spat.dataframe$qt==4,]),")")),
drop=F,
name=NULL) +
theme(line = element_blank(), # remove the background, tickmarks, etc
axis.text = element_blank(),
axis.title = element_blank(),
panel.background = element_blank()) +
ggtitle(title) +
geom_path( colour = "#6b6b6b", size = .5 ) +
coord_equal()