如何正确分隔y轴,它是r中的日期向量

时间:2014-05-25 15:44:06

标签: r ggplot2

我有一个名为st_data的以下数据框:

enter image description here

我有兴趣为每个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))

图表:

enter image description here

但是,正如您所看到的,它还以小数形式考虑year轴。所以我意识到,因为它是一个int值,可能就是这个原因。所以我将年份列转换为Date类型,如下所示:

st_data$year<- as.Date(as.character(st_data$year), format('%Y'))

它还引入了默认月份和日期。因此,2008年变为28-05-2008。现在相同的代码给出了以下图表:

enter image description here

比以前更好,但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年。

1 个答案:

答案 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") 

获取

sample bar plot