【问题标题】:R by default plot a line graph ordered by the X axis and I want to it be ordered by the position in dataframeR 默认绘制一个按 X 轴排序的折线图,我希望它按数据框中的位置排序
【发布时间】:2015-05-10 22:15:07
【问题描述】:

我有一个像下面这样的数据框:

df = read.table(text = 
   "names    x       y       MV
   O4,     -0,33    -1,2    -5,2
   O9,5    -0,305   -1,1    -3,6
   B0      -0,3     -1,08   -3,25
   B0,5    -0,28    -1      -2,6
   B1,5    -0,25    -0,9    -2,1
   B2,5    -0,22    -0,8    -1,5", 
   dec = ",", sep = "", header = TRUE)

当使用 ggplot2 绘图时,它会根据 X 轴对我的值进行排序。

但我希望 ggplot 按它们在 data.frame 中的位置对点进行排序。

有人可以帮我吗?

【问题讨论】:

  • 第一列的Bs和Os是什么意思?您可以使用geom_path 生成这样的图
  • B0 和 B1,5 例如是名称
  • 在 x 轴和 y 轴上应该绘制什么?
  • 问题是 geom_path 将以原始顺序连接点,但是我希望这些点本身在 x 轴上处于原始顺序。 X 轴 = X 列 Y 轴 = Y 列

标签: r plot ggplot2


【解决方案1】:

只需将您的 x 列转换为因子并像这样绘制它:

df$x <- as.factor(df$x)

library(ggplot2)
#the important thing below is to specify group=1 so that all points
#are treated as the same group. the group argument is needed when
#the x-axis is of class factor.
ggplot(df, aes(x=as.factor(x), y=y, group=1)) + geom_path()

如您所见,x 轴值的顺序与 data.frame 中的顺序相同。

【讨论】:

  • 非常感谢。有一些方法可以让负 y 轴在顶部,正数在底部?
  • 不客气 :)。同样,唯一的方法是将您的 y 轴也转换为因子,并以您喜欢的方式对您的 data.frame 进行排序。但是请记住,如果 x 轴和 y 轴都是因子,那么您的线将始终是直的,因为两个轴都是因子,您将失去它们之间的数字距离。即 1 和 2 之间的距离将与 1 和 3 相同,因为你得到的是因数而不是数字。
  • 除非你的意思是让它们按数字排序,但反过来(即反转),在这种情况下你可以在你的情节中添加+ scale_y_reverse()
  • 试试这个:ggplot(df, aes(x=as.factor(x), y=y, group=1)) + geom_path() + scale_y_reverse()
  • 我刚刚意识到 Y 和 X 都是已经使用 scale_y_reverse() 的因子我得到一个错误:“y”的比例已经存在。为“y”添加另一个比例,它将替换现有比例。我必须将 Y 转换为数字吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-09
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多