我想创建一个圆形条形图,以显示胶片的产量如何随时间增加。我可以创建图形本身,但是当尝试在条形图上添加标签时,它将完全出错。我们将不胜感激任何见解-以及为什么图表会发生如此大的变化。 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 )
直到倒数第二行,它会创建一个无标签的条形图,但是此后会创建一个蓝色的标记...
答案 0 :(得分:0)
在geom_text
中添加新数据集似乎是问题所在。坐标系似乎不适合,这很有意义,因为ratings_bar
中的y变量从211
到784
,而label_data
中的y变量从2000
至2018
。为避免这种情况,我(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"))