7
votes

I have the following table but after many tries have been unable to plot the data so that the x-axis tick marks line up with the year. I have found solutions to boxplots, but not for geom_line()

How can I make discrete labels for year?

the following solutions did not work

g + scale_x_discrete(limits=c("2013","2014","2015"))
g + scale_x_discrete(labels=c("2013","2014","2015"))
distance_of_moves
  distance moved year
1       2.914961 2013
2       2.437516 2014
3       2.542500 2015

ggplot(data = distance_of_moves, aes(x = year, y = `distance moved`, group = 1)) +
 geom_line(color = "red", linetype = "dashed", size = 1.5) +
 geom_point(color = "red", size = 4, shape = 21, fill = "white") + 
 ylab("Average distance of movement") + 
 xlab("year") 

enter image description here

1
Did you intend to have 2014 listed twice in the labels?drhagen
use as.factor(year) in the aes()mtoto
no, just once, that was a mistakeiskandarblue
Right now you have a continuous scale because your year column is numeric. You can either (a) convert the column to a factor or (b) specify the breaks you want and continue using the continuous scale: + scale_x_continuous(breaks = 2013:2015).Gregor Thomas
@JabroJacob in R (and in ggplot) categorical/numeric is usually the meaningful distinction. Years, even if they are discrete measures of time, are "continuous" because they are stored as numeric (and things like distance between years are well defined). There's rarely an important distinction between discrete (integer) vs continuous (real) numerics.Gregor Thomas

1 Answers

10
votes

Reproducible example:

data <- data.frame(dist=c(2.914, 2.437, 2.542), year=c(2013, 2014, 2015))
# this ensures that stuff will be ordered appropriately
data$year <- ordered(data$year, levels=c(2013, 2014, 2015))
ggplot(data, aes(x=factor(year), y=dist, group=1)) +
  geom_line() +
  geom_point()

enter image description here

Specifying the year as an ordered factor will ensure that the x axis is ordered appropriately, regardless of the order in which the levels appear (whereas just using "factor(year)" in the plotting aesthetic could lead to issues).