【问题标题】:drawing vertical line with factor levels in ggplot2在ggplot2中绘制具有因子水平的垂直线
【发布时间】:2018-05-25 18:19:54
【问题描述】:

如果 x 轴上有 factor,我在添加 geom_vline 时会遇到一些麻烦。我想将x_value转换为factor并用x_line列画一条垂直线。

类似的帖子可能是这样的。

geom_vline vertical line on x-axis with categorical data: ggplot2

但即使我按照下面发布的解决方案进行操作,它也不起作用

这是问题的简短版本

df <- data.frame(x_value=c(rep(seq(1,5),2)), y_value=c(rnorm(10,5,1)),x_vline=3, gr=rep(c(1,2),c(5,5)))


> df
   x_value  y_value x_vline gr
1        1 6.589680       3  1
2        2 4.937223       3  1
3        3 6.934755       3  1
4        4 4.407492       3  1
5        5 6.321616       3  1
6        1 7.068435       3  2
7        2 4.379096       3  2
8        3 8.138772       3  2
9        4 5.814828       3  2
10       5 5.828453       3  2

library(ggplot2)

ggplot(df, aes(x=factor(x_value), y=y_value)) +

    geom_point(size=3, aes(colour=factor(gr)))+

    facet_wrap(~gr)+

    geom_vline(aes(xintercept=factor(x_vline)), linetype="dashed",colour="blue",size=0.7)

UseMethod("rescale") 中的错误: 没有适用于“因子”类对象的“重新缩放”方法

然后关注这个Issue with a drawing a vertical line in ggplot for categorical variable x-axis in R和这个geom_vline vertical line on x-axis with categorical data: ggplot2

我试过了

ggplot(df, aes(x=factor(x_value), y=y_value)) +

    geom_point(size=3, aes(colour=factor(gr)))+

    facet_wrap(~gr)+

    #geom_vline(aes(xintercept=factor(x_vline)), linetype="dashed",colour="blue",size=0.7)

    geom_vline(df,aes(xintercept=which(levels(factor(x_value)) %in% levels(factor(x_vline)))), linetype="dashed",colour="blue",size=0.7)

错误:ggplot2 不知道如何处理 uneval 类的数据

我怎样才能做到这一点? 谢谢!

【问题讨论】:

  • 还是什么都没有? :(
  • 您将两个变量映射到 x。您可能需要重新考虑您的问题。
  • @RomanLuštrik 这是真实数据的样子。两个变量,但它们在同一个类中,对吧?
  • 映射的变量优先于其类型。请解释你的最终数字应该是什么样子。更好的是,拿起笔和纸,画出来并张贴照片。

标签: r ggplot2


【解决方案1】:

只是不要将x_vline 转换为因子:

ggplot(df, aes(x=factor(x_value), y=y_value)) +
    geom_point(size=3, aes(colour=factor(gr)))+
    facet_wrap(~gr)+
    geom_vline(aes(xintercept=x_vline), linetype="dashed",colour="blue",size=0.7)

【讨论】:

  • 由于某种原因,此解决方案不适用于我的真实数据。这就是我问的原因。 geom_vline 中没有一行!
  • 在这种情况下,您的示例数据不代表您的实际数据 - 使用您提供的数据,此解决方案有效。可能是一个线索 - 您的实际数据与示例中的数据有何不同?
  • 不,x_valuex_vline 与真实数据中的数字完全相同。我在真实数据中也有geom_hline 的东西,它工作正常。因为它是数字的,我不会将其 hline 值转换为因子。但是对于 x 轴,我需要将其转换为因子并使用 x_vline 绘制 vline
  • 我复制了您提供的代码,并进行了一次更改,这就是生成的图表。如果您无法重现此结果,则您的数据或 R 环境存在问题。
  • 好的,我会深入挖掘。由于您的解决方案有效,因此我认为真实数据缺少一些东西。这个例子和真实的数据真的是一模一样的。感谢您的解决方案!欢呼