私は次のデータフレームを持っています:
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回ラベルを付けてグループ化する必要がないことです。スペース値をあらゆる種類のものに変更しようとしましたが、バーを離れるように見えることはありません。誰が私が間違っているのか教えてもらえますか?
ggplot2の場合:
library(ggplot2)
Animals <- read.table(
header=TRUE, text='Category 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')
ggplot(Animals, aes(factor(Reason), Species, fill = Category)) +
geom_bar(stat="identity", position = "dodge") +
scale_fill_brewer(palette = "Set1")
barplot
ソリューションではなく、lattice
およびbarchart
を使用:
library(lattice)
barchart(Species~Reason,data=Reasonstats,groups=Catergory,
scales=list(x=list(rot=90,cex=0.8)))
Rでプロットを行う方法はいくつかあります。 lattice
はそのうちの1つであり、常に妥当な解決策であり、@ agstudyに+1します。基本グラフィックスでこれを実行したい場合は、次を試してください。
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")
私がやったことは次のとおりです。列がDecline
とImproved
の種数である2列の行列を作成しました(データは列にあるため)。次に、これらのカテゴリを列名にしました。また、Reason
sを行名にしました。 barplot()
関数はこの行列に対して操作できますが、列ではなく行のデータが必要なので、行列の転置バージョンを入力しました。最後に、不要になったbarplot()
関数呼び出しの引数の一部を削除しました。 つまり、問題はデータが適切に設定されていないことでしたbarplot()
目的の出力が必要です
同様のことを頻繁に行う必要があるため、ここでしようとしていることを行うために、bar()
のbarplot()
という関数ラッパーを作成しました。関数へのGithubリンクは here です。 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.
便利な方法の1つは、カテゴリ変数のレベルの名前(たとえば、 "Decline"および "Improved")を使用して、プロットに凡例を表示することです。各レベルに複数の観測値がある場合、エラーバーもプロットできます(ここでは適用されないため、errbar=FALSE