Vẽ biểu đồ

Đồ thị được vẽ theo code sau:

# Load necessary library
library(ggplot2)
library(ggthemes)
library(plotly)
library(grid)
library(dplyr)
# Define the data
virus_names <- c("Hantavirus", "Tularemia", "Dengue", "Ebola", "E. coli",
                 "Tuberculosis", "Salmonella", "Vaccinia", "Brucella")
my_number <- c(6, 7, 7, 9, 11, 15, 17, 18, 54)
data_bar <- data.frame(virus = virus_names, n = my_number)

# Define the grouping variable based on the values of n
data_bar$group <- cut(data_bar$n, breaks = c(0, 10, 20, Inf ),
                      labels = c( "Low", "Medium","High"))

# Define the colors for each group
colors <- c("#EBB434", "#3EBCD2", "#006BA2")

# Create the bar graph
ggplot(data = data_bar, aes(x = n, y = reorder(virus, n), fill = group)) +
  geom_vline(xintercept = c(10, 20), linetype = "dashed", color = "black") +
  geom_bar(stat = "identity", width = 0.8) +
  scale_x_continuous(breaks = seq(0, 55, by = 10), position = "top") +
  scale_fill_manual(values = c("#EBB434", "#3EBCD2", "#006BA2"), 
                    labels = c("Low", "Medium", "High"), 
                    guide = guide_legend(reverse = TRUE))  +
  theme_economist() +
  theme(plot.title = element_text(family = "Econ Sans",hjust = 0.5, vjust = .5, size = 16, face = "bold"),
        plot.subtitle = element_text(margin = margin(b = 10), hjust = 0.5, vjust = .7,  face = "italic"),
        axis.title = element_blank(),
        axis.text.y = element_text(size = 11),
        axis.text.x = element_text(size = 11),
        axis.line = element_line(color = "black"),
        axis.title.x = element_blank(),
        panel.grid.major = element_line(color = "#d5e4eb"),
        panel.grid.minor = element_blank(),
        panel.background = element_rect(fill = "#d5e4eb"),
        panel.border = element_blank(),
        legend.position =  c(0.85, 0.45),
        legend.background = element_rect(fill = "#d5e4eb"),
        legend.title = element_blank(),
        legend.text = element_text(size = 11),
        legend.key.height = unit(0.5, "cm"),
        plot.caption = element_text(face = "italic", size = 12, hjust = 1)
  ) +
  # ggtitle("Popularity of viruses (Number of cases)") +
  labs(
    title = "Popularity of viruses (Number of cases)",
    subtitle = "Source: World Health Organization",
    caption = "Designer: Dai Duong", fontface = "italic") +
  coord_cartesian(xlim = c(0, 60)) +
  geom_text(aes(label = n), hjust = 1.2, vjust = 0.4, color = "yellow",fontface = "bold",
            data = data_bar %>% group_by(group) %>% slice_max(n), 
            show.legend = FALSE) -> p
red_icon <- "#ed1c24"
p
grid.rect(x = 0.035, y = 1, width = 0.05, height = 0.008*2.5, just = c("left", "top"), gp = gpar(fill = red_icon, col = red_icon))

Sử dụng Plotty

Kết quả không đẹp lắm.

ggplotly(p)

.

