如何解决我可以绘制水平线以显示分布以及截止值吗?
我想绘制一条如下图所示的条形图。
我在这里。
attitude <- c('solid_blue','leaning_blue','toss_up','leaning_red','solid_red')
n_votes <- c(190,108,121,39,80)
group <- c(1,1,1)
df <- rbind(attitude,n_votes,group)
df <- as.data.frame(t(df))
ggplot(data = df) +
geom_bar(stat = 'identity',mapping = aes (x = group,y = n_votes,fill = attitude)) + coord_flip()
df就像
attitude n_votes group
1 solid_blue 190 1
2 leaning_blue 108 1
3 toss_up 121 1
4 leaning_red 39 1
5 solid_red 80 1
n_votes似乎无法正确累积,我该如何纠正呢?
丹
解决方法
您的主要问题是由于构造数据框的方式所致,其中的所有列都是字符向量。看:
class(df$n_votes)
#> [1] "character"
以较少的代码并获得更好的结果来构建像这样的数据帧:
attitude <- c('solid_blue','leaning_blue','toss_up','leaning_red','solid_red')
n_votes <- c(190,108,121,39,80)
df <- data.frame(attitude,n_votes,group)
现在使用您的绘图代码(除非注意geom_bar(stat = "identity"
是写geom_col(
的一种长期方法
ggplot(data = df) +
geom_col(aes(x = group,y = n_votes,fill = attitude)) +
coord_flip()
我们得到:
或者,如果您想靠近一点:
attitude <- c('solid_blue',80)
df <- data.frame(rev(attitude),rev(n_votes),group)
df$attitude <- factor(rev(attitude),levels = attitude)
ggplot(data = df) +
geom_col(aes(x = group,fill = attitude)) +
scale_fill_manual(values = rev(c("#2558b1","#77b3dd","#cbcbcb","#f3b0a7","#d95551")),guide = guide_none()) +
geom_text(check_overlap = TRUE,label = 298,size = 15,x = 1.8,y = 0,hjust = 0,color = "#2558b1") +
geom_text(check_overlap = TRUE,label = 119,y = sum(n_votes),hjust = 1,color = "#d95551") +
geom_text(check_overlap = TRUE,label = "Joe Biden\nDEMOCRAT",size = 5,y = 60,hjust = 0) +
geom_text(check_overlap = TRUE,label = "Donald J Trump\nREPUBLICAN",y = sum(n_votes) - 60,hjust = 1) +
geom_text(check_overlap = TRUE,aes(x = group,label = n_votes),position = position_stack(vjust = 0.5),color = "white") +
geom_segment(aes(x = 0.55,xend = 1.45,y = sum(n_votes)/2,yend = sum(n_votes)/2),linetype = 2) +
coord_flip() +
theme_classic() +
scale_x_discrete(expand = expansion(add = c(0.7,0.7))) +
theme(panel.background = element_rect(fill = "#fdf1e5"),plot.margin = margin(50,10,50,10),axis.line = element_blank(),axis.ticks = element_blank(),axis.title = element_blank(),axis.text = element_blank())
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。