Как заполнить круговую диаграмму во всей панели в ggplot2 в R?

#r #ggplot2

#r #ggplot2

Вопрос:

Я хочу создать круговую диаграмму, в которой с помощью ggplot2 и geom_col в R отображается только круговая окружность, так что весь график представляет собой круговую окружность без пробелов с каждой стороны. Ниже приведен пример моего кода:

 library('ggplot2')
df = data.frame(group=c("a","b","c"), 
                value=c(0.2,0.4,0.4))

p=ggplot(df,aes(x="", y=value, fill=group))   
  geom_col(position="fill")   
  coord_polar(theta = "y")  
  guides(fill=F)  
  theme(
    panel.background = element_rect(fill = "grey", colour = NA), 
    #"grey" is just to show the panel area
    plot.background = element_rect(fill = "transparent", colour = NA),
    panel.grid = element_blank(),
    panel.border = element_blank(),
    plot.margin = unit(c(0, 0, 0, 0), "null"),
    panel.spacing = unit(0, "null"),
    axis.ticks = element_blank(),
    axis.text = element_blank(),
    axis.title = element_blank(),
    axis.line = element_blank(),
    legend.position = "none",
    axis.ticks.length = unit(0, "null"),
    axis.ticks.margin = unit(0, "null"),
    legend.margin = margin()
  )
  

Ниже приведен созданный им рисунок. Я хотел, чтобы верхняя и нижняя части круга находились на верхнем и нижнем краях серой области. Как мне это сделать?

Рисунок

Ответ №1:

Я думаю, что это жестко запрограммировано в ggplot2. Вы можете покопаться под капотом, войдя trace(ggplot2:::r_rescale, edit = TRUE) в консоль (см. Определение функции для неэкспортируемого r_rescale внизу этой страницы GH) и изменить значение масштабирования с 0.4 на 0.5 .

Результат повторного запуска кода после редактирования функции:

график

Когда вы закончите, запустите untrace(ggplot2:::r_rescale) и все вернется в нормальное русло.


p.s. На несвязанном примечании вы можете пропустить все спецификации темы в своем коде, если укажете theme_void() (чтобы переопределить значение по умолчанию theme_grey() ).

Комментарии:

1. вы случайно не знаете, есть ли способ программного достижения trace(ggplot2:::r_rescale, edit = TRUE) ? Я ищу решение, которое не связано с пользовательским интерфейсом.