Обложка канала

R4marketing | канал Алексея Селезнёва | Язык R

Автор канала Алексей Селезнёв, руководитель отдела аналитики в Netpeak, автор R пакетов: ryandexdirect, rfacebookstat и др. В канале публикуются статьи, доклады, новости, заметки по языку R.

R4marketing | канал Алексея Селезнёва | Язык R

3 года назад
Открыть в
colouR: Получить палитру проанализировав цвета изображения Некоторое время назад я рассказывал о пакетах с наборами палитр, вдохновлённых национальными парками и художественного Метропόлитен-музея, почитать о них можно тут и тут. На днях мне на глаза попался пакет colouR, который позволяет вам проанализировать любое изображение в форматах jpg или png, из локального файла или по ссылке, и получить его палитру. Основной функцией пакета является getTopCol(), которая имеет следующий набор аргументов: ● path - Путь к локальному файлу изображения или URL ● n - Количество цветов, которое необходимо получить в палитре ● exclude - Позволяет исключить из палитры большинство оттенков чёрного и белого ● sig - Целое число, позволяет округлять количество знаков после запятой, в определении какую часть изображения занимает цвет ● avgCols - Логическое TRUE / FALSE, надо ли усреднять цвета в группы ● n_clusters - Количество кластеров, используемых для группировки цветов, имеет смысл только при avgCols = TRUE 1. Пример анализа цветовой палитры изображения, и использования полученной палитры в `ggplot2` Ниже пример анализа цветовой палитры изображения из интернета. само изображение и результат анализа его палитры вы видите на изображении к посту.
library(colouR)
library(ggplot2)
library(dplyr)

# Анализ палитры изображение с усреднением цветов
top10 <- getTopCol(
  path = "https://static.make.ua/catalog/35/city-1491__1557487852__300h.jpg",
  n          = 5,
  avgCols    = T,
  n_clusters = 10,
  exclude    = T, 
)

# Сортируем цвета
top10$hex <- factor(top10$avg_color, levels = top10$avg_color)

# Выводим график по цветам
ggplot(top10, aes(x = hex, y = freq)) +
  geom_bar(stat = 'identity', fill = top10$hex) +
  theme_dark() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  xlab('HEX colour code') +
  ylab('Frequency')

# Выводим палитру
plotPalette(top10$avg_color)

В данном случае, мы группируем (avgCols = TRUE) все полученные из изображения цвета в 10 групп (
n_clusters = 10
), говорим исключить все известные пакету оттенки чёрного и белого (
exclude    = TRUE
), и взять 5 из полученных групп цветов, которые заполняют большую часть изображения (
n = 5
). 2. Используем полученную палитру в ggplot2 Пакет colouR включает две дополнительные функции для удобной совместимости с ggplot2: ● scaleFill() scaleColor() Но, эти функции судя по всему работают только с встроенными в сам пакет палитрами, а собственные палитры вы можете использовать традиционным способом, передав их в аргументы функций scale_*():
# Используем полученную палитру в ggplot2
# подготовка данных
manufacturer_counts <- mpg %>%
  group_by(manufacturer) %>%
  summarize(count = n()) %>% 
  head(5)

mpgsort <- manufacturer_counts[order(manufacturer_counts$count, decreasing = TRUE), ]

mpgsort$manufacturer <-  factor(mpgsort$manufacturer, levels = mpgsort$manufacturer)

# Строим график с использованием полученной палитры
ggplot(mpgsort, aes(x = manufacturer, y= count, fill = manufacturer)) +
  geom_bar(stat = 'identity') +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_fill_manual(values = top10$avg_color)

Читайте так же: - NatParksPalettes: Пакет цветовой палитры, вдохновленный национальными парками - Палитры в R - Темы для ggplot2 основанные на телешоу Полезные ссылки: - Сайт пакета colouR #заметки_по_R