以下のの記事をみて、もうちょっと楽にできるのではと思ってやってみました。
関連チートシート(pdfリンク):
library(ggplot2)
library(dplyr)
##
## Attaching package: 'dplyr'
## 以下のオブジェクトは 'package:stats' からマスクされています:
##
## filter, lag
## 以下のオブジェクトは 'package:base' からマスクされています:
##
## intersect, setdiff, setequal, union
devtools::session_info()
## Session info --------------------------------------------------------------
## setting value
## version R version 3.2.3 (2015-12-10)
## system x86_64, linux-gnu
## ui X11
## language ja
## collate ja_JP.UTF-8
## tz <NA>
## date 2016-01-26
## Packages ------------------------------------------------------------------
## package * version date source
## DBI 0.3.1 2014-09-24 CRAN (R 3.2.0)
## R6 2.1.1 2015-08-19 CRAN (R 3.2.2)
## Rcpp 0.12.3 2016-01-10 CRAN (R 3.2.3)
## assertthat 0.1 2013-12-06 CRAN (R 3.2.0)
## colorspace 1.2-6 2015-03-11 CRAN (R 3.2.0)
## devtools 1.9.1 2015-09-11 CRAN (R 3.2.2)
## digest 0.6.9 2016-01-08 CRAN (R 3.2.3)
## dplyr * 0.4.3 2015-09-01 CRAN (R 3.2.2)
## evaluate 0.8 2015-09-18 CRAN (R 3.2.2)
## formatR 1.2.1 2015-09-18 CRAN (R 3.2.2)
## ggplot2 * 2.0.0 2015-12-18 CRAN (R 3.2.3)
## gtable 0.1.2 2012-12-05 CRAN (R 3.2.0)
## htmltools 0.3 2015-12-29 CRAN (R 3.2.3)
## knitr 1.12 2016-01-07 CRAN (R 3.2.3)
## magrittr 1.5 2014-11-22 CRAN (R 3.2.0)
## memoise 0.2.1 2014-04-22 CRAN (R 3.2.0)
## munsell 0.4.2 2013-07-11 CRAN (R 3.2.0)
## plyr 1.8.3 2015-06-12 CRAN (R 3.2.1)
## rmarkdown 0.9.2 2016-01-01 CRAN (R 3.2.3)
## scales 0.3.0 2015-08-25 CRAN (R 3.2.2)
## stringi 1.0-1 2015-10-22 CRAN (R 3.2.2)
## stringr 1.0.0.9000 2015-11-12 Github (hadley/stringr@a67f8f0)
## yaml 2.1.13 2014-06-12 CRAN (R 3.2.0)
度数のカウントはdplyr::count()でいけました:
kosaki <- iris %>%
dplyr::count(Species)
knitr::kable(kosaki)
| Species | n |
|---|---|
| setosa | 50 |
| versicolor | 50 |
| virginica | 50 |
あとはggplot2::geom_barあたりでいけます:
ggplot2::ggplot(kosaki, aes(x=Species, y=n)) +
geom_bar(stat = "identity")
でもこれくらいならそのままggplot2で処理させる手も:
ggplot2::ggplot(iris, aes(x=Species)) +
stat_count()
データ作成します:
V1 <- sample(LETTERS[1:5], 150, replace = TRUE, prob = c(0.1, 0.3, 0.2, 0.25, 0.15))
df <- dplyr::mutate(iris, V1=V1)
knitr::kable(head(df))
| Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species | V1 |
|---|---|---|---|---|---|
| 5.1 | 3.5 | 1.4 | 0.2 | setosa | C |
| 4.9 | 3.0 | 1.4 | 0.2 | setosa | C |
| 4.7 | 3.2 | 1.3 | 0.2 | setosa | E |
| 4.6 | 3.1 | 1.5 | 0.2 | setosa | B |
| 5.0 | 3.6 | 1.4 | 0.2 | setosa | D |
| 5.4 | 3.9 | 1.7 | 0.4 | setosa | B |
度数分布表を作成:
chitoge <- dplyr::count(df, Species, V1)
knitr::kable(chitoge)
| Species | V1 | n |
|---|---|---|
| setosa | A | 3 |
| setosa | B | 15 |
| setosa | C | 15 |
| setosa | D | 7 |
| setosa | E | 10 |
| versicolor | A | 6 |
| versicolor | B | 14 |
| versicolor | C | 13 |
| versicolor | D | 12 |
| versicolor | E | 5 |
| virginica | A | 9 |
| virginica | B | 18 |
| virginica | C | 8 |
| virginica | D | 10 |
| virginica | E | 5 |
集合グラフ作成:
ggplot2::ggplot(chitoge, aes(x=Species, y=n, fill = V1)) +
geom_bar(stat = "identity", position = "dodge") +
geom_text(aes(label=n), group = "dodge",
position = position_dodge(width = 0.9), vjust = -0.5)
度数なしでもいいならdfから一気にこれだけでもOK:
ggplot2::ggplot(df, aes(x=Species, fill=V1)) +
stat_count(position = "dodge")
積み上げグラフ作成…については上のgeom_bar()等の=dodgeを適宜変更すればOKです。積み上げのラベルはこちらのやり方、および記事の最後にある神のメッセージをご覧ください。
Enjoy!