【问题标题】:Adjust size of pie charts调整饼图大小
【发布时间】:2015-01-05 06:32:42
【问题描述】:

我制作了这些饼图:

df <- expand.grid(log.var = c(TRUE, FALSE), zone = 1:4)
df$proportion <- c(0.3, 0.7, 0.4, 0.6, 0.2, 0.8, 0.5, 0.5)
df$size = sample(1:20, 8)

library(ggplot2)
ggplot(df, aes(factor(1), proportion, fill = log.var)) + 
   geom_bar(stat = "identity") + coord_polar(theta = "y") + facet_grid(.~zone)

有没有办法根据每个zonesize的总和来调整每个饼图的大小?

【问题讨论】:

  • 喜欢ggplot(transform(df, sum = with(df, ave(size, zone, FUN = sum))), aes(factor(1), proportion, fill = log.var, width = sum)) + ...?

标签: r charts ggplot2


【解决方案1】:

@lukeA 的建议是明智的,但不太奏效:

library("ggplot2"); theme_set(theme_bw())
library("dplyr")  ## for mutate()
set.seed(101)
df <- expand.grid(log.var = c(TRUE, FALSE), zone = 1:4)
df <- mutate(df,
   proportion=c(0.3, 0.7, 0.4, 0.6, 0.2, 0.8, 0.5, 0.5),
   size = sample(1:20, 8),
   totsize=ave(size, zone,FUN=sum))

g0 <- ggplot(df, aes(x=factor(1), y=proportion, fill = log.var))
g0 + geom_bar(stat="identity",aes(width=totsize))+facet_grid(.~zone)+
        coord_polar(theta = "y")

这里的问题是在x轴的中间中绘制了条形(在直角坐标中);我们希望它们的 x 坐标从 0 到全宽绘制,但我不知道该怎么做。另一种方法是手动(或至少在ggplot2之外)进行一堆累积比例/堆叠计算,然后使用geom_rect() ...

方法如下:

df <- df %>% group_by(zone) %>%
    mutate(cp1=c(0,head(cumsum(proportion),-1)),
              cp2=cumsum(proportion))

ggplot(df) + geom_rect(aes(xmin=0,xmax=totsize,ymin=cp1,ymax=cp2,
                           fill=log.var)) + facet_grid(.~zone)+
                               coord_polar(theta = "y")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    • 2012-10-23
    • 2021-03-01
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多