Автоматически определять правильное количество значений colorRampPalette, необходимых - PullRequest
0 голосов
/ 04 июля 2018

Относится к этому вопросу .

Если я создаю градиент, используя colorRampPalette, есть ли способ, чтобы ggplot2 автоматически определял количество цветов, которое ему потребуется от этого градиента?

В приведенном ниже примере я должен указать 3 цвета, которые будут необходимы для значений 3 cyl. Это требует, чтобы я знал заранее, что мне понадобится это много. Мне бы не хотелось указывать его, чтобы ggplot автоматически определял номер, который ему нужен.

myColRamp <- colorRampPalette(c('#a0e2f2', '#27bce1'))
ggplot(mtcars, aes(x = wt, y = mpg, col = as.factor(cyl))) +
  geom_point(size = 3) +
  scale_colour_manual(values = myColRamp(3)) # How to avoid having to specify 3?

Я также открыт для опций, которые не используют colorRampPalette, но достигают той же функциональности.

1 Ответ

0 голосов
/ 04 июля 2018

Я вижу два варианта здесь. Тот, который требует небольшой настройки. Тот, который имеет больше кода, но не требует настройки.

Вариант 1 - Определить количество уникальных факторов по вашей конкретной переменной

Просто используйте функции length и unique, чтобы определить количество факторов в cyl.

values = myColRamp(length(unique(mtcars$cyl))

Вариант 2 - Постройте график и посмотрите, сколько цветов он использовал

Если вы не хотите указывать имя переменной и хотите что-то более общее, мы можем построить график и посмотреть, сколько цветов использовал ggplot, а затем построить его снова.

Для этого мы также должны сохранить наш график как объект, назовем этот объект графика p.

p <- ggplot(mtcars, aes(x = wt, y = mpg, col = as.factor(cyl))) +
     geom_point(size = 3)
     #Notice I haven't set the colour option this time


p_built <- ggplot_build(p) #This builds the plot and saves the data based on
                           #the plot, so x data is called 'x', y is called 'y',
                           #and importantly in this case, colour is called the
                           #generic 'colour'.

#Now we can fish out that data and check how many colour levels were used
num_colours <- length(unique(p_built$data[[1]]$colour))

#Now we know how many colours were used, we can add the colour scale to our plot
p <- p + scale_colour_manual(values = myColRamp(num_colours))

Теперь либо просто позвоните p или print(p), в зависимости от того, как вы его используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...