Ручное изменение размера пузырьков для Plotly Bubble Map в R

В настоящее время я пытаюсь вручную изменить размеры пузырьковой карты Bubbles для Plotly. Мне удалось изменить цвета карты, используя предоставленные данные, но я не могу использовать ту же логику для изменения размера. Чтобы изменить цвета, я просто позвонил: colors_wanted <- c("red", "blue", "black", "pink") и передал эту команду colors внутри plot_ly. Как вы думаете, возможно ли изменить размеры, а не использовать в этом случае формулу sqrt для определения размеров?

library(plotly)
df <- read.csv('https://raw.githubusercontent.com/plotly/datasets/master/2014_us_cities.csv')
df$hover <- paste(df$name, "Population", df$pop/1e6, " million")

df$q <- with(df, cut(pop, quantile(pop), include.lowest = T))
levels(df$q) <- paste(c("1st", "2nd", "3rd", "4th"), "Quantile")
df$q <- as.ordered(df$q)

g <- list(scope = 'usa',projection = list(type = 'albers usa'),showland = TRUE,landcolor = toRGB("gray85"),
subunitwidth = 1, countrywidth = 1, subunitcolor = toRGB("white"),countrycolor = toRGB("white"))

plot_ly(df, lon = lon, lat = lat, text = hover,
  marker = list(size = sqrt(pop/10000) + 1, line = list(width = 0)),
  color = q, colors= colors_wanted, type = 'scattergeo', locationmode = 'USA-states') %>%
  layout(title = '2014 US city populations<br>(Click legend to toggle)', geo= g)

person aselvendran    schedule 11.09.2016    source источник
comment
мне непонятно, что вы хотите. Вы пытаетесь отформатировать размер в соответствии с какой-то переменной, пытаетесь ли вы уменьшить или увеличить размер всех пузырьков и т. д.   -  person Cyrus Mohammadian    schedule 11.09.2016
comment
@CyrusMohammadian Привет, спасибо за ответ. Я пытаюсь изменить размеры пузыря на основе моих собственных показателей. Например, я могу изменить все размеры пузырьков на «5» (сделав size = 5), но я не могу изменить размеры на (1,2,3,4) относительно каждого квантиля, как я мог чтобы с цветами. Надеюсь, это прояснит ситуацию.   -  person aselvendran    schedule 11.09.2016
comment
@Hack-R Привет. Насколько я понимаю, вызов sqrt(pop/10000) + 1 изменяет размеры каждого пузырька относительно квантиля. Я надеялся изменить размеры пузырьков, не проходя процесс поиска оптимального размера и, надеюсь, жестко запрограммировать его. Например, если бы данные о населении нужно было возвести в степень двойки, то мне пришлось бы взять корень в четвертой степени из населенности, чтобы получить ту же часть размера пузырька.   -  person aselvendran    schedule 11.09.2016


Ответы (1)


Если вы хотите, чтобы размер соответствовал квартилю, то это работает (и существует множество вариантов этого, которые вы могли бы сделать, чтобы сделать размер более аналитически значимым):

plot_ly(df, lon = lon, lat = lat, text = hover, size = as.numeric(df$q), 
        #marker = list(size = sqrt(pop/10000) + 1, line = list(width = 0)),
        color = q, colors= colors_wanted, type = 'scattergeo', locationmode = 'USA-states') %>%
  layout(title = '2014 US city populations<br>(Click legend to toggle)', geo= g)

введите здесь описание изображения

Вот интересный вариант:

plot_ly(df, lon = lon, lat = lat, text = hover, size = aggregate(df$pop,by=list(df$q),sqrt)$x,
        #marker = list(size = sqrt(pop/10000) + 1, line = list(width = 0)),
        color = q, colors= colors_wanted, type = 'scattergeo', locationmode = 'USA-states') %>%
  layout(title = '2014 US city populations<br>(Click legend to toggle)', geo= g)

введите здесь описание изображения

person Hack-R    schedule 11.09.2016
comment
Привет спасибо! Это то, что я надеялся сделать. Еще раз спасибо за второй сейв (до этого с Choropleth Map). Если вам интересно, причина, по которой я хочу жестко запрограммировать это, заключается в том, что я надеюсь использовать DBSCAN для поиска сгруппированных областей, а затем отображать одну точку в виде более крупного и темного пузыря, чтобы увидеть, все ли сгруппированные точки попадают под этот большой круг (поскольку вы также задали вопрос о кластеризации k-средних, я подумал, что было бы интересно отметить и это). - person aselvendran; 11.09.2016