Есть два известных мне способа покрасить точки графика по фактору, а затем автоматически создать соответствующую легенду. Я приведу примеры обоих:
- Использование 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)
)
Ваш результат должен выглядеть так: ![qplot вывод, раскрашенный по коэффициенту алмаз $ color](https://i.stack.imgur.com /AFMDO.png )
Использование встроенных функций построения графиков 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
)
Ваш результат должен выглядеть так: ![стандартный вывод графика R, раскрашенный по коэффициенту ромбовидный $ color](https://i.stack.imgur.com /aUh5D.png )
Отлично, правда?
person
Toby
schedule
15.10.2015
library(ggplot2); qplot(Sepal.Length, Sepal.Width, data=iris, colour=Species)
будет полезно - person Ben Bolker   schedule 11.10.2011