【问题标题】:Ordering Facets in a plot based on a column in the dataset根据数据集中的列对图中的构面进行排序
【发布时间】:2023-03-25 01:47:01
【问题描述】:

所以,我有一个看起来像 this 的数据集。

我的任务是创建一个平滑的多面可视化,显示每个站点的每个珊瑚的白化率,我已经成功地这样做了:

(我完全意识到这段代码可能很糟糕并且有一些错误,如果有人能告诉我改进它或纠正其中一些严重错误的方法,我将非常感激)。

coral_data <- read.csv("file.csv")

#options(warn=-1)

library(ggplot2)

ggplot(coral_data, aes(x=year, y=value, colour=coralType, group=coralType)) +
  geom_smooth(method="lm", se=F) +
  scale_x_continuous(name="Year", breaks=c(2010, 2013, 2016)) + 
  scale_y_discrete(breaks = seq(0, 100, by = 10)) +
  facet_grid(coralType ~ location, scales="free")+
  expand_limits(y=0) +
  labs(x="\nBleaching Rate", y="Year", title="Coral Bleaching for different corals at different sites over the years\n")

但是,我还必须按纬度对构面进行排序(目前,它类似于 site01、site02 等,但我希望分面站点按照它们的纬度值进行排序,无论是升序还是降序)但遗憾的是我不知道至于我将如何做到这一点。

因此,有人可以告诉我该怎么做吗?

【问题讨论】:

  • See here 提出一个人们可以帮助解决的 R 问题。我们无法在您的数据图片上运行代码,也看不到您尝试更改的图表。您可能需要将分面变量设置为您可以随意订购的因素;有很多关于做类似事情的帖子,例如stackoverflow.com/q/43290483/5325862
  • @camille 对不起。我已经做出了相应的调整。谢谢。
  • @camile 另外,我确实看到了很多关于它的帖子,但没有多少人告诉你如何根据数据集的另一列对构面进行排序。他们中的一些人确实做到了,是的,但我很抱歉,对此我仍然有些困惑。
  • 如果您尝试按其他一或两列重新排序因子,forcats 包具有可能有效的辅助函数,例如 fct_reorderfct_reorder2this post上的好插图

标签: r ggplot2 facet facet-grid


【解决方案1】:

考虑按纬度对数据框进行排序,然后通过使用unique 将其级别定义为新的排序来重新分配位置因子变量:

# ORDER DATA FRAME BY ASCENDING LATITUDE
coral_data <- with(coral_data, coral_data[order(latitude),])    
# ORDER DATA FRAME BY DESCENDING LATITUDE
coral_data <- with(coral_data, coral_data[order(rev(latitude)),])

# ASSIGN site AS FACTOR WITH DEFINED LEVELS
coral_data$location <- with(coral_data, factor(as.character(location), levels = unique(location)))

ggplot(coral_data, ...)

【讨论】:

  • 非常感谢!我实际上是在考虑事先订购数据框,但我仍然对“因子变量”以及如何使用它感到困惑。
  • 很高兴听到并乐于提供帮助!编码愉快!
猜你喜欢
  • 2022-07-19
  • 2020-10-27
  • 1970-01-01
  • 2020-02-08
  • 1970-01-01
  • 1970-01-01
  • 2022-12-18
  • 2015-12-12
  • 2021-06-09
相关资源
最近更新 更多