2015-07-13 2 views
2

Я использую ggplot в R, чтобы построить некоторые данные. То, что я пытаюсь сделать, - это график рассеяния, где фон отличается в разных областях диаграммы. Очень полезный ответ here, который доставит мне большую часть пути, но не полностью.Изменение цвета фона диаграммы ggplot с переменной фактором

Вот пример данных

row.names selectionDirector country  Totals director.rank 
1 268 Alfred Hitchcock Argentina 14  1 
2 269 Alfred Hitchcock Australia 7   3 
3 274 Alfred Hitchcock Canada  10  1 
4 286 Alfred Hitchcock France  18  1 
5 288 Alfred Hitchcock Germany  9   6 
6 296 Alfred Hitchcock Italy  5   3 
7 319 Alfred Hitchcock Spain  21  4 
8 320 Alfred Hitchcock Sweden  4   8 
9 325 Alfred Hitchcock UK   87  1 
10 330 Alfred Hitchcock US   87  1 
11 346 Andrei Tarkovsky Argentina 4   20 
12 347 Andrei Tarkovsky Australia 2   34 
13 355 Andrei Tarkovsky Canada  2   32 
14 365 Andrei Tarkovsky France  2   37 

Мой код:

rects <- data.frame(xstart = seq(-0.5,8.5,1), xend = seq(0.5,9.5,1), col = letters[1:10]) 

ggplot() + 
    geom_rect(data=rects,aes(ymin=0,ymax=80,xmin=xstart,xmax=xend,fill=col)) + 
    geom_point(data=top.votes.by.director.country, aes(x=country, y=director.rank)) + 
    coord_flip() + 
    facet_wrap(~selectionDirector) 

страна является фактором с 10 значениями. director.rank - числовое. Оба они исходят из фрейма данных top.votes.by.director.country. Идея состоит в том, чтобы иметь фон, который отличается для горизонтальной области для каждой страны, чтобы было легче читать, когда я граничу. enter image description here

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

enter image description here

Так было бы цвета фона для каждой страны в граненый графике так же, как выше диаграмма имеет цветной фон для каждого региона.

Проблема в том, что при запуске кода выше я получаю следующую ошибку.

Error: Discrete value supplied to continuous scale

Когда я удаляю участок geom_rect, он отлично работает. Если я переведу geom_rect выше facet_wrap, я получаю график, хотя он перепутался. Если я сделаю только часть geom_rect, я получу предпосылку, которую я хочу примерно.

Я уже пару часов общаюсь с этим и не могу заставить его работать.

+0

Можете ли вы предоставить образец ваших данных? А также пример ожидаемого результата. – Molx

+0

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

ответ

1

Произошла ошибка: вы пытаетесь построить дискретное значение для непрерывной шкалы. В вашем случае вы построили «страну» на «-0,5 ~ 9,5» в x. Вы можете изменить свой порядок печати.

Я использовал «Альфред Хичкок» selectionDirector построить следующий код

rects <- data.frame(xstart = seq(0.5,9.5,1), xend = seq(1.5,10.5,1), 
     col = letters[1:10]) 
ggplot() + geom_point(data=top.votes.by.director.country, 
         aes(x=country, y=director.rank)) + 
      geom_rect(data=rects, aes(ymin=0, ymax=80, xmin=xstart, 
         xmax=xend, fill=col), alpha =0.5) + coord_flip() 

и результат на следующую картинку.

enter image description here

Примечания: Я сместить й прямоугольник на "1" (начинается на 0,5, а не -0,5), и добавить альфа атрибут Rect.

+0

Спасибо вам большое! Это отлично поработало. Я все еще немного неясен в отношении проблемы. Я понимаю, что страна дискретна и «-0,5 ~ 9.5 "нет, но я не совсем понимаю механику того, как страна получает назначение на это, или почему делать это наоборот, также не приводит к ошибке. –

+0

Я не понимал механизм detial. опыт, когда произошла ошибка, его можно было бы решить следующим образом, построив «непрерывный» масштаб, а затем «дискретный» или используя функцию масштабирования (например: [scale_x_discrete] (http://docs.ggplot2.org/current/scale_discrete .html), [scale_x_continous] (http://docs.ggplot2.org/current/scale_continuous.html) ...), чтобы изменить масштаб. – peterchen932

Смежные вопросы