これはコメントとして始まりましたが、答えにならないのは不公平に思えました。あなたの質問に (スタック オーバーフローであっても) 適切に答えるには、「mydata」がどのように構成されているかを知る必要があります。最初は、5 行と 2 列または 3 列のデータ フレームであると想定していましたが、この場合、コードは意味がありません。ただし、これがここでの構造である場合、私が望むことを行う1つの方法は次のとおりです。
mydata <- data.frame(
row.names =c(100, 200, 300, 400, 500),
Male =c(68.33333, 53.33333, 70, 70, 61.66667),
Female =c(31.66667, 46.66667, 30, 30, 38.33333))
x <- barplot(t(as.matrix(mydata)), col=c("yellow", "green"),
legend=TRUE, border=NA, xlim=c(0,8), args.legend=
list(bty="n", border=NA),
ylab="Cumulative percentage", xlab="Village number")
text(x, mydata$Male-10, labels=round(mydata$Male), col="black")
text(x, mydata$Male+10, labels=100-round(mydata$Male))
これにより、次が生成されます。
別の方法として、y の値をすべての男性のテキスト ラベルに対して 40 に設定し、すべての女性のテキスト ラベルに対して 80 に設定することもできます。これには、ラベルの混乱が少なくなるという利点と、テキストの垂直位置が概念的に定まらないという欠点があります。データに添付されています。
個人的には、この棒グラフはあまり好きではありませんが、単純な棒グラフよりもデータの視覚化に対してははるかに悪い犯罪がたくさんあります。プロット上の数字はごちゃごちゃしていて、実際のデータの色、形、サイズへのマッピングの視覚的な影響を損なっています。私はむしろ次のような単純なドットプロットをしたい:
library(ggplot2)
ggplot(mydata, aes(x=row.names(mydata), y=Male)) +
geom_point(size=4) +
coord_flip() +
labs(x="Village number\n", y="Percentage male") +
ylim(0,100) +
geom_hline(yintercept=50, linetype=2)
を与える
プロットの冗長な混乱が少なくなり、データとインクの比率が高くなります。ただし、最終的には、視聴者にとって意味のあるプロットを作成する必要があります。