[英]Using coord_flip() with facet_wrap(scales = “free_y”) in ggplot2 seems to give unexpected facet axis tick marks and tick labels
[英]ggplot 0.9.3 issue with facet_wrap, free scales and coord_flip - 2nd try
曾经完美运行的旧代码不再适用于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。 还有其他方法可以改变刻面轴吗? 免费秤对我很重要。 感谢您的指导。
这是我第二次或第三次遇到这个问题。 我发现可以通过定义自定义几何来破解自己的解决方案。
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代码,然后切换x和y引用以在标准笛卡尔协调器中创建水平条形图。
请注意,您必须使用position='identity'
,也可能使用stat='identity'
才能正常工作。 如果您需要使用身份以外的其他职位,则必须编辑碰撞函数才能使其正常工作。
2016年末更新: coord_flip
的开发版本中已修复带有coord_flip
, facet_grid
和scales="free"
的ggplot2
。 您可以使用安装
install.packages("devtools")
devtools::install_github("hadley/ggplot2")
注意, free_y
根据需要尝试使用free_x
和free_y
,因为在翻转坐标时并不能始终清楚x
和y
含义。
好像您所要求的(如果我对问题的理解正确)已经被开发人员提出,他们将不会实现。 看这里:
https://github.com/hadley/ggplot2/issues/95
因此,我想您需要找到一种解决方法。 这是一个应该起作用的快速想法:使用facet_grid
而不是“ facet_wrap”,然后coord_flip()应该起作用。 然后将图片另存为pdf(或svg)并在某种矢量图形软件中重新布置图-我建议使用Inkscape ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.