我的酒吧里的标签有问题。我尝试了不同的解决方案,从这个网站,但没有改变。
以下是我的数据示例:
<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)
这是我用来制作条形图的代码:
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美学。
geom_text(aes(y=count_by_Name, label = stat(count)), stat = 'count', position=position_dodge(2), vjust=-0.5, size = 3)这就是我得到的酒吧情节:

我在这里错过了什么?
发布于 2020-07-30 13:35:28
就grid图形系统( ggplot2所基于的)而言,文本元素的宽度为零,因此不能像绘图列那样躲避。一旦解决这一问题的方法是使用hjust作为一种美学映射:
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))

数据(从所涉地块推断)
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")发布于 2020-07-30 13:15:38
利用@teunbrand的伟大建议,这可能会有所帮助:
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)

https://stackoverflow.com/questions/63173346
复制相似问题