我有一个名为st_data
的以下数据框:
我有兴趣为每个value
绘制year
vs person
图。因此,下面的代码生成一个图表:
ggplot(st_data, aes(x = year, y = value))
+ geom_bar(stat = "identity", aes(fill = person), position = "dodge")
+ theme(axis.text.x = element_text(angle = 45, hjust = 1))
图表:
但是,正如您所看到的,它还以小数形式考虑year
轴。所以我意识到,因为它是一个int
值,可能就是这个原因。所以我将年份列转换为Date
类型,如下所示:
st_data$year<- as.Date(as.character(st_data$year), format('%Y'))
它还引入了默认月份和日期。因此,2008
年变为28-05-2008
。现在相同的代码给出了以下图表:
比以前更好,但year
向量只有4个可能的值即。 1999年,2002年,2005年和2008年。所以我只想在x轴上这4年。怎么做到这一点?
我也使用了scale_x_date
,但没有运气。
ggplot(st_data, aes(x = year, y = value))
+ geom_bar(stat = "identity", aes(fill = person), position = "dodge")
+ scale_x_date(labels = date_format("%Y"))
它生成与之前相同的图形。那么我如何在x轴上只获得4年,它们应该是年矢量的任何可能值。 1999年,2002年,2005年和2008年。
答案 0 :(得分:1)
在这种情况下,您并不想将年份值视为年。您希望将它们视为分类变量。所以不要做st_data$year=as.Date
的事情。但请确保year
是一个因素
#sample data
st_data <- data.frame(
person=factor(rep(c("06037","24510"), each=4)),
year=rep(c(1999,2002,2005,2008), 2),
value=c(runif(4,1000,2000), runif(4, 0,500))
)
#convert year to factor
st_data$year = factor(st_data$year)
只需使用
ggplot(st_data, aes(x = year, y = value)) +
geom_bar(stat = "identity", aes(fill = person), position = "dodge")
获取