ggplot2 圆形堆积条形图重复没有任何条形的标签

Cur*_*tLH 1 r ggplot2

我正在尝试使用 ggplot重新创建此示例以创建圆形条形图。除了,而不是标准条形图,我想创建一个堆积条形图。我已经能够非常接近,但出于某种原因,在这个圆形条形图中重复了标签。我认为问题id在于我正在创建以匹配示例,但我不确定如何解决它。

df <- structure(list(team = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 
8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, NA, 1L, 2L, 3L, 4L, 5L, 
6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, NA, 1L, 2L, 3L, 
4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, NA), .Label = c("Team1", 
"Team2", "Team3", "Team4", "Team5", "Team6", "Team7", "Team8", "Team9", "Team10", 
"Team11", "Team12", "Team13", "Team14", "Team15"), class = "factor"), 
    variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("variable1", 
    "variable2", "variable3"), class = "factor"), value = c(3.91666666666667, 
    3.25, 3.88888888888889, 2.83333333333333, 3.16666666666667, 
    2.93333333333333, 2.66666666666667, 3.4, 3.33333333333333, 
    3.44444444444444, 3.41666666666667, 4, 4, 3.5, 4, 3.33333333333333, 
    3.8, 3.5, 3.86666666666667, 3, 2.96666666666667, 3.2, 3, 
    3.52, 3.26666666666667, 3.2, 3.45, 3.9, 3.6, 3.35, 3.86666666666667, 
    3, 3.91666666666667, 3.58333333333333, 4, 3.83333333333333, 
    3.44444444444444, 3.26666666666667, 3, 3.6, 3.33333333333333, 
    3.55555555555556, 3.66666666666667, 3.83333333333333, 3.5, 
    3.41666666666667, 4, 2.33333333333333)), row.names = c(NA, 
-48L), class = "data.frame")

df$id=seq(1, nrow(df))
label_data=df
number_of_bar=nrow(label_data)
angle= 90 - 360 * (label_data$id-0.5) /number_of_bar
label_data$hjust<-ifelse( angle < -90, 1, 0)
label_data$angle<-ifelse(angle < -90, angle+180, angle)

ggplot(data=df, aes(x=team, y=value, fill=variable)) +
  geom_bar(stat='identity') +
  ylim(-100,120) +
  theme_minimal() +
  theme(
    axis.text = element_blank(),
    axis.title = element_blank(),
    panel.grid = element_blank(),
    plot.margin = unit(rep(-1,4), "cm") 
  ) +
  coord_polar(start = 0) +
  geom_text(data=label_data, aes(x = id, y = 20, label=team, hjust=hjust), color="black", fontface="bold",alpha=0.6, size=2.5, angle= label_data$angle, inherit.aes = FALSE )
Run Code Online (Sandbox Code Playgroud)

Ron*_*hah 5

是的,有一个问题是如何id创建的。我们需要id每个都独一无二,team并且还需要number_of_bar根据team.

number_of_bar = length(unique(df$team))
df$id = as.numeric(as.factor(df$team))
label_data = df
angle = 90 - 360 * (label_data$id-0.5) /number_of_bar
label_data$hjust <-ifelse(angle < -90, 1, 0)
label_data$angle <-ifelse(angle < -90, angle+180, angle)

ggplot(data=df, aes(x=team, y=value, fill=variable)) +
   geom_bar(stat='identity') +
   ylim(-100,120) +
   theme_minimal() +
   theme(
     axis.text = element_blank(),
     axis.title = element_blank(),
     panel.grid = element_blank(),
     plot.margin = unit(rep(-1,4), "cm") 
     ) +
   coord_polar(start = 0) +
  geom_text(data=label_data, aes(x = id, y = 20, label=team, hjust=hjust),
  color="black", fontface="bold",alpha=0.6, size=2.5,
  angle= label_data$angle, inherit.aes = FALSE )
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明