Однажды профессор из Чилийского университета сделал предложение моей докторской диссертации. руководителю для совместной работы и разработки привлекательной фигуры для некоторых категорийных данных, т. е. вопросов и ответов по годам. По сути, это были результаты опроса разных стран об осведомленности об устойчивости к противомикробным препаратам (УПП).

В конце концов эта задача легла на меня, и я начал думать, как это сделать. Некоторые научные работы подсказывали мне, какой тип фигуры требуется, например, эта:

Поэтому я решил поработать над похожей фигурой в своем собственном стиле. Вот что я получил:

Что вы думаете? Эта цифра была включена в статью 2022 года. Вы можете проверить ее здесь.

Если вам интересно узнать, как я это сделал, вот поясненный код:

Я работал в ПО R версии 4.0.2 со следующими данными:

Как действовать?

  1. Загрузите нужные мне пакеты.
#Load packages

library(readxl) #load table from an excel sheet
library(ggplot2) #plot and create images
library(scales) #customise legends in the graph

2. Давайте импортируем набор данных с помощью пакета readxl.

#Import dataset
Graph <- read_excel("~/your_filename.xlsx") #change to your Path
View(Graph)

3. Преобразуйте данные в факторы, поскольку мы работаем с категориальными данными.

# Convert to factors
Graph$Year <- as.factor(Graph$Year)
Graph$Status <- as.factor(Graph$Status)
Graph$Question <- as.factor(Graph$Question)

4. Мы используем вспомогательную функцию для переноса строк. По умолчанию: целевая ширина 20 символов. Здесь я работал с 80.

swr = function(string, nwrap=50) {
 paste(strwrap(string, width=nwrap), collapse="\n")
}
swr = Vectorize(swr)

5. Мы применяем вспомогательную функцию к столбцу вопросов.

# Create line breaks in Question
Graph$Question = swr(Graph$Question)

6. И мы построили сюжет. Я добавил несколько слоев к исходному сюжету, чтобы получить оригинальную версию. Подробности можно спросить в комментариях.

# Building a plot

ggplot(Graph, aes (x = %, y = Year, colour = Status)) + geom_point()

#Adding layers
p <- ggplot(Graph, aes(x = %, y = Year, colour = Status))
p <- p + geom_point(aes(shape = Status), size = 3)
p <- p + xlab("% of affirmative questions") + ylab("Year") + 
  theme(plot.title = element_text(hjust = 0.5, lineheight = 1.5))
p <- p + facet_grid(Question~.) +
  theme(strip.text.y = element_text(angle = 0, lineheight = 1.2))
p <- p + geom_line(aes(color = Year), colour = "black")
p <- p + theme(legend.position = "bottom")
p

И вот оно. Я надеюсь, что это может быть полезно для тех, кто борется с тем, как выполнить другой способ отображения категориальных данных.

Лукас.