0

曾经完美运行的旧代码不再适用于 0.9.3。该问题与刻面、自由音阶和坐标翻转的使用有关。

这是一种重现的方法:

数据集:d.csv:

"Priority","Owner","Project"
"Medium","owner7","Team4"
"Medium","owner1","Team1"
"Low","","Team3"
"High","owner6","Team3"
"Medium","","Team4"
"Medium","owner3","Team1"
"Medium","owner2","Team1"
"Medium","owner5","Team2"
"Low","owner4","Team2"
"Critical","","Team2"
"Medium","owner2","Team1"
"High","","Team4"

代码:

data <- read.csv(file="d.csv",head=TRUE)
attach(data)

p3 <- ggplot(data,aes(x=Owner,fill=Priority))+
geom_bar(aes(y=..count..)) + 
facet_wrap(~ Project, nrow=2, scales="free") +
opts(legend.position="none") 

这会创建一个多面图,但我需要翻转轴。以前,添加 coord_flip() 可以解决问题,但现在新的 ggplot 不允许同时使用自由比例和 coord_flip。有没有其他方法可以转动刻面轴?自由秤对我很重要。感谢您的任何指示。

4

3 回答 3

1

这是我自己第二次或第三次遇到这个问题。我发现我可以通过定义自定义几何来破解自己的解决方案。

geom_bar_horz <- function (mapping = NULL, data = NULL, stat = "bin", position = "stack", ...) {
  GeomBar_horz$new(mapping = mapping, data = data, stat = stat, position = position, ...)
}

GeomBar_horz <- proto(ggplot2:::Geom, {
  objname <- "bar_horz"

  default_stat <- function(.) StatBin
  default_pos <- function(.) PositionStack
  default_aes <- function(.) aes(colour=NA, fill="grey20", size=0.5, linetype=1, weight = 1, alpha = NA)

  required_aes <- c("y")

  reparameterise <- function(., df, params) {
    df$width <- df$width %||%
      params$width %||% (resolution(df$x, FALSE) * 0.9)
    OUT <- transform(df,
              xmin = pmin(x, 0), xmax = pmax(x, 0),
              ymin = y - .45, ymax = y + .45, width = NULL
    )
    return(OUT)
  }

  draw_groups <- function(., data, scales, coordinates, ...) {
    GeomRect$draw_groups(data, scales, coordinates, ...)
  }
  guide_geom <- function(.) "polygon"
})

这只是从 ggplot2 github 复制 geom_bar 代码,然后切换xy引用以在标准笛卡尔坐标系中制作水平条形图。

请注意,您必须使用position='identity'并且可能还stat='identity'为此工作。如果您需要使用身份以外的位置,则必须编辑碰撞功能才能使其正常工作。

于 2014-07-10T21:15:58.730 回答
1

2016 年末更新:此错误与coord_flip,facet_gridscales="free"已在ggplot2. 你可以安装它

install.packages("devtools")
devtools::install_github("hadley/ggplot2")

free_x请注意,free_y根据您的需要尝试两者,因为当您翻转坐标时,并不总是清楚什么x和意味着什么。y

于 2016-10-19T06:29:30.847 回答
0

似乎您的要求(如果我正确理解了这个问题)之前已经向开发人员提出过,他们不会实现它。看这里:

https://github.com/hadley/ggplot2/issues/95

所以我想你需要找到一个解决方法。这是一个应该可行的快速想法:使用facet_grid而不是“facet_wrap”,然后 coord_flip() 应该可以工作。然后将图片保存为 pdf(或 svg)并在某种矢量图形软件中重新排列图 - 我建议使用 Inkscape ...

于 2013-05-16T14:59:39.503 回答