Как добавить две разные величины размера точек в диаграмме пузырьков ggplot? - PullRequest
0 голосов
/ 06 ноября 2018

Я только что столкнулся с таким графиком, в котором используются два цвета geom_point (я полагаю, он сделан ggplot2). Точно так же я хотел бы иметь точки одного цвета в диапазоне от 1 до 5, и иметь другой цвет для серии точек для диапазона от 10 до 50. Однако я понятия не имею, как добавить два различных диапазона точек в один график.

На базовом шаге у меня есть:

a <- c(1,2,3,4,5)
b <- c(10,20,30,40,50)
Species <- factor(c("Species1","Species2","Species3","Species4","Species5"))
bubba <- data.frame(Sample1=a,Sample2=b,Species=Species)
bubba$Species=factor(bubba$Species, levels=bubba$Species)
xm=melt(bubba,id.vars = "Species", variable.name="Samples", value.name = "Size")
str(xm)
ggplot(xm,aes(x= Samples,y= fct_rev(Species)))+geom_point(aes(size=Size))+scale_size(range = range(xm$Size))+theme_bw()

У кого-нибудь были бы подсказки, где мне следует разобраться? Спасибо!

enter image description here

Ответы [ 4 ]

0 голосов
/ 06 ноября 2018

У меня есть подход, который проходит 90% пути, но я не уверен, как закончить дело. Чтобы получить одну легенду для размера, я использовал преобразование для преобразования входного размера в размер экрана. Это делает внешний вид легенды соответствующим дисплею. Чего я еще не понял, так это как применить подобное преобразование к fill, чтобы оба они могли быть интегрированы в одну легенду.

Вот преобразование, которое в этом случае сжимает все 10 или больше:

library(scales)
shrink_10s_trans = trans_new("shrink_10s",
          transform = function(y){
            yt = if_else(y >= 10, y*0.1, y)
            return(yt)
          },
          inverse = function(yt){
            return(yt) # Not 1-to-1 function, picking one possibility
          }
)

Затем мы можем использовать это преобразование для размера, чтобы выборочно отображать только точки размером 10 или больше. Это хорошо работает для легенды, за исключением интеграции кодировки заливки с кодировкой размера.

ggplot(xm,aes(x= Samples,y= fct_rev(Species), fill = Size < 10))+
  geom_point(aes(size=Size), shape = 21)+
  scale_size_area(trans = shrink_10s_trans, max_size = 10,
                  breaks = c(1,2,3,10,20,30,40),
                  labels = c(1,2,3,10,20,30,40)) +
  scale_fill_manual(values = c(rgb(136,93,100, maxColorValue = 255),
                               rgb(236,160,172, maxColorValue = 255))) +
  theme_bw()

enter image description here

0 голосов
/ 06 ноября 2018
a <- c(1, 2, 3, 4, 5)
b <- c(10, 20, 30, 40, 50)

Species <- factor(c("Species1", "Species2", "Species3", "Species4", "Species5"))

bubba <- data.frame(Sample1 = a, Sample2 = b, Species = Species)
bubba$Species <- factor(bubba$Species, levels = bubba$Species)
xm <- reshape2::melt(bubba, id.vars = "Species", variable.name = "Samples", value.name = "Size")

ggplot(xm, aes(x = Samples, y = fct_rev(Species))) +
  geom_point(aes(size = Size, color = Size)) +
  scale_color_continuous(breaks = c(1,2,3,10,20,30), guide = guide_legend()) +
  scale_size(range = range(xm$Size), breaks = c(1,2,3,10,20,30)) +
  theme_bw()

enter image description here

0 голосов
/ 06 ноября 2018

Вот этот комок. У меня нет времени, чтобы выяснить легенду в данный момент. Обратите внимание, что 1 и 10 одинакового размера, но другого цвета, как 3 и 40.

# Create data frame
a <- c(1, 2, 3, 4, 5)
b <- c(10, 20, 30, 40, 50)
Species <- factor(c("Species1", "Species2", "Species3", "Species4", "Species5"))
bubba <- data.frame(Sample1 = a, Sample2 = b, Species = Species)

# Restructure data
xm <- reshape2::melt(bubba, id.vars = "Species", variable.name = "Samples", value.name = "Size")

# Calculate bubble size
bubble_size <- function(val){
  ifelse(val > 3, (1/15) * val + (1/3), val)
}

# Calculate bubble colour
bubble_colour <- function(val){
  ifelse(val > 3, "A", "B")
}

# Calculate bubble size and colour
xm %<>% 
  mutate(bub_size = bubble_size(Size),
         bub_col = bubble_colour(Size))

# Plot data
ggplot(xm, aes(x = Samples, y = fct_rev(Species))) +
  geom_point(aes(size = bub_size, fill = bub_col), shape = 21, colour = "black") +
  theme(panel.grid.major = element_line(colour = alpha("gray", 0.5), linetype = "dashed"),
        text = element_text(family = "serif"),
        legend.position = "none") + 
  scale_size(range = c(1, 20)) +
  scale_fill_manual(values = c("brown", "pink")) +
  ylab("Species")

enter image description here

0 голосов
/ 06 ноября 2018

Я думаю, вы ищете пузырьковые участки в R

https://www.r -graph-gallery.com / пузырьковой диаграммы /

Тем не менее, вы, вероятно, хотите построить правую и левую сторону графика отдельно, а затем объединить.

...