嗨,我真的很无聊地搜索了很多。很高兴获得网站的引用(如果存在)。我正在努力理解Hadley documentation on polar coordinates,并且我知道饼图/甜甜圈图被认为是天生的邪恶。

就是说,我想做的是


像这里显示的tikz ring chart一样创建一个甜甜圈/环形图(中间是一个空的馅饼)
在顶部添加第二个层圈(使用alpha=0.5左右),以显示第二个(可比较)变量。


为什么?我想显示财务信息。第一个是成本(细分),第二个是总收入。然后,想法是在每个审查期添加+ facet=period,以显示收入和支出的趋势以及两者的增长。

任何想法将不胜感激

注意:如果尝试使用MWE,则完全任意

donut_data=iris[,2:4]
revenue_data=iris[,1]
facet=iris$Species


那将类似于我正在尝试做的事情。

最佳答案

对于您的问题,我没有完整的答案,但是我可以提供一些代码,帮助您开始使用ggplot2绘制环形图。

library(ggplot2)

# Create test data.
dat = data.frame(count=c(10, 60, 30), category=c("A", "B", "C"))

# Add addition columns, needed for drawing with geom_rect.
dat$fraction = dat$count / sum(dat$count)
dat = dat[order(dat$fraction), ]
dat$ymax = cumsum(dat$fraction)
dat$ymin = c(0, head(dat$ymax, n=-1))

p1 = ggplot(dat, aes(fill=category, ymax=ymax, ymin=ymin, xmax=4, xmin=3)) +
     geom_rect() +
     coord_polar(theta="y") +
     xlim(c(0, 4)) +
     labs(title="Basic ring plot")

p2 = ggplot(dat, aes(fill=category, ymax=ymax, ymin=ymin, xmax=4, xmin=3)) +
     geom_rect(colour="grey30") +
     coord_polar(theta="y") +
     xlim(c(0, 4)) +
     theme_bw() +
     theme(panel.grid=element_blank()) +
     theme(axis.text=element_blank()) +
     theme(axis.ticks=element_blank()) +
     labs(title="Customized ring plot")


library(gridExtra)
png("ring_plots_1.png", height=4, width=8, units="in", res=120)
grid.arrange(p1, p2, nrow=1)
dev.off()




想法:


如果发布一些结构良好的样本数据,则可能会得到更有用的答案。您已经提到使用iris数据集中的一些列(一个好的开始),但是我看不到如何使用该数据进行环形绘图。例如,链接到的环形图显示了几个类别的比例,但是iris[, 2:4]iris[, 1]都不是分类的。
您想“在顶部添加第二个圆圈”:您是说将第二个环直接叠加在第一个环上吗?还是您想让第二枚戒指在第一枚戒指之内或之外?您可以添加第二个内部环,例如geom_rect(data=dat2, xmax=3, xmin=2, aes(ymax=ymax, ymin=ymin))
如果data.frame有一个名为period的列,则可以使用facet_wrap(~ period)进行构面。
要最轻松地使用ggplot2,您将希望数据为“长格式”; melt()包中的reshape2对于转换数据可能很有用。
即使您决定不使用它们,也可以进行一些比较。例如,尝试:
ggplot(dat, aes(x=category, y=count, fill=category)) + geom_bar(stat="identity")

关于r - ggplot甜甜圈图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13615562/

10-10 15:57