【问题标题】:Plot in order ggplot - R按顺序绘制 ggplot - R
【发布时间】:2017-11-10 11:09:47
【问题描述】:

我有一个长格式的dataframe 可以与ggplot 一起使用。它有 3 个变量:ID (1:10)、图像 (1:24) 和值(一些索引)。这是头:

    ID image         value
1    1     1  0.0408963431
2    2     1  0.1366366334
3    3     1  0.1250891286
4    4     1  0.6980148222
5    5     1  0.1537595064
6    6     1  0.6088030843
7    7     1  0.1618058842
8    8     1  0.0007617827
9    9     1 -0.0098789526
10  10     1  0.7994192766
11   1     2  0.0326733369
12   2     2  0.0304698831
13   3     2  0.1100861336
14   4     2  0.5145008107
15   5     2  0.1424066920
16   6     2  0.6982905393
17   7     2  0.2033906321
18   8     2  0.0506560177
19   9     2  0.0223501625
20  10     2  0.8014009445

到目前为止我正在使用:

ggplot(NDVIdfmean_forplot, aes(x = image, y= value, group = ID)) + geom_line()

绘制我的dataframe。尽管代码完成了这项工作,但 x 轴的顺序不正确。这是图片

Plot image

如您所见,顺序是 1, 10, 11, 12 ... 19, 2, 20, 21 ... 我想按升序绘制我的数据,所以:1,2,3,4等等。

我一直在尝试正确排序我的数据

ggplot(NDVIdfmean_forplot[order(NDVIdfmean_forplot$image),], aes(x=image, y=value, group=ID)) + geom_line() + geom_path()

但我还没有设法解决它。产生相同的输出。

对此有什么想法吗?

【问题讨论】:

  • 能否用dput() 给我们一个可重现的例子,或者你的数据集真的很大吗?我无法使用上面显示的数据重现您的问题。
  • 嗨@tyluRp,感谢您的评论,我只是设法解决它。

标签: r dataframe plot ggplot2


【解决方案1】:

您可以尝试两种方法:

将列图像转换为数字:

library(ggplot2)

NDVIdfmean_forplot$image <- as.numeric(NDVIdfmean_forplot$image)
ggplot(NDVIdfmean_forplot, aes(image, value, group = ID, color = ID)) + 
    geom_line()

scale_x_discrete 与已排序的image 值一起使用:

ggplot(NDVIdfmean_forplot, aes(image, value, group = ID)) + 
    geom_path() +
    scale_x_discrete(limits = as.character(sort(as.numeric(unique(NDVIdfmean_forplot$image)))))

【讨论】:

  • 感谢您的回复。也可以。顺便问一下,如何在我的代码中为每个 ID 组定义特定的颜色?
  • 我也使用了这个选项,但它应用了蓝色渐变。我想定义我自己的颜色或我自己的色带。类似于您在常规 plotcol=c("orange", "blue", "red") ... 中所做的事情
  • 检查scale_color_manual和参数values,你需要做的是这样的:scale_color_manual(values = c("orange", "blue", "red"))
【解决方案2】:

我设法解决了它,所以我会发布解决方案以防它帮助某人

问题是我的图像变量不是一个因素。我用过:

NDVIdfmean_forplot$image &lt;- factor(NDVIdfmean_forplot$image,levels=unique(as.character(NDVIdfmean_forplot$image)) )

正确地将其转换为订单的因素。现在图表正确

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多