あなたの質問に対する完全な答えはありませんが、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]
。
- 「上に2番目のレイヤーの円を追加」したい:最初のリングの上に2番目のリングを直接重ねるということですか?それとも、2 番目のリングを最初のリングの内側または外側に配置しますか? 次のようなもので2番目の内部リングを追加できます
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")