Ifelse условные цвета ggplot2 [duplicate]

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

if (!name) {
  name = async1();
}
async2(name);

. В итоге вы пройдете через async1; проверьте, не определено ли name или нет, и соответственно вызовите обратный вызов.

async1(name, callback) {
  if (name)
    callback(name)
  else {
    doSomething(callback)
  }
}

async1(name, async2)

Хотя в в порядке хорошо , это раздражает, когда у вас много подобных случаев и обработка ошибок.

Fibers помогает в решении проблемы.

var Fiber = require('fibers')

function async1(container) {
  var current = Fiber.current
  var result
  doSomething(function(name) {
    result = name
    fiber.run()
  })
  Fiber.yield()
  return result
}

Fiber(function() {
  var name
  if (!name) {
    name = async1()
  }
  async2(name)
  // Make any number of async calls from here
}

Вы можете проверить проект здесь .

3
задан user3761369 19 February 2015 в 16:09
поделиться

2 ответа

Я не думаю, что вы можете явно указать цвета в aes; вам нужно сделать это в scale_fill_manual, как в следующем примере:

ggplot(dist.x, aes(x = sim_con)) +
  geom_histogram(colour = "black", binwidth = .01,aes(fill=(sim_con==1.55))) + 
  scale_fill_manual(values=c('TRUE'='darkgreen','FALSE'='firebrick')) +
  theme(legend.position="none")

enter image description here [/g0]

3
ответ дан Marat Talipov 23 August 2018 в 17:04
поделиться

Вы так близки!

В вашем коде выше ggplot интерпретирует вашу заливку как переменные в вашем наборе данных darkgreen и factor firebrick - и не имеет никакого способа зная, что эти метки являются цветами , а не, скажем, названиями видов животных.

Если вы добавите scale_fill_identity() в конец вашего графика, как показано ниже, он будет интерпретировать эти строки в виде цветов (идентификатор ), а не как функции данных.

Одно из преимуществ этого подхода - отличный ответ от превосходного марата выше: если у вас сложный сюжет (скажем, , используя geom_segment(), со стартовым значением и конечным значением для каждого наблюдения), и вы хотите применить две заполняющие шкалы на своих данных (одна шкала для начального значения и другая шкала для конечного значения), вы можете выполнить условное логики на этапе обработки данных, затем используйте scale_fill_identity() для соответствующего цветного наблюдения.

ggplot(
  data=dist.x,
  aes(
    x = sim_con,
    fill = ifelse(dist.x$sim_con==1.55, "darkgreen", "firebrick")
  )
) +
geom_histogram(
  colour = "black",
  binwidth = .01
) +
theme(legend.position="none") +
scale_fill_identity()
5
ответ дан Andrew 23 August 2018 в 17:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: