私は注意してこれに取り組んでいるが、円グラフは存在なしデータを表示するうえで良い方法だと思う。グループごとに等しい面積とラベルの円グラフを作成する
以下に、4つの異なる病原体(AAA:DDD)について10人が2値データ(0または1)を有する代表的なデータを作成する。私は、ggplotを使用する前に、データを幅広く長くしています。
set.seed(123)
dat <- data.frame(ID = as.factor(seq(1,10,1)),
AAA = as.factor(sample(c(0,1), 10, replace = T)),
BBB = as.factor(sample(c(0,1), 10, replace = T)),
CCC = as.factor(sample(c(0,1), 10, replace = T)),
DDD = as.factor(sample(c(0,1), 10, replace = T)))
head(dat)
library(tidyr)
datLong <- gather(dat, Disease, YesNo, -ID)
head(datLong)
各個人(たとえば、各レベルのID)について、私は円グラフを作成したいと思います。すべての人にとって、円グラフは同じ形と形状を持ちます。私は円グラフを4つの病原体(AAA:DDD)を表す4つのセクションに等しく分割したい。動物に病原体がある場合(YesNo == 1)、パイのスライスが塗りつぶされます。個々のドースに病原体がない場合(YesNo == 0など)、パイスライスは存在しますが、塗りつぶされません。
この目的のために、私は病原体が見つからなければNAである新しい列(New)を作った。
datLong$New <- ifelse(datLong$YesNo == 0, NA , as.character(datLong$Disease))
私はまた、各円スライスにラベルを付ける位置(POS)のカラムを作成しました。以下のコードを使用して
datLong$Pos <- ifelse(datLong$Disease == "AAA", 0.5,
ifelse(datLong$Disease == "BBB", 1.5,
ifelse(datLong$Disease == "CCC", 2.5,
ifelse(datLong$Disease == "DDD", 3.5, NA))))
、私は、ほとんどが正しいプロットを行うことができます。しかしながら、病原体がNAである場合、それは包含されるのではなくスキップされるが、充填されないので、ラベルとの不一致が生じる。
library(ggplot2)
ggplot(datLong, aes(x = "", color = New, fill = New)) +
geom_bar(width = 1, color = "black")+
geom_text(aes(x= factor(1), y=Pos, label = New), size= 8) +
facet_wrap(~ID) +
scale_fill_brewer(palette="Dark2") +
scale_color_brewer(palette="Dark2") +
theme(axis.text.x=element_blank(),
panel.grid=element_blank()) +
guides(colour=FALSE) + guides(fill=FALSE) +
coord_polar(theta = "y")
時計回りに、それぞれの病原体(存在するか否かにかかわらず)の位置をアルファベット順に修正したい。
ありがとうございます、ご提案や修正があります!
@aosmithプロットする前にデータセットを要約すると、病気とIDのレベルごとに1つの値しか持たないことがわかります。少しのコードを追加したり、答えとして投稿してもらえますか?前もって感謝します! –