Можете ли вы объединить круговую диаграмму geom_bar с графиком geom_point в R?

Есть ли способ построить geom_pie поверх geom_point участка? с общей переменной (здесь: Местоположение)

Я видел, как люди делают пироги над картами , рисуя круговые диаграммы на карте в ggplot

Но мне было интересно, есть ли какой-нибудь пакет или функция, которые позволяют это делать?

Вот мои данные и два текущих графика:

data_point <- data.frame(
  Location=(1:7),
  Var1=c(13,8, 6,5,4,2,1),
  Var2 = c(7,8,9,10,11,12,13))

data_pie <- data.frame(
  Location=rep(1:7,5),
  Group= c(rep("A",7),rep("B",7),rep("C",7),rep("D",7),rep("E",7)),
  value=c(45.59,63.56,66.47,58.60,67.28,44.45,9.22,0.00,0.00,0.00,0.00,0.00,4.14,37.81,0.00,0.00,0.00,0.04,
0.03,25.15,34.58,52.86,35.61,24.66,26.13,18.98,12.71,6.61,2,1,9,15,14,14,12))

a<-ggplot(data_point, aes(Var1, Var2, label=1:7)) + 
  geom_point(size = 3, stroke = 2)+
  theme_classic()
b<- ggplot(data_pie, aes(x="", y=value, fill=Group)) +
  geom_bar(stat="identity", width=1) +
  coord_polar("y", start=0) +
  facet_wrap(~Location)+ scale_fill_brewer(palette="Dark2")
ggarrange(a,b, nrow = 1)

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

Желаемый сюжет:  введите описание изображения здесь


person Ecg    schedule 04.03.2021    source источник
comment
Вы пробовали использовать пакет scatterpie?   -  person teunbrand    schedule 04.03.2021


Ответы (1)


Вот идея с geom_scatterpie из пакета scatterpie:

Объединить данные

df <- data_pie %>% 
  pivot_wider(id_cols = Location,
              names_from = Group, 
              values_from =  value) %>% 
  left_join(data_point, by = "Location")

Код

library(scatterpie)

ggplot() +
  geom_scatterpie(data = df, aes(x = Var1, y = Var2,
                      group = Location), 
                  cols = c("A", "B", "C", "D", "E"))

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

person tamtam    schedule 04.03.2021
comment
Да, это работает, не знал о пакете. Спасибо! Однако можно ли запустить его с этим? Кажется, у пирога проблема с радиусом / углом? Я не знаю что происходит - person Ecg; 04.03.2021
comment
Я изменил Var1 - person Ecg; 04.03.2021
comment
Кажется, что округлость пирогов зависит от соотношения осей - одна единица на оси x должна быть такой же длины, как одна единица на оси y. Добавив + coord_fixed() в код, вы можете получить соотношение 1 и 2 круглых пирогов. Но это сделает ваш сюжет высоким и узким - в моих глазах сюжет сейчас трудно читать. - person tamtam; 04.03.2021
comment
В качестве быстрого решения этой проблемы вы можете преобразовать значения x, умножив их на 10 и пометив метки заново. df2 <- df %>% mutate(Var3 = Var1*10) и ggplot() + geom_scatterpie(data = df2, aes(x = Var3 , y = Var2, group = Location), cols = c("A", "B", "C", "D", "E"), pie_scale = 3) + scale_x_continuous(labels = function(x) x/10) + coord_fixed() - person tamtam; 04.03.2021
comment
Круто, Бетти действительно работает с * 100 :) - person Ecg; 04.03.2021