ggplot多面饼图

Ral*_*lfB 4 r facet ggplot2 pie-chart

我有以下data.frame:

x  = data.frame(category=c(1,1,1,1,2,2,2,2), value=c(1,2,1,1,2,2,2,1));
x$category = as.factor(x$category);
x$value = as.factor(x$value);
Run Code Online (Sandbox Code Playgroud)

并且我用ggplot2创建了一个多面条形图。

ggplot(x, aes(value, fill=category)) + geom_bar() + facet_wrap(~category);
Run Code Online (Sandbox Code Playgroud)

但是,我希望有一个饼图显示分数值(基于每个类别的总和)。然后,该图应为每个类别显示一个饼图,并在每个饼图中显示两个分数,每个值因子一个。实际数据最多有6个类别,我有1000个数据集。有通用的方法可以做到吗?

jak*_*kub 5

一种方法是预先计算百分比/比率,然后使用它来获取文本标签的位置。另请参见当geom_text不适合时如何在ggplot中放置百分比标签?

# Your data
y  = data.frame(category=c(1,1,1,1,2,2,2,2), value=c(2,2,1,1,2,2,2,1))

# get counts and melt it
data.m = melt(table(y)) 
names(data.m)[3] = "count"

# calculate percentage:
m1 = ddply(data.m, .(category), summarize, ratio=count/sum(count))

#order data frame (needed to comply with percentage column):
m2 = data.m[order(data.m$category),]

# combine them:
mydf = data.frame(m2,ratio=m1$ratio)

# get positions of percentage labels:
mydf = ddply(mydf, .(category), transform, position = cumsum(count) - 0.5*count) 

# create bar plot
pie = ggplot(mydf, aes(x = factor(1), y = count, fill = as.factor(value))) +
  geom_bar(stat = "identity", width = 1) +
  facet_wrap(~category)

# make a pie
pie = pie + coord_polar(theta = "y")

# add labels
pie + geom_text(aes(label = sprintf("%1.2f%%", 100*ratio), y = position))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明