1 Sử dụng gói ggbeeswarm

  • Mục đích: Sử dụng với trục hoành là biến factor, trục tung là biến numeric

  • Ưu điểm:

    • Nhìn rõ được phân phối của từng biến numeric theo các factor
    • Sử dụng được các tiện ích của gói ggplot
  • Nhược điểm: Với dữ liệu lớn thì vẽ sẽ rất lâu

2 Trong phần dưới đây sẽ test với dữ liệu iris

library(ggplot2)
library(ggbeeswarm)
## Warning: package 'ggbeeswarm' was built under R version 3.5.2

2.1 Biểu đồ dạng đơn giản nhất

ggplot(iris, aes(Species, Sepal.Length)) + geom_beeswarm()

2.2 Thêm màu và chỉnh cỡ của từng point

ggplot(iris, aes(Species, Sepal.Length, col = Species)) + geom_beeswarm(size = 2)

2.3 Chỉnh cỡ to hơn

ggplot(iris, aes(Species, Sepal.Length, col = Species)) + geom_beeswarm(size = 3, cex = 3)

2.4 Thêm phân nhóm trên graph

ggplot(iris, aes(Species, Sepal.Length, col = Sepal.Length > 5)) + geom_beeswarm(dodge.width = 0.5)

2.5 Thêm biểu đồ boxplot vào

ggplot(iris, aes(Species, Sepal.Length, col = Species)) + 
  geom_boxplot()+
  geom_beeswarm()

2.6 geom_quasirandom

Tương tự như geom_jitter, nhưng tiện ích hơn do nó tự động nhóm các điểm của từng nhóm

ggplot(iris, aes(Species, Sepal.Length, col = Species)) + geom_quasirandom()

ggplot(iris, aes(Species, Sepal.Length, col = Species)) + geom_quasirandom(size = 2, method = "smiley")

LS0tDQp0aXRsZTogImdnYmVlc3dhcm0iDQphdXRob3I6ICJOZ3V54buFbiBOZ+G7jWMgQsOsbmgiDQpkYXRlOiAiTWFyY2ggOSwgMjAxOSINCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6IA0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICAgIHRoZW1lOiAiZGVmYXVsdCINCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCmBgYA0KDQojIFPhu60gZOG7pW5nIGfDs2kgZ2diZWVzd2FybSANCg0KLSBN4bulYyDEkcOtY2g6IFPhu60gZOG7pW5nIHbhu5tpIHRy4bulYyBob8OgbmggbMOgIGJp4bq/biBmYWN0b3IsIHRy4bulYyB0dW5nIGzDoCBiaeG6v24gbnVtZXJpYw0KDQotIMavdSDEkWnhu4NtOiANCg0KICAqIE5ow6xuIHLDtSDEkcaw4bujYyBwaMOibiBwaOG7kWkgY+G7p2EgdOG7q25nIGJp4bq/biBudW1lcmljIHRoZW8gY8OhYyBmYWN0b3INCiAgKiBT4butIGThu6VuZyDEkcaw4bujYyBjw6FjIHRp4buHbiDDrWNoIGPhu6dhIGfDs2kgZ2dwbG90DQoNCi0gTmjGsOG7o2MgxJFp4buDbTogVuG7m2kgZOG7ryBsaeG7h3UgbOG7m24gdGjDrCB24bq9IHPhur0gcuG6pXQgbMOidQ0KDQojIFRyb25nIHBo4bqnbiBkxrDhu5tpIMSRw6J5IHPhur0gdGVzdCB24bubaSBk4buvIGxp4buHdSBpcmlzDQoNCmBgYHtyIGNhcnN9DQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGdnYmVlc3dhcm0pDQpgYGANCg0KIyMgQmnhu4N1IMSR4buTIGThuqFuZyDEkcahbiBnaeG6o24gbmjhuqV0DQpgYGB7cn0NCmdncGxvdChpcmlzLCBhZXMoU3BlY2llcywgU2VwYWwuTGVuZ3RoKSkgKyBnZW9tX2JlZXN3YXJtKCkNCmBgYA0KDQojIyBUaMOqbSBtw6B1IHbDoCBjaOG7iW5oIGPhu6EgY+G7p2EgdOG7q25nIHBvaW50DQpgYGB7cn0NCmdncGxvdChpcmlzLCBhZXMoU3BlY2llcywgU2VwYWwuTGVuZ3RoLCBjb2wgPSBTcGVjaWVzKSkgKyBnZW9tX2JlZXN3YXJtKHNpemUgPSAyKQ0KYGBgDQoNCiMjIENo4buJbmggY+G7oSB0byBoxqFuDQoNCmBgYHtyfQ0KZ2dwbG90KGlyaXMsIGFlcyhTcGVjaWVzLCBTZXBhbC5MZW5ndGgsIGNvbCA9IFNwZWNpZXMpKSArIGdlb21fYmVlc3dhcm0oc2l6ZSA9IDMsIGNleCA9IDMpDQpgYGANCg0KIyMgVGjDqm0gcGjDom4gbmjDs20gdHLDqm4gZ3JhcGgNCg0KYGBge3J9DQpnZ3Bsb3QoaXJpcywgYWVzKFNwZWNpZXMsIFNlcGFsLkxlbmd0aCwgY29sID0gU2VwYWwuTGVuZ3RoID4gNSkpICsgZ2VvbV9iZWVzd2FybShkb2RnZS53aWR0aCA9IDAuNSkNCmBgYA0KDQojIyBUaMOqbSBiaeG7g3UgxJHhu5MgYm94cGxvdCB2w6BvDQoNCmBgYHtyfQ0KZ2dwbG90KGlyaXMsIGFlcyhTcGVjaWVzLCBTZXBhbC5MZW5ndGgsIGNvbCA9IFNwZWNpZXMpKSArIA0KICBnZW9tX2JveHBsb3QoKSsNCiAgZ2VvbV9iZWVzd2FybSgpDQpgYGANCg0KIyMgZ2VvbV9xdWFzaXJhbmRvbQ0KDQpUxrDGoW5nIHThu7EgbmjGsCBnZW9tX2ppdHRlciwgbmjGsG5nIHRp4buHbiDDrWNoIGjGoW4gZG8gbsOzIHThu7EgxJHhu5luZyBuaMOzbSBjw6FjIMSRaeG7g20gY+G7p2EgdOG7q25nIG5ow7NtDQoNCmBgYHtyfQ0KZ2dwbG90KGlyaXMsIGFlcyhTcGVjaWVzLCBTZXBhbC5MZW5ndGgsIGNvbCA9IFNwZWNpZXMpKSArIGdlb21fcXVhc2lyYW5kb20oKQ0KYGBgDQoNCmBgYHtyfQ0KZ2dwbG90KGlyaXMsIGFlcyhTcGVjaWVzLCBTZXBhbC5MZW5ndGgsIGNvbCA9IFNwZWNpZXMpKSArIGdlb21fcXVhc2lyYW5kb20oc2l6ZSA9IDIsIG1ldGhvZCA9ICJzbWlsZXkiKQ0KYGBgDQoNCg==