为violin plot ggplot设置最小限制

4
我希望能够设置小提琴图的最小边界,类似于这个问题:设定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")

有趣的问题。如果您提供可重现的数据,您更有可能得到及时的回复。 - Tyler Rinker
1个回答

2

如果您调用 geom_blank(),ggplot 将会注意到 aes() 指令。

## 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()。)
(图像描述)

你的例子完美运行,但是它不能处理我的数据。我需要提供一个小样本。我需要找到一种方法来获取极值点。在我尝试设置的ymin之外的数据点会产生干扰吗? - d-cubed
1
@Donnied -- 是的,提供一个小的可重现的例子将会得到最有帮助的答案(而且在创建过程中你可能会自己发现问题)。 - Josh O'Brien
好建议。我不知道有多少次我制作可重现的示例,只是在创建示例时发现问题。+1答案和评论。 - Tyler Rinker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接