没有变换的geom_point的精确半径

时间:2018-02-10 12:15:58

标签: r plot ggplot2

我想知道是否可以在与轴(我的示例中为米)相同的单位中指定geom_points的点半径。我有库存数据,其中树的采样概率依赖于单个半径。

# reading some example data
dat <- read.table(header=TRUE, text="x y radius
0 0  7.5
10 0 5.5
20 0 7
30 0 9")
dat
#>    x y radius
#> 1  0 0    7.5
#> 2 10 0    5.5
#> 3 20 0    7.0
#> 4 30 0    9.0
因此,我需要精确地绘制树特定半径以直观地解释该方法。我发现了较旧的问题(比如这个四年前的讨论:geom_point control radius exactly rather than scaling it),同样的问题最终没有得到解决。我想知道是否有更近期的方法。我玩了scale_radius和scale_size_area,但没有成功。这是我试过的代码

ggplot(data = dat, aes(x = x, y = y, color = factor(dat$Nutz), size = radius * 2)) + 
geom_point() + scale_radius(name = NULL, range = c(0, 50))

这给了我正在寻找的图形包

plot(dat$x, dat$y, asp = 1, xlim = c(0, 50),ylim = c(0, 50))
symbols(dat$x, dat$y, circles = dat$radius, inches = FALSE, add = TRUE)

enter image description here

有没有人有线索?一切顺利,凯

2 个答案:

答案 0 :(得分:2)

像这样,添加包,

library(ggforce) # devtools::install_github("thomasp85/ggforce")
ggplot() + geom_circle(aes(x0=x, y0=y, r= radius), data= dat) + coord_fixed() + 
           scale_x_continuous(minor_breaks = seq(-10, 40, 1), lim = c(-10, 40))  

geom_circle

如果有人需要做同样的事情,但有省略号,可以使用geom_ellipsis()

ggplot(dat, aes(x0 = x, y0 = y, a = radius, b = radius, angle = 0)) +
        geom_ellipsis() + geom_point(aes(x, y), size = .5) + coord_fixed() 

geom_ellipsis

这是另一种解决方法选项,

ggplot(data = dat, aes(x = x, y = y, size = radius))  + 
  geom_point(shape=1, show.legend=F) + 
  scale_size(range = range(dat$radius)*10) + 
  scale_x_continuous(minor_breaks = seq(-10, 40, 1), lim = c(-10, 40))  

enter image description here

答案 1 :(得分:0)

在Erics提示之后,我找到了使用geom_circle的另一个解决方案,它是ggforce最近CRAN版本的一部分,并且需要更少的参数。

ggplot(dat, aes(x0 = x, y0 = y, r = radius)) +
geom_circle(show.legend = FALSE) + 
geom_point(aes(x, y), size = .5, show.legend = FALSE) +
coord_fixed()

Here comes the link to the result