37

次のデータフレームがあります。

 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 回ラベルを付けてグループ化する必要がないようにすることです。スペースの値をあらゆる種類のものに変更しようとしましたが、バーが離れているようには見えません。誰が私が間違っているのか教えてもらえますか?

4

4 に答える 4

50

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")

棒グラフ

于 2013-07-18T14:46:49.493 に答える
31

解決策ではありませんbarplotが、 and を使用latticebarchartます:

library(lattice)
barchart(Species~Reason,data=Reasonstats,groups=Catergory, 
         scales=list(x=list(rot=90,cex=0.8)))

ここに画像の説明を入力

于 2013-07-18T10:54:31.030 に答える
27

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")

ここに画像の説明を入力

これが私がしたことです: 2 つの列 (データが列にあったため) を持つ行列を作成しました。ここで、列は と の種数DeclineですImproved。次に、それらのカテゴリを列名にしました。また、Reasons を行名にしました。このbarplot()関数はこの行列を操作できますが、列ではなく行のデータが必要なため、行列の転置バージョンを入力しました。barplot()最後に、不要になった関数呼び出し の引数の一部を削除しました。言い換えれば、問題は barplot() 、意図した出力に必要な方法でデータが設定されていなかったことです。

于 2013-07-18T13:19:39.427 に答える