#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)
? Я ищу решение, которое не связано с пользовательским интерфейсом.