2016-07-21 2 views
3

Я хочу построить положительные и отрицательные значения с их пропорциональным размером, представленным точками, так что в обоих случаях наименьшее значение, а наибольшая - их величина. i e я хочу, чтобы размер отрицательной точки такой, что 0 наименьший, а -5 наибольший, а для положительного значения 0 наименьший, а 5 - самый большой. что-то вроде этого изображенияКак изменить размер в geom_point()

enter image description here

Я знаю, что я могу реверс и сделать это, если это будет только одна переменная, как here.

Но у меня есть два размера.

Мои данные и код приведены ниже.

dput(ddf) 
structure(list(tr = c(0.192833333333335, 0.800378947368421, 2.28270774476556, 
0.586631034482762, 0.217825000000001, -0.773253846153845, -0.459235294117648, 
-0.0706142857142855, -0.24942, 11.1025623422045, -0.871375, -0.929300000000012, 
-5.92639999999999, 3.87432045251869, -3.62026818181818, -2.49045555555556, 
-0.730590000000007, 3.03523157894737, 1.04723333333333, -0.120474999999999 
), Itr = c(0.192833333333335, 0.800378947368421, 2.28270774476556, 
0.586631034482762, 0.217825000000001, NA, NA, NA, NA, 11.1025623422045, 
NA, NA, NA, 3.87432045251869, NA, NA, NA, 3.03523157894737, 1.04723333333333, 
NA), Dtr = c(NA, NA, NA, NA, NA, -0.773253846153845, -0.459235294117648, 
-0.0706142857142855, -0.24942, NA, -0.871375, -0.929300000000012, 
-5.92639999999999, NA, -3.62026818181818, -2.49045555555556, 
-0.730590000000007, NA, NA, -0.120474999999999), td = c("Increasing", 
"Increasing", "Increasing", "Increasing", "Increasing", "Decreasing", 
"Decreasing", "Decreasing", "Decreasing", "Increasing", "Decreasing", 
"Decreasing", "Decreasing", "Increasing", "Decreasing", "Decreasing", 
"Decreasing", "Increasing", "Increasing", "Decreasing"), lat = c(-58.07, 
-57.9, -56.74, -55.22, -55.43, -54.12, -54.62, -54.63, -54.48, 
-54.25, -52.89, -54.05, -49.79, -49.82, -48.83, -48.73, -49.69, 
-49.29, -48.89, -49.37), lon = c(130.82, 131.15, 131.67, 129.14, 
127.71, 127.42, 126.9, 128.43, 128.33, 130.17, 125.77, 128.69, 
123.2, 123.15, 124.05, 123.67, 125.03, 124.91, 124.97, 124.98 
)), .Names = c("tr", "Itr", "Dtr", "td", "lat", "lon"), class = "data.frame", row.names = c(NA, 
20L)) 

Код:

plt<-ggplot()+ 
    geom_point(data = ddf,aes(x = lon, y = lat,size = Itr,shape=td),fill="Blue")+ 
    geom_point(data = ddf,aes(x = lon, y = lat,size = Dtr,shape=td),fill="Green", show.legend = FALSE)+   
    scale_size_continuous(name="IDt",range=c(2,12))+ 
    scale_shape_manual(name= "td",values=c(25,24),labels=c("Decreasing","Increasing")) 
plt 
+0

Помогает ли этот ответ? http://stackoverflow.com/questions/20035359/diverging-size-scale-ggplot2 – Nate

ответ

1

Может быть, я неправильно вопрос, но пример вы дали был:

require(ggplot2) 
plt<-ggplot()+ 
    geom_point(data = ddf,aes(x = lon, y = lat,size = Itr,shape=td),fill="Blue")+ 
    geom_point(data = ddf,aes(x = lon, y = lat,size = Dtr,shape=td),fill="Green", show.legend = FALSE)+   
    scale_size_continuous(name="IDt",range=c(2,12))+ 
    scale_shape_manual(name= "td",values=c(25,24),labels=c("Decreasing","Increasing")) 
plt 

enter image description here

и реверс шкала на основе абсолютное значение:

require(ggplot2) 
plt<-ggplot()+ 
    geom_point(data = ddf,aes(x = lon, y = lat,size = abs(Itr),shape=td),fill="Blue")+ 
    geom_point(data = ddf,aes(x = lon, y = lat,size = abs(Dtr),shape=td),fill="Green", show.legend = FALSE)+   
    scale_size_continuous(name="IDt",range=c(12,2))+ 
    scale_shape_manual(name= "td",values=c(25,24),labels=c("Decreasing","Increasing")) 
plt 

enter image description here

+0

Проблема с вашим ответом заключается в том, что теперь наибольшее положительное значение получило наименьший размер. Вопрос заключается в том, как сделать размер пропорциональным таким образом, чтобы значение, ближайшее к 0, было наименьшим (как по фигуре, так и по легенде) и больше с увеличением или уменьшением величины (как на карте, так и на легенде). – Cirrus

+0

@Cirrus О, ладно. Абсолютное значение тогда. Нет проблем. Я работаю прямо сейчас, но я обновлю это, как только получу перерыв. –

+0

любые предложения относительно легенды в вашем решении? – Cirrus

1

Я думал, что вопрос с просьбой об установлении шкалы расходящегося размера, где значения близких к 0 являются наималейшими и самыми удаленными от 0 являются самыми большими.

Для того, чтобы добиться этого вам нужно изменить ddf включить два новых columes (all_trs сочетает Dtr и Itr и abs_trs только значение abosolute из all_trs, который вы будете использовать для расходящейся шкалы размера):

library(dplyr) library(magrittr) 
ddf %<>% mutate(all_trs = ifelse(td == "Increasing", Itr, Dtr), abs_trs =abs(all_trs)) 

вы могли бы, очевидно, построить этот базовый путь ddf$all_trs <- ifelse(...) но обжигающе %>% намного проще и круче;)

После того, что встроено в вы можете пойти дальше и сделать Ваш сюжет так:

plt <- ggplot(data = ddf, aes(x = lon, y = lat, color = td)) + 
    geom_point(aes(shape = td, size = abs_trs, fill = td), alpha = .5) + 
    scale_shape_manual(values = c(25, 24)) + 
    scale_color_manual(values=c("blue", "red")) + 
    scale_size_continuous(range = c(2,20)) + 
    scale_fill_manual(values = c("blue","red")) + 
    geom_text(aes(label = round(all_trs,1))) + 
    guides(size = F) 
plt 

enter image description here

Я включил geom_text накладку, чтобы помочь показать, что размер масштабирования правильно. Надеюсь, это поможет!

+0

Nathan Day Ваш ответ абсолютно хорош, однако, как вы представляете легенду с расхождением, как показать легенду, как в оригинальном вопросе. В ваших путеводителях кода (size = F) удалено, будет отображаться и нечетная легенда. Я хочу показать легенду, как в образе вопроса. Спасибо. – Cirrus

+0

Если вы хотите, чтобы ваши данные были такими, как легенда, вы вырезали выше, вы можете. В легенде не должно быть сложно установить соответствующее обозначение для 3 уровней, извините, мое решение работает только с непрерывным масштабом. Вы можете легко вернуть весы, если считаете, что ваши читатели не смогут понять, что размер точки относительно значения. – Nate

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