控制ggplot2中离散比例的相对大小

时间:2018-05-07 18:21:16

标签: r ggplot2

我试图用ggplot2生成极地小提琴情节。我想控制每个类别的相对大小(x轴上每个因子类别的宽度,然后在我将坐标设为极坐标时转换为角度)。

有没有办法做到这一点?

示例代码:

means <- runif(n = 10, min=0.1, max=0.6)
sds <- runif(n = 10, min=0.2, max=0.4)
frame <- data.frame(
  cat = sample(1:10, size=10000, replace=TRUE), 
  value = rnorm(10000)
) %>%
  mutate(
    mn = means[cat], 
    sd = sds[cat],
    value = (value * sd) + mn,
    cat = factor(cat)
  )
frame %>%
  ggplot(aes(x = cat, y = value)) + geom_violin() +
  coord_polar()

感谢任何帮助或建议。

或者(也许更好),我希望能够制作一个不居中的极坐标图。对于每个离散类别,角度是相同的,但是点会聚,例如,从圆的底部开始的1/3,而不是圆的中心。

1 个答案:

答案 0 :(得分:1)

根据评论,我正在重做我之前的回答。如果您想要的是扇形/杂草叶形,则可以为其他cat值添加虚拟数据。在这个例子中,我只是将cat中的级别数加倍,但您可以更改它。然后我将x中断设置为仅显示实际具有数据的值,但让虚拟值占用空间来更改形状。仍然不确定这是不是你的意思,但尝试它很有意思。

library(tidyverse)

means <- runif(n = 10, min=0.1, max=0.6)
sds <- runif(n = 10, min=0.2, max=0.4)
frame <- data.frame(
    cat = sample(1:10, size=10000, replace=TRUE), 
    value = rnorm(10000)
) %>%
    mutate(
        mn = means[cat], 
        sd = sds[cat],
        value = (value * sd) + mn,
        cat = factor(cat)
    )
frame %>%
    mutate(cat = as.integer(cat)) %>%
    bind_rows(tibble(cat = 11:20, value = NA)) %>%
    ggplot(aes(x = as.factor(cat), y = value)) + 
    geom_violin(scale = "area") +
    coord_polar(start = -pi / 2) +
    scale_x_discrete(breaks = 1:10)
#> Warning: Removed 10 rows containing non-finite values (stat_ydensity).

reprex package(v0.2.0)创建于2018-05-08。