使用ggplot2平滑可变的线条尺寸边框

比约瑟夫

我正在制作一个线图,其中线的粗细映射到第三个连续变量。但是,将变量映射到的大小参数时geom_line,结果图将生成不连续外观线的“块状”图。有没有一种方法可以平滑地融合这些线,以使线段之间没有明显的缝隙?

我在下面制作了一个可复制的示例。

data(mtcars)
require(ggplot2)
mtcars$am<-factor(mtcars$am)
ggplot(data=mtcars,aes(x=mpg,y=hp))+geom_line(aes(color=am,size=disp))

产生以下图: 在此处输入图片说明

例如,我想将am = 0的第一条线段的边界与第二条线的边界融合在一起。

感谢您的帮助。

本·博克(Ben Bolker)

通过切换到geom_path您可以做得更好一些,该代码遵循线的结束和连接形状的指令:

ggplot(data=plyr::arrange(mtcars,mpg),
       aes(x=mpg,y=hp))+
geom_path(aes(color=am,size=disp),lineend="round",linejoin="mitre")

?geom_path

lineend:线端样式(圆形,对接,正方形)

linejoin:线连接样式(圆形,斜接,斜角)

(尽管看起来还是有点难看……)

有点疯狂:

library("ggplot2")
library("grid")
theme_set(theme_bw()+theme(axis.line=element_blank(),axis.text.x=element_blank(),
          axis.text.y=element_blank(),axis.ticks=element_blank(),
          axis.title.x=element_blank(),
          axis.title.y=element_blank(),legend.position="none",
          panel.background=element_blank(),
          panel.border=element_blank(),panel.grid.major=element_blank(),
          panel.grid.minor=element_blank(),plot.background=element_blank(),
          panel.margin=unit(0,"lines")))


library(gridExtra)
ggList <- list()
for (end in c("round","butt","square")) {
    for (join in c("round","mitre","bevel")) {
        ggList <- c(ggList,
                    list(ggplot(data=plyr::arrange(mtcars,mpg),
                                aes(x=mpg,y=hp))+
                             geom_path(aes(color=factor(am),size=disp),
                                       lineend=end,linejoin=join)+
                                 scale_size(guide="none")+
                                     scale_colour_discrete(guide="none")))
    }
}

png("linejoin.png",500,500)
do.call(grid.arrange,ggList)
dev.off()

在此处输入图片说明

看起来join参数没有执行任何操作,可能是因为ggplot将路径的每个部分绘制为一个单独的段...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章