首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >geom_text标签不想在我的条形图上躲避

geom_text标签不想在我的条形图上躲避
EN

Stack Overflow用户
提问于 2020-07-30 12:38:22
回答 2查看 576关注 0票数 1

我的酒吧里的标签有问题。我尝试了不同的解决方案,从这个网站,但没有改变。

以下是我的数据示例:

代码语言:javascript
复制
   <date>     <chr>                     <int>
 1 2019-03-01 Membershiptype1               2
 2 2019-04-01 Membershiptype1               1
 3 2019-07-01 Membershiptype1               1
 4 2019-08-01 Membershiptype1               1
 5 2019-09-01 Membershiptype1               2
 6 2019-10-01 Membershiptype1               1
 7 2019-11-01 Membershiptype1               1
 8 2020-01-01 Membershiptype1               2
 9 2020-01-01 Membershiptype2               2
10 2020-02-01 Membershiptype1               4

我使用了以下软件包:库(Dbplot)库(Modeldb)库(Tidypredict)库(Tidyverse)库(Lubridate)

这是我用来制作条形图的代码:

代码语言:javascript
复制
signupMT <- ggplot(SignupPM, aes(fill=`Membership type`,  y=count_by_Name, x=month)) + 
  geom_bar(position=position_dodge(preserve = 'single'), stat="identity") +
  scale_fill_manual(values=c("#2381EB", "#8442D1", "#CF07BA"), name = NULL, labels = c("Student/Unemployed", "Full member", "Online member")) +
  theme_classic() +
  labs( x= NULL, y= "Number of sign-ups", title = "Sing-ups per month by membership type")+
  theme(legend.position="bottom", 
        axis.text.x = element_text(angle = 45, hjust = 0.1, vjust = 0))+
  scale_x_date(breaks= "month",date_labels = "%b %Y") +
  geom_text(aes(label= count_by_Name, group = month), position=position_dodge(width = 1), vjust=-0.5)

我也尝试过使用group = 'membership type'或播放宽度值,但是没有什么变化。

我也尝试过这个建议,但随后我得到了错误消息: stat_count()只能具有x或y美学。

代码语言:javascript
复制
geom_text(aes(y=count_by_Name, label = stat(count)), stat = 'count', position=position_dodge(2), vjust=-0.5, size = 3)

这就是我得到的酒吧情节:

我在这里错过了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-30 13:35:28

grid图形系统( ggplot2所基于的)而言,文本元素的宽度为零,因此不能像绘图列那样躲避。一旦解决这一问题的方法是使用hjust作为一种美学映射:

代码语言:javascript
复制
ggplot(SignupPM, aes(y = count_by_Name, x = month)) + 
  geom_col(aes(fill = `Membership type`),
            position = position_dodge(preserve = 'single')) +
  geom_text(aes(label= count_by_Name, 
                hjust = - 2 * as.numeric(`Membership type`) + 4.3),
            vjust = -0.5) +
  scale_x_date(breaks = "month", date_labels = "%b %Y") +
  scale_fill_manual(values = c("#2381EB", "#8442D1", "#CF07BA"), 
                    name = NULL, 
                    labels = c("Student/Unemployed", 
                               "Full member", "Online member")) +
  labs( x = NULL, y = "Number of sign-ups", 
        title = "Sign-ups per month by membership type") +
  theme_classic() +
  theme(legend.position = "bottom", 
        axis.text.x     = element_text(angle = 45, hjust = 0.1, vjust = 0))

数据(从所涉地块推断)

代码语言:javascript
复制
SignupPM <- structure(list(count_by_Name = c(2L, 1L, 1L, 1L, 2L, 1L, 1L, 
  2L, 2L, 4L, 2L, 4L, 1L, 4L, 2L, 5L, 5L, 5L, 4L, 1L, 3L, 2L, 8L
  ), month = structure(c(17928, 17956, 18048, 18078, 18109, 18140, 
  18170, 18231, 18231, 18262, 18262, 18293, 18293, 18322, 18322, 
  18353, 18353, 18383, 18383, 18383, 18414, 18414, 18414), class = "Date"), 
      `Membership type` = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
      1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 3L, 1L, 2L, 
      3L), .Label = c("Membershiptype1", "Membershiptype2", "Membershiptype3"
      ), class = "factor")), row.names = c(NA, -23L), class = "data.frame")
票数 0
EN

Stack Overflow用户

发布于 2020-07-30 13:15:38

利用@teunbrand的伟大建议,这可能会有所帮助:

代码语言:javascript
复制
library(tidyverse)

#Data
SignupPM <- structure(list(month = structure(c(17956, 17987, 18078, 18109, 
18140, 18170, 18201, 18262, 18262, 18293), class = "Date"), Membership_type = c("Membershiptype1", 
"Membershiptype1", "Membershiptype1", "Membershiptype1", "Membershiptype1", 
"Membershiptype1", "Membershiptype1", "Membershiptype1", "Membershiptype2", 
"Membershiptype1"), count_by_Name = c(2L, 1L, 1L, 1L, 2L, 1L, 
1L, 2L, 2L, 4L)), row.names = c(NA, -10L), class = "data.frame")

#Code
ggplot(SignupPM, aes(fill=Membership_type,  y=count_by_Name, x=month)) + 
  geom_col(position = position_dodge2(width = 0.9, preserve = "single")) +
  scale_fill_manual(values=c("#2381EB", "#8442D1", "#CF07BA"), name = NULL, labels = c("Student/Unemployed", "Full member", "Online member")) +
  theme_classic() +
  labs( x= NULL, y= "Number of sign-ups", title = "Sing-ups per month by membership type")+
  theme(legend.position="bottom", 
        axis.text.x = element_text(angle = 45, hjust = 0.1, vjust = 0))+
  scale_x_date(breaks= "month",date_labels = "%b %Y") +
  geom_text(aes(label= count_by_Name, group = month), position=position_dodge(width=0.9), vjust=-0.5)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63173346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档