【问题标题】:ggplot2 facet labels don't correspond to dataggplot2 方面标签与数据不对应
【发布时间】:2018-03-03 03:16:57
【问题描述】:

我是一个 R 新手,我可能遗漏了一些琐碎的东西,但它是这样的:

我有一个数据框Data,其值如下:

         Voltage Current  lnI     VoltageRange
    1    0.474   0.001 -6.907755  Low Voltage
    2    0.883   0.002 -6.214608  Low Voltage
    3    1.280   0.005 -5.298317  Low Voltage
    .      .       .        .          .
    .      .       .        .          .
    .      .       .        .          .
    .      .       .        .          .
   13    2.210   0.247 -1.398367 High Voltage

然后我尝试用以下代码绘制它:

ggplot(data = Data, mapping = aes(x = Data$lnI, y = Data$Voltage)) +
      geom_point() +
      stat_smooth(method = "lm", se = FALSE) +
      facet_grid(~VoltageRange)

其输出为:

如您所见,分面标签位置错误,标记为高压的对应低压,反之亦然。

我该如何解决这个问题?我做错了什么?

【问题讨论】:

  • 一个更好的可重现数据框会很好。我不知道这是否会有所作为。您可以稍微减少代码。无需指定mapping=,只使用列名而不使用向量,只需调用ggplot(Data, aes(x = lnI, y = Voltage)
  • 谢谢!事实上,它只需要简化。不知道它是怎么爬起来的……再次感谢!

标签: r ggplot2 facet


【解决方案1】:

如评论。我认为您的 ggplot 调用“太复杂”

require(read.so) #awesome package available on GitHub, by @alistaire47 
dat <- read_so() 
dat <- dat[c(1:3,8),] 

dat
# A tibble: 4 x 4
  Voltage Current lnI       VoltageRange
  <chr>   <chr>   <chr>     <chr>       
1 0.474   0.001   -6.907755 Low         
2 0.883   0.002   -6.214608 Low         
3 1.280   0.005   -5.298317 Low         
4 2.210   0.247   -1.398367 High 

ggplot(dat, aes(x = lnI, y = Voltage)) + # remove 'mapping', 
# and use only the object names, not the columns/ vectors
  geom_point() + 
  stat_smooth(method = "lm", se = FALSE) +
  facet_grid(~VoltageRange)

作品:

编辑 如果要重新排列构面,请分解参数并更改级别的顺序。您可以在数据框中(我不推荐)或直接在 ggplot 调用中执行此操作。为了做到这一点,我发现创建一个具有级别顺序的字符向量很好,因为您可能再次需要这个。

facet_order <- c('Low', 'High') 
# note it's important that the levels are written exactly the same
ggplot(dat, aes(x = lnI, y = Voltage)) + 
      stat_smooth(method = "lm", se = FALSE) +
      facet_grid(~factor(VoltageRange, levels = facet_order))

【讨论】:

  • 谢谢!通过按照您的建议简化代码,它可以工作!现在我只需要谷歌如何订购方面,但我以前在某个地方看到过这个问题......
  • 排序基于字母顺序,或者,如果您的列是一个因素,则基于底层水平。我一般建议不要将您的数据保存为因子,当您并不真正了解因子是什么时(它们经常搞砸)。我个人正在定义一个具有正确级别顺序的字符向量,然后直接使用'factor(x,levels = my_character_vector)'在构面调用中分解变量
  • @GeorgeKampolis 我已将此添加到我的答案中
猜你喜欢
  • 1970-01-01
  • 2016-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多