【问题标题】:ggplot: Correct ordering of x-axis for a geom_point with facet_gridggplot:使用 facet_grid 的 geom_point 的 x 轴正确排序
【发布时间】:2017-03-01 10:30:45
【问题描述】:

我正在努力为散点图正确排序我的 x 轴,我希望在第二个离散因子中以增加特定组的数字因子的大小对离散 x 轴标签进行排序。并且要通过第四个离散因子将它由 facet_grid (或 facet_wrap 如果在这种情况下更好?)分开。我希望这是有道理的?如果没有,希望我在下面的示例中解释一下。

似乎有几个有用的在线帮助页面,我确定答案就在那里 - 但我似乎无法将它应用于我的案例。

这是我的示例数据集...

Car = c("A","A","A","B","B","C","C","D","D","E","E","F","F","G","G","G","H","H","H","H","I","I","J","J","J","K","K","K","L","L","M","M","N","N","N","O","O","P","P","Q","Q","R","R","S","S","T","T","U","U","U","V","V","V","V","X","X","X")
Area = c("MMR","QRT","VF","QRT","VF","MMR","QRT","MMR","QRT","MMR","QRT","QRT","VF","MMR","QRT","VF","MMR","QRT","PP","VF","QRT","VF","QRT","PP","VF","MMR","QRT","VF","QRT","VF","QRT","VF","MMR","QRT","VF","QRT","VF","QRT","VF","QRT","VF","MMR","QRT","MMR","QRT","MMR","QRT","MMR","QRT","VF","MMR","QRT","PP","VF","MMR","QRT","VF")
Distance = c(100,0.0022,1320,0.002,1056,1030,0.025,62.1,0.06,80,0.011,7.2,100,671,91.677,165,0.61,0.1102,0.08,11.5,0.173,327,0.159,0.82,0.01902,10,0.0079,23,0.186,0.02235,0.038,0.022,100,0.016,0.01359,0.18,0.02291,0.00048,1000,0.007,8.21,1000,0.0349,100,0.0056,100,0.022,100,0.05,13,17.9,0.032,0.22,87,100,0.09,0.0251)
Country = c("UK","UK","UK","UK","UK","UK","UK","UK","UK","UK","UK","FR","FR","FR","FR","FR","FR","FR","FR","FR","FR","FR","FR","FR","FR","FR","FR","FR","FR","FR","FR","FR","FR","FR","FR","FR","FR","AM","AM","AM","AM","AM","AM","AM","AM","AM","AM","AM","AM","AM","AM","AM","AM","AM","AM","AM","AM")
df=data.frame(Car, Area, Distance, Country)
df

我希望有一个绘图,其中我在 x 轴上有“汽车”,在 Y 轴上有“距离”。我想使用 facet_grid 并在每个方面 Id 内按“国家”分割该图,就像 x 轴一样,通过在“面积”因子中增加“QRT”的距离来排序。

以下代码用于绘制我的目标(x 轴排序问题除外)

Fig2B<- ggplot(df,aes(x=Car,y=Distance,colour=Area)) + 
  coord_trans(y = "log10") +
  geom_point() +
  facet_grid(. ~ Country, scales = "free", space="free")

我最接近重新订购的是通过以下有用的post。

使用以下代码,我可以创建一个看起来可以正确排序的新因子。

#Remove grouping
ungroup(df) %>%
# 2. Arrange by
#   i.  facet group
#   ii. bar height
arrange(Country, Distance, Area) %>%
# 3. Add order column of row numbers
mutate(order = row_number())

但是我不知道如何将其带到下一个阶段并使用文章中的代码在我的情节中使用它。我收到以下消息...

不知道如何为函数类型的对象自动选择比例。默认为连续。 (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, : 参数暗示不同的行数: 0, 57

我现在不知道从这里去哪里。

【问题讨论】:

  • 您是否为数据集指定了新变量的名称?在以ungroup(df) 开头的代码中,您似乎没有将结果分配给任何东西。这将使稍后引用 order 变量的绘图代码失败并出现错误。由于order 也是一个函数,我可以想象它会失败并显示给定的错误消息。

标签: r ggplot2 scatter-plot facet factors


【解决方案1】:

我可以创建一个看起来可以正确排序的新因子。

这是正确的目标。

我希望通过增加“面积”因子中“QRT”的距离来对 x 轴进行排序

好的,所以我们需要这个排序。

order = 
    ## filter down to just QRT
    filter(df, Area == "QRT") %>%
    ## get mean distance for each car (just in case there are
    ## multiple QRT values for a single car - more general than your example)   
    group_by(Car) %>%                   
    summarize(qrtdist = mean(Distance)) %>%
    ## sort ascending
    arrange(qrtdist) %>%
    ## make the Car column a character
    mutate(Car = as.character(Car))

所以这个新的order 数据集的Car 列应该有正确的顺序。现在我们将此排序应用于原始数据,并且该图将按需要工作:

df$Car = factor(df$Car, levels = order$Car)

ggplot(df,aes(x=Car,y=Distance,colour=Area)) + 
  coord_trans(y = "log10") +
  geom_point() +
  facet_grid(. ~ Country, scales = "free", space="free")

使用base

以上是花哨的dplyr 方式,但在这种情况下,我们实际上可以使用base 简化很多。有一个命令reorder() 用于通过某个其他变量的函数对因子的级别进行重新排序。

在这种情况下,我们希望reorder 是df$Car 因子,使用df$Distance 的值,其中df$Area 是"QRT"。

df$Car = reorder(
    # factor to reorder
    df$Car,  
    # vector that is Distance when Area is "QRT" and NA otherwise
    ifelse(df$Area == "QRT", df$Distance, NA),
    # function of that vector
    FUN = mean,
    # additional FUN argument: remove NA values
    na.rm = TRUE
)

没有所有的 cmets,我们可以这样做:

df$Car = reorder(df$Car, ifelse(df$Area == "QRT", df$Distance, NA), mean, na.rm = TRUE)

ggplot(df,aes(x=Car,y=Distance,colour=Area)) + 
  coord_trans(y = "log10") +
  geom_point() +
  facet_grid(. ~ Country, scales = "free", space="free")

【讨论】:

    猜你喜欢
    • 2020-06-25
    • 2018-08-12
    • 2022-01-10
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 2018-05-14
    相关资源
    最近更新 更多