2012-10-27 25 views
4

我想设定的最低界限为小提琴情节,类似这样的问题:set only lower bound of a limit for ggplot设定下限ggplot

对于这一点:

p <- ggplot(somedf, aes(factor(user1), pq)) + aes(ymin = -50) 
p + geom_violin(aes(fill = user1))+ aes(ymin=-50) 

我试着加入

+ expand_limits(y=-50) 

+ aes(ymin = -50) 

设置下限,不起作用。

下面是一个示例数据帧导致了同样的问题:

structure(list(pq = c(-20L, -12L, 10L, -13L, 11L, -16L), time = c(1214.1333, 
1214.1833, 1214.2667, 1214.2833, 1214.35, 1214.5167), pq.1 = c(-20L, 
-12L, 10L, -13L, 11L, -16L), time.1 = c(1214.1333, 1214.1833, 
1214.2667, 1214.2833, 1214.35, 1214.5167), time.2 = c(1214.1333, 
1214.1833, 1214.2667, 1214.2833, 1214.35, 1214.5167), pq.2 = c(-20L, 
-12L, 10L, -13L, 11L, -16L), user1 = structure(c(1L, 1L, 2L, 
1L, 2L, 1L), .Label = c("someguy3", "someguy4", "someguy6", "someguy4", 
"someguy5", "someguy6"), class = "factor"), pq.3 = c(-20L, -12L, 10L, 
-13L, 11L, -16L), time.3 = c(1214.1333, 1214.1833, 1214.2667, 
1214.2833, 1214.35, 1214.5167), user1.1 = structure(c(1L, 1L, 
2L, 1L, 2L, 1L), .Label = c("someguy3", "someguy4", "someguy6", 
"someguy4", "someguy5", "someguy6"), class = "factor")), .Names = c("pq", 
"time", "pq.1", "time.1", "time.2", "pq.2", "user1", "pq.3", 
"time.3", "user1.1"), row.names = c(565L, 566L, 568L, 569L, 570L, 
574L), class = "data.frame") 
+0

有趣的问题。如果您提供可复制的数据,则您更有可能得到及时的答复。 –

回答

2

ggplot将注重aes()指令,如果添加了一个调用geom_blank()

## A reproducible example 
library(ggplot2) 
p <- ggplot(mtcars, aes(factor(cyl), mpg)) 

## This doesn't work: 
p + aes(ymin = -10) + geom_violin() 

## But this does:  
p + aes(ymin = -10) + geom_violin() + geom_blank() 

(注:在这个例子中,至少expand_limits(y = -10)作品有或没有伴随调用geom_blank()

enter image description here

+0

你的例子完美地工作,但它不适用于我的数据。我将不得不提供一个小样本。我需要找到一种方法来抓住极端的点。我试图设置的ymin之外的数据点会干扰吗? – Donnied

+1

@Donnied - 是的,提供一个可重复使用的小例子将为您提供最有帮助的答案(您可以在创建过程中自己发现问题)。 –

+0

很好的建议。我不知道发生过多少次这样的事情,我只是为了发现创建代表行为中的问题而做出可重复的例子。例。 +1回答和评论 –