2

我正在尝试使用这些点在 R 中绘制散点图:

(据我所知,W. Cleveland 建议将这些分别用于稀疏和密集的散点图——我现在称它们为“克利夫兰点”。)

底行应该简单明了,顶行可以通过一些巧妙的重叠绘制(即在彼此顶部绘制两个符号)来实现。但这在绘制图例时是不够的。

因此,作为一种解决方案,我想得到一个包含这 10 个符号的字体,并指示 R 在绘制点 + 图例时使用这种字体。(现在我突然想到,我可能只是使用text自定义字体来绘制点。但这并不能解决图例问题。)

我也考虑过使用ggplot2,但这可能最容易通过比例实现?

问题:关于如何使用这些符号(最好是顶行)的任何建议,也可以在图例中使用?

4

1 回答 1

1

这是使用基本图形和my.symbolsTeachingDemos 包中的函数的一种方法:

library(TeachingDemos)
ms.Cleveland <- function(num.pt = 1, cex=2, ...) {
    funs <- list(
        open = function(cex, ...) 
            points(0,0, pch=1, lwd=2, cex=cex, ...),
        filled = function(cex, ...)
            points(0,0, pch=16, cex=cex, ...),
        half = function(cex, ...)
            points(0,0, pch=1, lwd=5, cex=cex, ...),
        vert = function(cex, ...) {
            points(0,0, pch=1, lwd=2, cex=cex, ...)
            points(0,0, pch='|', lwd=2, cex=cex/2, ...)
          },
        dot = function(....) {
            points(0,0, pch=1, lwd=2, cex=cex, ...)
            points(0,0, pch=16, cex=cex/3, ...)
          }
    )
    funs[[num.pt]](cex, ...)
}

### create size variable for mtcars
sz <- findInterval( mtcars$wt, quantile( mtcars$wt, c(0.2, 0.4, 0.6, 0.8) ) ) + 1

with(mtcars, my.symbols(wt, mpg, ms.Cleveland, num.pt=sz, add=FALSE, 
    symb.plots=TRUE))
tmp <- legend('topright', pch=1, col=NA, pt.cex=2,
    legend=c('Small', 'SMed', 'Medium', 'LMed', 'Large'))

my.symbols( (tmp$rect$left + tmp$text$x)/2, tmp$text$y, ms.Cleveland, num.pt=1:5,
    symb.plots=TRUE)

ms.Cleveland函数根据数字(1 到 5)或名称绘制点,并对最后 2 个点使用重叠绘图(可能需要稍微调整函数)。

然后使用常规图例功能绘制图例,但col=NA符号有位置,但未绘制。然后my.symbols再次用于将符号放置在图例中框左边缘和文本开头之间的中间点。

于 2013-09-09T18:19:02.740 回答