【问题标题】:Keep same order as in data files when using ggplot使用 ggplot 时保持与数据文件相同的顺序
【发布时间】:2013-01-18 15:34:53
【问题描述】:

我正在使用下面的附加数据来制作箱线图。 数据链接 https://www.dropbox.com/s/dt1nxnkhq90nea4/GTAP_Sims.csv

到目前为止,我正在使用以下代码:

# Distribution of EV for all regions under the BASE scenario

evBASE.f <- subset(ccwelfrsts, tradlib =="BASE")
p <- ggplot(data = evBASE.f, aes(factor(region), ev))
p + geom_boxplot() + 
    theme(axis.text.x = element_text(colour = 'black', angle = 90, size = 16)) +
    theme(axis.text.y = element_text(colour = 'black', size = 16))

它再现了如下图: 阴谋 file:///C:/Users/iouraich/Documents/ggplot_Results.htm

我在这里寻找的是让图中的 x 轴与 csv 文件中标题“区域”的顺序相匹配。

ggplot 中是否有任何选项可以对此进行控制?

非常感谢

【问题讨论】:

  • 这里有一些问题。首先,我们看不到您的目标是什么类型的情节,因为您提供的链接是本地系统上的文件,而不是网络上的某个文件。其次,虽然您提供了数据链接(谢谢),但最好包含读取数据的代码,以便我们可以准确地重现您的步骤。第三,是的,ggplot 可能可以为所欲为。
  • @SlowLearner:感谢您的建议。下次我寻求帮助时,我会记住这一点:)

标签: r ggplot2


【解决方案1】:

基本上你只需要region &lt;- factor(region,levels=unique(region)) 来指定它们在数据中出现的顺序。

基于您提供的数据的完整解决方案:

ccwelfrsts <- read.csv("GTAP_Sims.csv")
## unmangle data
ccwelfrsts[5:8] <- sapply(ccwelfrsts[5:8],as.numeric)
evBASE.f <- droplevels(subset(ccwelfrsts, tradlib =="BASE"))
## reorder region levels
evBASE.f <- transform(evBASE.f,region=factor(region,levels=unique(region)))
library(ggplot2)
theme_set(theme_bw())
p <- ggplot(data = evBASE.f, aes(region, ev))
p + geom_boxplot() + 
    theme(axis.text.x = element_text(colour = 'black', angle = 90, size = 16)) +
    theme(axis.text.y = element_text(colour = 'black', size = 16))+
    xlab("")

您可以考虑切换图形的方向(通过coord_flip 或通过显式切换 x 和 y 轴映射)以使标签更易于阅读,尽管 y 轴上的数字响应布局更熟悉大多数观众。

【讨论】:

  • 非常感谢。这使得它更容易,而不是每次在 aes() 中手动指定顺序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 2018-09-10
  • 2020-08-10
相关资源
最近更新 更多