こんにちは私は本当に喜びなしでこれをたくさんググった。ウェブサイトが存在する場合は、その参照を取得できれば幸いです。 極座標に関するHadleyのドキュメント を理解するのに苦労しています。パイ/ドーナツチャートは本質的に悪と見なされていることを知っています。
そうは言っても、私がやろうとしているのは
alpha=0.5
などで)上に追加します。どうして?財務情報を表示したいと思っています。最初のリングはコスト(内訳)で、2番目のリングは総収入です。次に、レビュー期間ごとに+ 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))
のようなもので2番目の内部リングを追加できますperiod
という名前の列がある場合は、ファセットにfacet_wrap(~ period)
を使用できます。ggplot2
_を最も簡単に使用するには、データを「長い形式」にする必要があります。 _reshape2
_パッケージのmelt()
は、データの変換に役立つ場合があります。ggplot(dat, aes(x=category, y=count, fill=category)) + geom_bar(stat="identity")
bdemarestの答え から同じアプローチで質問2を解決しようとしています。また、彼のコードを足場として使用しています。より完全にするためにいくつかのテストを追加しましたが、自由に削除してください。
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
そして結果: