Изменение положения метки на кольцевой диаграмме

Я пытаюсь переместить положение метки в кольцевой диаграмме, чтобы она находилась в правой части диаграммы, но я не могу этого сделать. Я использую ggplot и ggrepel для построения графика.

library(ggplot2)
library(ggrepel)

expenditurePie = data.frame(
  value = c(98,2),
  area = c("A","B"),
  label = c("","This is a label"))

ggplot(expenditurePie, aes(y=value, fill = area, label = label)) +
  geom_bar(aes(x = 4), stat = "identity", show.legend = F) +
  geom_text_repel(size = 5, x= 4, point.padding = unit(1.8, "lines"), direction = "x") +
  xlim(0.5, 4.5) +
  annotate(geom = "text", x=0.5, y=0, label = "24 444", size = 16, color = "grey") +
  scale_fill_manual(values = c(A = "grey", B = "black")) +
  coord_polar(theta = "y", start = 1) +
  theme_void() +
  theme(legend.position = 'none')

Изображение ниже является результатом выполнения приведенного выше кода: введите здесь описание изображения

Но на изображении ниже показано, что мне нужно: введите здесь описание изображения

Как мне это сделать? Спасибо.


person Bruno Guarita    schedule 24.05.2020    source источник
comment
nudge_x кажется, здесь это может сработать   -  person user20650    schedule 25.05.2020
comment
... и не забыть этот прекрасный сюжет Круговая и кольцевая диаграмма ggplot2 на одном графике"> stackoverflow.com/questions/26748069/   -  person user20650    schedule 25.05.2020


Ответы (2)


Возможно, это вариант для вас. Вместо того, чтобы полагаться на магию ggrepel, мой подход устанавливает метку вручную (по-прежнему используя ggrepel, но с силой, установленной на 0) и при рисовании сегмента, используя geom_segement. Попробуй это:

library(ggplot2)
library(ggrepel)

expenditurePie = data.frame(
  value = c(98,2),
  area = c("A","B"),
  label = c("","This is a label"))

ggplot(expenditurePie, aes(y = value, fill = area, label = label)) +
  geom_bar(aes(x = 4), stat = "identity", show.legend = F) +
  geom_text_repel(size = 5, x = 7, point.padding = unit(1.8, "lines"), direction = "x", force = 0, seed = 42) +
  geom_segment(aes(x = 4.6, xend = 5.5, y = 1, yend = 1)) +
  xlim(0.5, 5.5) +
  annotate(geom = "text", x=0.5, y=0, label = "24 444", size = 20, color = "grey") +
  scale_fill_manual(values = c(A = "grey", B = "black")) +
  coord_polar(theta = "y", start = 1) +
  theme_void() +
  theme(legend.position = 'none')

Создана 25 мая 2020 г. в пакете reprex (v0.3.0)

person stefan    schedule 24.05.2020

Это работает для вас? Использование nudge_x=5

library(ggplot2)
library(ggrepel)

expenditurePie = data.frame(
  value = c(98,2),
  area = c("A","B"),
  label = c("","This is a label"))

ggplot(expenditurePie, aes(y=value, fill = area, label = label)) +
  geom_bar(aes(x = 4), stat = "identity", show.legend = F) +
  geom_text_repel(size = 5, x= 4, point.padding = unit(1.8, "lines"), 
direction = "x", nudge_x = 5) +
  xlim(0.5, 4.5) +
  annotate(geom = "text", x=0.5, y=0, label = "24 444", size = 16, color = 
"grey") +
  scale_fill_manual(values = c(A = "grey", B = "black")) +
  coord_polar(theta = "y", start = 1) +
  theme_void() +
  theme(legend.position = 'none')

Выход:

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

person iamericfletcher    schedule 24.05.2020