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
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
Biểu đồ dạng đơn giản nhất
ggplot(iris, aes(Species, Sepal.Length)) + geom_beeswarm()

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)

Chỉnh cỡ to hơn
ggplot(iris, aes(Species, Sepal.Length, col = Species)) + geom_beeswarm(size = 3, cex = 3)

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)

Thêm biểu đồ boxplot vào
ggplot(iris, aes(Species, Sepal.Length, col = Species)) +
geom_boxplot()+
geom_beeswarm()

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==