2013-11-17 2 views
0

Я пытаюсь отобразить различия модели/общности в местах в космосе. У меня есть цвет, сопоставленный с diff, но я также хотел бы сопоставить размер с diff. Я сейчас сопоставляю размер с абс (diff), но он создает две разные легенды, которые я хотел бы объединить. размер отображения для diff создает небольшие точки для отрицательных значений и больших точек для положительных значений, но я действительно хочу только величину, представленную для более/менее прогнозов. В случае, если это имеет значение, мне также хотелось бы, чтобы шкалы были дискретными. БлагодаряРасходящийся размер шкалы ggplot2

Некоторые тестовые данные:

so.df=data.frame(lat=runif(50,33,43),long=runif(50,-112,-104),diff=runif(50,-2,2)) 
    ggplot()+ 
     geom_point(data=so.df,aes(x=long,y=lat,color=diff,size=abs(diff)),alpha=0.8)+ 
scale_color_gradient2(low='red',mid='white',high='blue',limits=c(-0.6,0.6),breaks=c(-0.6,-0.4,-0.2,-0.1,0,0.1,0.2,0.6))+ 
     guides(color=guide_legend('SWE Differences (m)'),size=guide_legend('SWE Difference\nMagnitudes (m)'))+ 
     coord_cartesian(xlim=c(-112.5,-104.25),ylim=c(33,44))+ 
     theme_bw() 

EDIT: использовать дискретную шкалу цвета я использую следующее (открыт для предложений)

so.df$cuts=cut_interval(so.df$diff,length=0.15) 
ggplot()+ 
    geom_path(data=states,aes(x=long,y=lat,group=group),color='grey10')+ 
    geom_point(data=so.df,aes(x=long,y=lat,color=cuts,size=abs(diff)),alpha=0.8)+ 
    coord_cartesian(xlim=c(-112.5,-104.25),ylim=c(33,44))+ 
    scale_colour_brewer(type='div',palette='RdYlBu')+ 
    guides(color=guide_legend('SWE Differences (m)'),size=guide_legend('SWE Difference\nMagnitudes (m))+ 
    theme_bw() 

ответ

1

Если сопоставить размеры в столбец сокращений и используйте scale_size_manual, вы можете получить желаемый размер шкалы.

ggplot() + geom_point(data=so.df,aes(x=long,y=lat,size=cuts,color=cuts)) 
+ scale_size_manual(values = 
c(8,6,4,2,1,2,4,6,8),guide="legend") + 
coord_cartesian(xlim=c(-112.5,-104.25),ylim=c(33,44)) + 
scale_colour_brewer(type='div',palette='RdBu') 
+0

слишком плохо, его нужно масштабировать вручную. благодаря! – Dominik

+0

Еще одна вещь, над которой я работаю - как использовать большую палитру цветов? палитры пивоваров имеют только 11 цветов, но я бы хотел сократить свои данные с фиксированным интервалом, который потребует более 11 цветов. Я пытаюсь 'colpal = colorRampPalette (brewer.pal (11, 'RdYlBu'))' с 'scale_colour_discrete (palette = colpal)', но всегда получает ошибку в as.character (x $ label): не может скрывать тип закрытия 'to vector of type' character ' – Dominik

+0

Это работает для цветов: 'scale_color_manual (values ​​= colorRampPalette (brewer.pal (9," RdYlBu ")) (length (unique (so.df $ cuts))))' – Dominik

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