Если я правильно понял, единственное, чего не хватает, - это ручной выбор цветов, и в этом случае тот факт, что цвета происходят из квадрантов, является случайным. В противном случае, я боюсь, что что-то упустил.
Вы можете указать цветовую гамму, как и любую другую эстетику. В частности, scale_color_manual позволяет вам задавать вектор строк, определяющий используемые цвета.
Таким образом, вы можете добавить в конце:
scale_color_manual(values = c('orange', 'yellow', 'black', 'grey'))
Вы хотите отобразить определенный цвет для каждого возможного уровня, вы можете дать ему названный вектор:
scale_color_manual(values = c(Q4 = 'orange', Q2 = 'yellow', Q1 = 'black', Q3 = 'grey'))
Никто не объясняет это лучше, чем Sutter
http://www.ddj.com/architect/184401544
Короткая версия
Стандарт C++ требует что unexpected()
функция вызвана, если функция пытается выдать исключение, которое не находится в его списке исключений. Краткое описание этого из MSDN здесь: http://msdn.microsoft.com/en-us/library/awbt5tew (По сравнению с 80) .aspx
Большинство компиляторов на самом деле не поддерживает эту функцию C++.
void do_something() throw();
Это - гарантия со стороны реализатора, что функция никогда не будет выдавать исключение. Именно это клиент функции может ожидать. Однако это также означает, что любое исключение, сгенерированное где-нибудь в функции, обработано и не повторно брошенное назад в родителя do_something()
. Позор нем, кто пере -throw
- eth из, поскольку нет ничего, которое это будет мешать ему бросить. Это вызвано тем, что, бросая из функции с пустой спецификацией исключения эквивалентно выдаче исключения, не упомянутого в спецификации и создании std::unexpected()
должен ожидаться сопровождаемый завершением программы.
BTW: общепринятое определение сильной гарантии исключения: Если общедоступная операция перестала работать по некоторым причинам, исключение выдается, и состояние объекта оставлено без изменений (атомарная операция).
В основном, путем объявления функции с throw();
Вы говорите компилятору, что Вы на сто процентов уверены, что функция не собирается выдавать любые исключения, позволяя компилятору выполнить некоторую оптимизацию. Если Ваша функция выдает исключение так или иначе, Вы в беде, так как она, скорее всего, приводит к неопределенному поведению.