ggplot2 и R - применение пользовательских цветов к многогрупповой гистограмме в длинном формате - PullRequest
0 голосов
/ 30 апреля 2020

Я сделал гистограмму, которая показывает распределение лидарных возвратов по высоте для трех проведенных мной лидарных сканирований.

Я конвертировал свои данные в длинный формат:

  • один столбец с именем 'value', описывающий положение z каждой точки
  • один столбец с именем 'переменная', содержащая название каждой группы сканирования

На прилагаемом изображении вы можете увидеть гистограммы трех моих групп сканирования. В настоящее время я использую viridis для раскраски гистограммы по группе сканирования (ie. Имя сканирования в столбце переменной). Однако я хочу сопоставить цвета на графике с цветами, которые у меня уже есть.

Как я могу это сделать?

В гексолах мне бы хотелось, чтобы цвета каждой из трех моих гистограмм являются:

lightgreen = "#62FE96"
lightred = "#FE206B"
darkpurple = "#62278E"

Ссылка на мои данные - 'плотность2'

enter image description here

Мой текущий код :

library(tidyverse)
library(viridisLite)
library(viridis)

# histogram
p <- density2 %>%
  ggplot( aes(x=value,color = variable, show.legend = FALSE)) +
  geom_histogram(binwidth = 1, alpha = 0.5, position="identity") +
  scale_color_viridis(discrete =TRUE) +
  scale_fill_viridis(discrete=TRUE) +
  theme_bw() +
  labs(fill="") +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())

p + scale_y_sqrt() + theme(legend.position="none") + labs(y = "data pts", x = "elevation (m)")

Любая помощь будет наиболее ценится!

1 Ответ

0 голосов
/ 01 мая 2020

Удалите строки scale_color_viridis и scale_fill_viridis - они применяют цветовую шкалу Viridis. Заменить на scale_fill_manual(values = c(lightgreen, lightred, darkpurple)). А в вашей эстетике c отображение замените color = variable на fill = variable. Для гистограммы color обозначает цвет линий, очерчивающих каждый столбец, а fill обозначает цвет, которым заполнен каждый столбец.

Это должно оставить вас с:

p <- density2 %>%
  ggplot(aes(x = value, fill = variable)) +
  geom_histogram(binwidth = 1, alpha = 0.5, position = "identity") +
  scale_fill_manual(values = c(lightgreen, lightred, darkpurple)) +
  theme_bw() +
  labs(fill = "") +
  theme(panel.grid = element_blank())

p + scale_y_sqrt() + 
  theme(legend.position = "none") +
  labs(y = "data pts", x = "elevation (m)")

Я также провел другую уборку. show.legend = FALSE не принадлежит внутри aes() - и ваш theme(legend.position = "none") должен позаботиться об этом.

Я не загрузил ваши данные, не сохранил их в своем рабочем каталоге, импортировал их в R и протестировал это код на это. Если вам нужна дополнительная помощь, пожалуйста, опубликуйте небольшое подмножество ваших данных в копируемом / вставляемом формате (например, dput(density2[1:20, ]) для первых 20 строк - выберите подходящее подмножество), и я буду рад протестировать и настроить.

...