Есть два способа, которыми я знаю, чтобы раскрасить точки графика по факторам, а затем автоматически создать соответствующую легенду.Я приведу примеры обоих:
- Использование ggplot2 (как правило, проще)
- Использование встроенных в R функций построения графиков в сочетании с функцией
colorRampPallete
(хитрее, но многие предпочитают/ Необходимы встроенные средства построения R)
Для обоих примеров я буду использовать набор данных ggplot2 diamonds.Мы будем использовать числовые столбцы diamond$carat
и diamond$price
, а также фактор / категориальный столбец diamond$color
.Вы можете загрузить набор данных с помощью следующего кода, если у вас установлен ggplot2:
library(ggplot2)
data(diamonds)
Использование ggplot2 и qplot
Это один вкладыш.Ключевым моментом здесь является предоставление qplot
фактора, который вы хотите закрасить в качестве аргумента color
.qplot
создаст для вас легенду по умолчанию.
qplot(
x = carat,
y = price,
data = diamonds,
color = diamonds$color # color by factor color (I know, confusing)
)
Ваш вывод должен выглядеть следующим образом:
Использование встроенных в R функциональных возможностей сюжета
Использование встроенной в R функциональности сюжета для раскраски сюжета с помощью фактора и связанной легенды - это четырехэтапный процесс, и он немного более технический, чем использование ggplot2.
Во-первых, мы будемсделать colorRampPallete
функцию.colorRampPallete()
возвращает новую функцию, которая будет генерировать список цветов.В приведенном ниже фрагменте вызова color_pallet_function(5)
вернет список из 5 цветов по шкале от красного до оранжевого или синего:
color_pallete_function <- colorRampPalette(
colors = c("red", "orange", "blue"),
space = "Lab" # Option used when colors do not represent a quantitative scale
)
Во-вторых, нам нужно составить список цветов, состоящий ровно из одного цвета.за бриллиантовый цвет.Это отображение, которое мы будем использовать как для назначения цветов отдельным точкам сюжета, так и для создания нашей легенды.
num_colors <- nlevels(diamonds$color)
diamond_color_colors <- color_pallet_function(num_colors)
В-третьих, мы создаем наш сюжет.Это делается точно так же, как и любой другой график, который вы, вероятно, сделали, за исключением того, что мы ссылаемся на список цветов, который мы создали, в качестве аргумента col
.Пока мы всегда используем один и тот же список, наше сопоставление цветов и diamond$colors
будет одинаковым для всего нашего сценария R.
plot(
x = diamonds$carat,
y = diamonds$price,
xlab = "Carat",
ylab = "Price",
pch = 20, # solid dots increase the readability of this data plot
col = diamond_color_colors[diamonds$color]
)
В-четвертых, наконец, мы добавляем нашу легенду, чтобы кто-то, читающий наш график, могчетко просмотрите соответствие между точечными цветами графика и реальными цветами ромба.
legend(
x ="topleft",
legend = paste("Color", levels(diamonds$color)), # for readability of legend
col = diamond_color_colors,
pch = 19, # same as pch=20, just smaller
cex = .7 # scale the legend to look attractively sized
)
Ваш вывод должен выглядеть следующим образом:
Изящно, верно?