Подобно гистограмме, диаграмма леденцов полезна для сравнения количественных значений категориальной переменной. Однако вместо столбцов диаграмма леденцов использует линии с кружками на концах для представления количественных значений.
Диаграмма-леденец — отличный способ сравнить несколько категорий, сохраняя при этом минимальное количество цвета на диаграмме и привлекая внимание читателя к фактическим значениям на диаграмме, а не к линиям или другой графике на диаграмме. Многие люди также считают леденцовую диаграмму эстетически приятной.
В этом уроке мы рассмотрим необходимые шаги для создания следующей леденцовой диаграммы:

Пример: Lollipop Chart в R
В этом примере мы будем использовать встроенный набор данных R mtcars :
#view first six rows of *mtcars*head(mtcars)
набор данных mtcars в R
Базовая диаграмма леденцов
Следующий код иллюстрирует, какчтобы создать диаграмму леденцов для сравнения миль на галлон (миль на галлон) для каждого из 32 автомобилей в наборе данных.
Имена автомобилей определены в именах строк набора данных, поэтому сначала мы создаем в наборе данных новый столбец, содержащий эти имена строк.
Затем мы загружаем библиотеку ggplot2 , которую будем использовать для фактического создания леденцовой диаграммы.
С ggplot2 мы используем geom_segment для создания линий на графике. Мы определяем начальное и конечное значения x как 0 и mpg соответственно. Мы определяем начальное и конечное значения y как car :
#create new column for car names
mtcars$car <- row.names(mtcars)
#load *ggplot2* library
library(ggplot2)
#create lollipop chart
ggplot(mtcars, aes(x = mpg, y = car)) +
geom_segment(aes(x = 0, y = car, xend = mpg, yend = car)) +
geom_point()

Добавление ярлыков
Мы также можем добавить метки к диаграмме, используя аргументы label и geom_text :
ggplot(mtcars, aes(x = mpg, y = car, label = mpg )) +
geom_segment(aes(x = 0, y = car, xend = mpg, yend = car)) +
geom_point() +
geom_text(nudge_x = 1.5)

Или вместо того, чтобы размещать метки в конце каждой строки, мы могли бы разместить их внутри самих кругов, увеличив круги и изменив цвет шрифта метки на белый:
ggplot(mtcars, aes(x = mpg, y = car, label = mpg)) +
geom_segment(aes(x = 0, y = car, xend = mpg, yend = car)) +
geom_point( size = 7 ) +
geom_text( color = 'white', size = 2 )

Сравнение значений со средним
Мы также можем использовать диаграмму леденцов для сравнения значений с определенным числом. Например, мы можем найти среднее значение mpg в наборе данных, а затем сравнить mpg каждого автомобиля со средним значением.
Следующий код использует библиотеку dplyr для нахождения среднего значения расхода на галлон , а затем упорядочивает автомобили по возрастанию расхода на галлон :
#load library *dplyr*library(dplyr)
#find mean value of *mpg* and arrange cars in order *by mpg* descending
mtcars_new <- mtcars %>%
arrange(mpg) %>%
mutate(mean_mpg = mean(mpg),
flag = ifelse(mpg - mean_mpg > 0, TRUE, FALSE),
car = factor(car, levels = .$car))
#view first six rows of *mtcars_new*head(mtcars_new)

Затем следующий код создает леденцовую диаграмму, определяя цвет круга равным значению флага (в данном случае ИСТИНА или ЛОЖЬ), а начальное значение x для каждого автомобиля равно среднему значению миль на галлон..
ggplot(mtcars_new, aes(x = mpg, y = car, color = flag )) +
geom_segment(aes( x = mean_mpg , y = car, xend = mpg, yend = car)) +
geom_point()

Используя этот тип цветовой схемы, мы можем легко определить, какие автомобили имеют расход на галлон меньше и больше среднего для набора данных.
По умолчанию R использует синий и красный цвета для диаграммы. Однако мы можем использовать любые цвета, какие захотим, используя аргумент scale_color_manual :
ggplot(mtcars_new, aes(x = mpg, y = car, color = flag)) +
geom_segment(aes(x = mean_mpg, y = car, xend = mpg, yend = car)) +
geom_point() +
scale_colour_manual(values = c("purple", "blue"))

Изменение эстетики диаграммы
Наконец, мы можем использовать широкие возможности ggplot2 для дальнейшего изменения внешнего вида диаграммы и создания профессионально выглядящего конечного продукта:
ggplot(mtcars_new, aes(x = mpg, y = car, color = flag)) +
geom_segment(aes(x = mean_mpg, y = car, xend = mpg, yend = car), color = "grey") +
geom_point() +
annotate("text", x = 27, y = 20, label = "Above Average", color = "#00BFC4", size = 3, hjust = -0.1, vjust = .75) +
annotate("text", x = 27, y = 17, label = "Below Average", color = "#F8766D", size = 3, hjust = -0.1, vjust = -.1) +
geom_segment(aes(x = 26.5, xend = 26.5, y = 19, yend = 23),
arrow = arrow(length = unit(0.2,"cm")), color = "#00BFC4") +
geom_segment(aes(x = 26.5, xend = 26.5 , y = 18, yend = 14),
arrow = arrow(length = unit(0.2,"cm")), color = "#F8766D") +
labs(title = "Miles per Gallon by Car") +
theme_minimal() +
theme(axis.title = element_blank(),
panel.grid.minor = element_blank(),
legend.position = "none",
text = element_text(family = "Georgia"),
axis.text.y = element_text(size = 8),
plot.title = element_text(size = 20, margin = margin(b = 10), hjust = 0),
plot.subtitle = element_text(size = 12, color = "darkslategrey", margin = margin(b = 25, l = -25)),
plot.caption = element_text(size = 8, margin = margin(t = 10), color = "grey70", hjust = 0))
