ggplot:离散x轴的线图

13

我有下面这张表格,但在多次尝试后,无法绘制数据,使得 x 轴刻度线与 年份 对齐。我已经找到了箱线图的解决方案,但是没有找到适用于 geom_line() 的解决方案。

我该如何为年份创建离散标签?

以下解决方案都没有起作用。

g + scale_x_discrete(limits=c("2013","2014","2015"))
g + scale_x_discrete(labels=c("2013","2014","2015"))
distance_of_moves
  平均移动距离 年份
1     2.914961 2013
2     2.437516 2014
3     2.542500 2015

ggplot(data = distance_of_moves, aes(x = 年份, y = `平均移动距离`, group = 1)) +
 geom_line(color = "red", linetype = "dashed", size = 1.5) +
 geom_point(color = "red", size = 4, shape = 21, fill = "white") + 
 ylab("平均移动距离") + 
 xlab("年份") 

enter image description here


1
你是不是打算在标签中两次列出2014年? - drhagen
3
aes()中使用as.factor(year) - mtoto
不,只有一次,那是一个错误。 - iskandarblue
3
现在你拥有一个连续的刻度,因为你的“年份”列是数字型的。你可以选择(a)将该列转换为“factor”,或者(b)指定你想要的断点,并继续使用连续刻度:+ scale_x_continuous(breaks = 2013:2015) - Gregor Thomas
2
在R中(以及ggplot中),分类/数值通常是有意义的区别。即使年份是离散的时间度量,它们也被存储为数值型,因此像年份之间的距离这样的事情是明确定义的,所以它们是“连续”的。很少有重要的区别在于离散(整数)与连续(实数)数字之间。 - Gregor Thomas
显示剩余2条评论
1个回答

17
可重现的示例:
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

将年份指定为有序因子将确保x轴的排序正确,而不管级别出现的顺序如何(而仅使用“factor(year)”来绘制美学可能会导致问题)。


2
"group=1"是什么作用?顺便说一下,在这个论坛上应该有一些自动接受答案的机制。 - Helen
3
你需要在ggplot2中使用线条来实现分组美学;由于ggplot2的编写方式,你选择的特定几何对象将应用于相关分类变量的所有组合(即,在这种情况下,x轴的因子)。但是,对于线条来说,这种方法行不通,因为它会导致每个点都有一条线(这是不正确的)。因此,指定group=1告诉ggplot,每个点都要连接成一个单独的线条分组。 - Eric
这篇帖子提供了有关在ggplot2中绘制线条和组别美学的详细信息。 - Eric
哦哦哦!!非常感谢你!! - Helen
1
5年过去了,这仍然有效! - kyle-G

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接