您好我真的有这样的GOOGLE了很多,没有任何的喜悦。 会很乐意得到一个参考的网站,如果它的存在。 我挣扎理解极坐标哈德利的文档 ,我知道馅饼/甜甜圈图表被认为是天生邪恶。
这就是说,我想要做的是
- 创建一个圆环/环图表(因此具有空中间饼状)之类的tikz环图表这里示出
- 添加第二层上圆顶部(与
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
包装可以是用于转换数据是有用的。 - 使一些barplots作比较,即使你不打算使用它们。 例如,尝试:
ggplot(dat, aes(x=category, y=count, fill=category)) + geom_bar(stat="identity")
只是想解决问题2从同样的方法bdemarest的答案 。 还用他的代码作为支架。 我加了一些测试,以使之更加完整,但随时将其删除。
library(broom)
library(tidyverse)
# Create test data.
dat = data.frame(count=c(10,60,20,50),
ring=c("A", "A","B","B"),
category=c("C","D","C","D"))
# compute pvalue
cs.pvalue <- dat %>% spread(value = count,key=category) %>%
ungroup() %>% select(-ring) %>%
chisq.test() %>% tidy()
cs.pvalue <- dat %>% spread(value = count,key=category) %>%
select(-ring) %>%
fisher.test() %>% tidy() %>% full_join(cs.pvalue)
# compute fractions
#dat = dat[order(dat$count), ]
dat %<>% group_by(ring) %>% mutate(fraction = count / sum(count),
ymax = cumsum(fraction),
ymin = c(0,ymax[1:length(ymax)-1]))
# Add x limits
baseNum <- 4
#numCat <- length(unique(dat$ring))
dat$xmax <- as.numeric(dat$ring) + baseNum
dat$xmin = dat$xmax -1
# plot
p2 = ggplot(dat, aes(fill=category,
alpha = ring,
ymax=ymax,
ymin=ymin,
xmax=xmax,
xmin=xmin)) +
geom_rect(colour="grey30") +
coord_polar(theta="y") +
geom_text(inherit.aes = F,
x=c(-1,1),
y=0,
data = cs.pvalue,aes(label = paste(method,
"\n",
format(p.value,
scientific = T,
digits = 2))))+
xlim(c(0, 6)) +
theme_bw() +
theme(panel.grid=element_blank()) +
theme(axis.text=element_blank()) +
theme(axis.ticks=element_blank(),
panel.border = element_blank()) +
labs(title="Customized ring plot") +
scale_fill_brewer(palette = "Set1") +
scale_alpha_discrete(range = c(0.5,0.9))
p2
而结果是: