R :: ggplot2 :: geom_points: how to change points with pie charts?

I would like to build pie charts in two dimensions to show the composition of each point in terms of their composite “groups”.

So far I have been using the label print for labels to the highest points, but this is still not very good. I looked around and I did not see what I was looking for.

ggplot(data=aggtmp2,aes(x=cluster,y=x,color=groups,shape=dataset)) +
 geom_jitter() + facet_grid(datasubset~.) +
 geom_text_repel(data=aggtmp2[aggtmp2$xnorm>.925,],aes(label=groups),size=2)


> str(aggtmp2)
'data.frame':   562 obs. of  7 variables:
  $ group_name: chr  "1_1_D1NF_lewisnegative" "1_1_D1NF_lewisnegative" "1_1_D1NF_lewisnegative" "1_1_D1NF_lewisnegative" ...
  $ cluster   : Factor w/ 39 levels "10of10","1of1",..: 30 24 11 18 25 18 30 11 25 24 ...
  $ x         : num  0.591 0.591 0.591 0.591 0.591 ...
  $ xnorm     : num  0.921 0.921 0.921 0.921 0.921 ...
  $ groups    : Factor w/ 43 levels "1_1","1_2","1_3",..: 1 1 1 1 1 2 2 2 2 2 ...
  $ dataset   : Factor w/ 2 levels "D1NF","D2NF": 1 1 1 1 1 1 1 1 1 1 ...
  $ datasubset: Factor w/ 5 levels "all","lewisnegative",..: 2 2 2 2 2 2 2 2 2 2 ...

enter image description here

This answer is close: ggplot uses small pie charts as points with geom_point But I am trying to do this without facet_grid (). That way, I can more naturally show the composition in the xy-coordinate space that I set.

0
source share
1 answer

Update:

, scatterpie, https://cran.r-project.org/web/packages/scatterpie/vignettes/scatterpie.html. .


, , , , . , %>%, , . : 5 X Y. Xs Ys. , X-Y.

require(dplyr)
require(ggplot2)

df <- data_frame(x1 = rnorm(5), y1 = rnorm(5)) %>% 
  group_by(x1, y1) %>%
  do(data_frame(component = LETTERS[1:3], value = runif(3))) %>% 
  mutate(total = sum(value)) %>% 
  group_by(x1, y1, total) 

df

 Source: local data frame [15 x 5] Groups: x1, y1, total [5]

           x1         y1 component       value     total
        <dbl>      <dbl>     <chr>       <dbl>     <dbl> 

1  -1.0933810  0.4162150         A 0.920992065 2.1406433 
2  -1.0933810  0.4162150         B 0.914163390 2.1406433 
3  -1.0933810  0.4162150         C 0.305487891 2.1406433 
4  -0.9579912  1.4080922         A 0.006967777 0.3149009 
5  -0.9579912  1.4080922         B 0.128341286 0.3149009 
6  -0.9579912  1.4080922         C 0.179591852 0.3149009 
7   0.5617438 -0.8770998         A 0.233895761 1.2324975 
8   0.5617438 -0.8770998         B 0.942843309 1.2324975 
9   0.5617438 -0.8770998         C 0.055758395 1.2324975 
10  0.9970852 -0.4142704         A 0.035965092 1.4261429 
11  0.9970852 -0.4142704         B 0.454193773 1.4261429 
12  0.9970852 -0.4142704         C 0.935984062 1.4261429 
13  1.2253968  0.3557304         A 0.692594728 2.1289173 
14  1.2253968  0.3557304         B 0.972569822 2.1289173 
15  1.2253968  0.3557304         C 0.463752786 2.1289173

x1 - y1 - total subplots. ggplot . , subgrobs. - , .

df.grobs <- df %>% 
  do(subplots = ggplot(., aes(1, value, fill = component)) + 
       geom_col(position = "fill", alpha = 0.75, colour = "white") + 
       coord_polar(theta = "y") + 
       theme_void()+ guides(fill = F)) %>% 
  mutate(subgrobs = list(annotation_custom(ggplotGrob(subplots), 
                      x = x1-total/4, y = y1-total/4, 
                      xmax = x1+total/4, ymax = y1+total/4))) 

df.grobs

Source: local data frame [5 x 5]
Groups: <by row>

# A tibble: 5 × 5
          x1         y1     total subplots            subgrobs
       <dbl>      <dbl>     <dbl>   <list>              <list>
1 -1.0933810  0.4162150 2.1406433 <S3: gg> <S3: LayerInstance>
2 -0.9579912  1.4080922 0.3149009 <S3: gg> <S3: LayerInstance>
3  0.5617438 -0.8770998 1.2324975 <S3: gg> <S3: LayerInstance>
4  0.9970852 -0.4142704 1.4261429 <S3: gg> <S3: LayerInstance>
5  1.2253968  0.3557304 2.1289173 <S3: gg> <S3: LayerInstance>

5 x1 - y1 - total ggplot, , total. df geom_col s.

df.grobs %>%
  {ggplot(data = ., aes(x1, y1)) +
      scale_x_continuous(expand = c(0.25, 0)) +
      scale_y_continuous(expand = c(0.25, 0)) +
      .$subgrobs + 
      geom_text(aes(label = round(total, 2))) + 
      geom_col(data = df,
               aes(0,0, fill = component), 
               colour = "white")}

enter image description here

x, y , .

+4

Source: https://habr.com/ru/post/1690413/


All Articles