将geom_text添加到圆形条形图

时间:2019-06-13 08:31:38

标签: r

我想创建一个圆形条形图,以显示胶片的产量如何随时间增加。我可以创建图形本身,但是当尝试在条形图上添加标签时,它将完全出错。我们将不胜感激任何见解-以及为什么图表会发生如此大的变化。 TIA。

我认为这与ylim值有关,但我不确定。


ratings <- read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2019/2019-01-08/IMDb_Economist_tv_ratings.csv")
ratings$year_rel <-year(ratings$date)


#data 
ratings_bar <- ratings %>%
  select(titleId, year_rel) %>%
  add_count(titleId) %>%
  group_by(year_rel) %>%
  summarise(total = sum(n)) %>%
  filter(year_rel >= 2000) %>%
  mutate(id = seq(1,19))

#Make labels
label_data <- ratings_bar
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)

#make graph
ratings_bar %>%
  ggplot(aes(x = year_rel, y = total)) + 
  geom_bar(stat = "identity", col = "darkblue", fill = "skyblue", alpha = 0.7) +
  ylim(-100,1200) + #i think this is where the error arrives
  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) +# Up to here the code plots a circular barplot correctly
  geom_text(data=label_data, aes(x=id, y=year_rel+10, label=total, hjust=hjust), color="black", fontface="bold",alpha=0.6, size=2.5, angle= label_data$angle, inherit.aes = FALSE ) 


直到倒数第二行,它会创建一个无标签的条形图,但是此后会创建一个蓝色的标记...

1 个答案:

答案 0 :(得分:0)

geom_text中添加新数据集似乎是问题所在。坐标系似乎不适合,这很有意义,因为ratings_bar中的y变量从211784,而label_data中的y变量从20002018。为避免这种情况,我(1)不会在geom_text的数据参数中引入第二个数据集,(2)仅在aes参数中添加labels,并且(3)切换顺序ggplot语句,方法是先添加geom_text,然后添加coord_polar语句。

10参数中将y = year_rel添加到geom_text有什么特殊的原因吗?

    ratings_bar %>%
        ggplot(aes(x = year_rel, y = total)) + 
        geom_bar(stat = "identity", col = "darkblue", fill = "skyblue", alpha = 0.7) +
        ylim(-100,1200)  + 
        theme_minimal() +
        geom_text(aes(label=total),
                  hjust = label_data$hjust,
                  color = "black",
                  fontface = "bold",
                  alpha = 0.6,
                  size = 2.5,
                  angle = label_data$angle) +
                  coord_polar(start = 0) + 
        theme( axis.text = element_blank(),
               axis.title = element_blank(),
               panel.grid = element_blank(),
               plot.margin = unit(rep(-1,4), "cm"))