LS0tDQp0aXRsZTogIkJhaSB0YXAgNCAtIERhaSBEdW9uZyINCmF1dGhvcjogIkRhaSBEdW9uZyINCmRhdGU6ICIyMDIzLTAzLTI1Ig0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZG93bmxvYWQ6IHllcyAgI2NobyBwaMOpcCBkb3dubG9hZCB0aMOsIGdoaSB5ZXMNCiAgICBoaWdobGlnaHQ6IHplbmJ1cm4NCiAgICB0aGVtZTogZmxhdGx5DQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6IHllcw0KICB3b3JkX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQogIHBkZl9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KLS0tDQoNCmBgYHtyIHNldHVwLGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFLCBjYWNoZSA9IFRSVUUpICNlY2hvID0gVFJVRSA6IHZp4bq/dCB0aOG6vyBuw6BvIHRow6wgY29kZSBoaeG7h24gcmEgbmjGsCB0aOG6vzsgbuG6v3UgZWNobyA9IEZBTFNFIHRow6wgY2jhu4kgaGnhu4duIGvhur90IHF14bqjIHbDoCBraMO0bmcgaGnhu4duIGNvZGU7IHdhcm5pbmcgPSBGQUxTRSB0aMOsIHThuq90IGPDoWMgd2FybmluZw0KYGBgDQoNCiMgVuG6vSBiaeG7g3UgxJHhu5MNCg0KxJDhu5MgdGjhu4sgxJHGsOG7o2MgduG6vSB0aGVvIGNvZGUgc2F1Og0KDQoNCmBgYHtyfSANCiMgTG9hZCBuZWNlc3NhcnkgbGlicmFyeQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShnZ3RoZW1lcykNCmxpYnJhcnkocGxvdGx5KQ0KbGlicmFyeShncmlkKQ0KbGlicmFyeShkcGx5cikNCiMgRGVmaW5lIHRoZSBkYXRhDQp2aXJ1c19uYW1lcyA8LSBjKCJIYW50YXZpcnVzIiwgIlR1bGFyZW1pYSIsICJEZW5ndWUiLCAiRWJvbGEiLCAiRS4gY29saSIsDQogICAgICAgICAgICAgICAgICJUdWJlcmN1bG9zaXMiLCAiU2FsbW9uZWxsYSIsICJWYWNjaW5pYSIsICJCcnVjZWxsYSIpDQpteV9udW1iZXIgPC0gYyg2LCA3LCA3LCA5LCAxMSwgMTUsIDE3LCAxOCwgNTQpDQpkYXRhX2JhciA8LSBkYXRhLmZyYW1lKHZpcnVzID0gdmlydXNfbmFtZXMsIG4gPSBteV9udW1iZXIpDQoNCiMgRGVmaW5lIHRoZSBncm91cGluZyB2YXJpYWJsZSBiYXNlZCBvbiB0aGUgdmFsdWVzIG9mIG4NCmRhdGFfYmFyJGdyb3VwIDwtIGN1dChkYXRhX2JhciRuLCBicmVha3MgPSBjKDAsIDEwLCAyMCwgSW5mICksDQogICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYyggIkxvdyIsICJNZWRpdW0iLCJIaWdoIikpDQoNCiMgRGVmaW5lIHRoZSBjb2xvcnMgZm9yIGVhY2ggZ3JvdXANCmNvbG9ycyA8LSBjKCIjRUJCNDM0IiwgIiMzRUJDRDIiLCAiIzAwNkJBMiIpDQoNCiMgQ3JlYXRlIHRoZSBiYXIgZ3JhcGgNCmdncGxvdChkYXRhID0gZGF0YV9iYXIsIGFlcyh4ID0gbiwgeSA9IHJlb3JkZXIodmlydXMsIG4pLCBmaWxsID0gZ3JvdXApKSArDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IGMoMTAsIDIwKSwgbGluZXR5cGUgPSAiZGFzaGVkIiwgY29sb3IgPSAiYmxhY2siKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCB3aWR0aCA9IDAuOCkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDU1LCBieSA9IDEwKSwgcG9zaXRpb24gPSAidG9wIikgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjRUJCNDM0IiwgIiMzRUJDRDIiLCAiIzAwNkJBMiIpLCANCiAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiTG93IiwgIk1lZGl1bSIsICJIaWdoIiksIA0KICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2xlZ2VuZChyZXZlcnNlID0gVFJVRSkpICArDQogIHRoZW1lX2Vjb25vbWlzdCgpICsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiRWNvbiBTYW5zIixoanVzdCA9IDAuNSwgdmp1c3QgPSAuNSwgc2l6ZSA9IDE2LCBmYWNlID0gImJvbGQiKSwNCiAgICAgICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChtYXJnaW4gPSBtYXJnaW4oYiA9IDEwKSwgaGp1c3QgPSAwLjUsIHZqdXN0ID0gLjcsICBmYWNlID0gIml0YWxpYyIpLA0KICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTEpLA0KICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTEpLA0KICAgICAgICBheGlzLmxpbmUgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKGNvbG9yID0gIiNkNWU0ZWIiKSwNCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIiNkNWU0ZWIiKSwNCiAgICAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAgYygwLjg1LCAwLjQ1KSwNCiAgICAgICAgbGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICIjZDVlNGViIiksDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDExKSwNCiAgICAgICAgbGVnZW5kLmtleS5oZWlnaHQgPSB1bml0KDAuNSwgImNtIiksDQogICAgICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChmYWNlID0gIml0YWxpYyIsIHNpemUgPSAxMiwgaGp1c3QgPSAxKQ0KICApICsNCiAgIyBnZ3RpdGxlKCJQb3B1bGFyaXR5IG9mIHZpcnVzZXMgKE51bWJlciBvZiBjYXNlcykiKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiUG9wdWxhcml0eSBvZiB2aXJ1c2VzIChOdW1iZXIgb2YgY2FzZXMpIiwNCiAgICBzdWJ0aXRsZSA9ICJTb3VyY2U6IFdvcmxkIEhlYWx0aCBPcmdhbml6YXRpb24iLA0KICAgIGNhcHRpb24gPSAiRGVzaWduZXI6IERhaSBEdW9uZyIsIGZvbnRmYWNlID0gIml0YWxpYyIpICsNCiAgY29vcmRfY2FydGVzaWFuKHhsaW0gPSBjKDAsIDYwKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gbiksIGhqdXN0ID0gMS4yLCB2anVzdCA9IDAuNCwgY29sb3IgPSAieWVsbG93Iixmb250ZmFjZSA9ICJib2xkIiwNCiAgICAgICAgICAgIGRhdGEgPSBkYXRhX2JhciAlPiUgZ3JvdXBfYnkoZ3JvdXApICU+JSBzbGljZV9tYXgobiksIA0KICAgICAgICAgICAgc2hvdy5sZWdlbmQgPSBGQUxTRSkgLT4gcA0KcmVkX2ljb24gPC0gIiNlZDFjMjQiDQpwDQpncmlkLnJlY3QoeCA9IDAuMDM1LCB5ID0gMSwgd2lkdGggPSAwLjA1LCBoZWlnaHQgPSAwLjAwOCoyLjUsIGp1c3QgPSBjKCJsZWZ0IiwgInRvcCIpLCBncCA9IGdwYXIoZmlsbCA9IHJlZF9pY29uLCBjb2wgPSByZWRfaWNvbikpDQoNCg0KYGBgDQoNCiMjIFPhu60gZOG7pW5nIFBsb3R0eQ0KS+G6v3QgcXXhuqMga2jDtG5nIMSR4bq5cCBs4bqvbS4NCg0KYGBge3J9DQpnZ3Bsb3RseShwKQ0KDQpgYGANCi4NCg0KDQo=