次のようなデータフレームがあります。
Catergory Reason Species
1 Decline Genuine 24
2 Improved Genuine 16
3 Improved Misclassified 85
4 Decline Misclassified 41
5 Decline Taxonomic 2
6 Improved Taxonomic 7
7 Decline Unclear 41
8 Improved Unclear 117
私はグループ化された棒グラフを作ろうとしています。種は高さ、そしてカテゴリーは2色です。
画像を投稿したいのですが、十分な評価ポイントがありません...しかし、私のコードは以下の通りです。
Reasonstats<-read.csv("bothstats.csv")
Reasonstats2<-as.matrix(Reasonstats[,3])
barplot((Reasonstats2),beside=T,col=c("darkblue","red"),ylab="number of
species",names.arg=Reasonstats$Reason, cex.names=0.8,las=2,space=c(0,100)
,ylim=c(0,120))
box(bty="l")
私の望みは、2つのバーに2回ラベルを貼る必要がないことと、2つのバーをグループ化することです。スペースの値をいろいろ変えてみましたが、バーが離れないようです。何が間違っているのか、どなたか教えてください。
Rでプロットを行うにはいくつかの方法があります。lattice
はそのうちの一つで、常に合理的な解決策であると@agstudyに+1されています。 これをbase graphicsで行いたい場合は、以下のようにしてみてください。
Reasonstats <- read.table(text="Category Reason Species
Decline Genuine 24
Improved Genuine 16
Improved Misclassified 85
Decline Misclassified 41
Decline Taxonomic 2
Improved Taxonomic 7
Decline Unclear 41
Improved Unclear 117", header=T)
ReasonstatsDec <- Reasonstats[which(Reasonstats$Category=="Decline"),]
ReasonstatsImp <- Reasonstats[which(Reasonstats$Category=="Improved"),]
Reasonstats3 <- cbind(ReasonstatsImp[,3], ReasonstatsDec[,3])
colnames(Reasonstats3) <- c("Improved", "Decline")
rownames(Reasonstats3) <- ReasonstatsImp$Reason
windows()
barplot(t(Reasonstats3), beside=TRUE, ylab="number of species",
cex.names=0.8, las=2, ylim=c(0,120), col=c("darkblue","red"))
box(bty="l")
.
私がやったことは以下の通りです。2列のマトリックスを作りました(あなたのデータが列になっていたからです)。列は「減少」と「改善」の種の数です。 そして、これらのカテゴリーを列の名前にしました。 また、「理由」を行名にしました。 barplot()関数はこの行列を操作することができますが、データは列ではなく*行*で欲しいので、行列の*トランスポーズされた*バージョンを与えました。 最後に、不要になった
barplot()関数呼び出しの引数をいくつか削除しました。 *言い換えれば、問題は、あなたのデータが、*
barplot()`が意図する出力のために必要とする方法 で設定されていなかったということです。
似たようなことを頻繁にする必要があるので、ここでやろうとしていることを実現するために、barplot()
のbar()
という関数ラッパーを書きました。この関数へのGithubのリンクはここです。これをRにコピー&ペーストすると、次のようになります。
bar(dv = Species,
factors = c(Category, Reason),
dataframe = Reasonstats,
errbar = FALSE,
ylim=c(0, 140)) #I increased the upper y-limit to accommodate the legend.
便利な点は、カテゴリー変数のレベル名(例えば、"Decline"と"Improved")を使って、プロットに凡例を付けることです。各レベルに複数のオブザベーションがある場合、エラーバーをプロットすることもできます(これはここでは適用されないので、errbar=FALSE
としています)。
.