使用ggplot boxplot进行位置躲避警告?

时间:2011-12-15 15:32:09

标签: r ggplot2

我正在尝试使用以下代码制作带有ggplot2的boxplot:

p <- ggplot(data, aes(d$score, reorder(d$names d$scores, median))) + geom_boxplot()

我有称为分数的名称和整数因子。

我的代码生成了一个图,但图形没有描绘框(只显示行),我收到一条警告信息,“position_dodge需要非重叠的x区间。”我试图用geom_boxplot(width=5)调整高度和宽度,但这似乎无法解决问题。任何人都可以建议解决我的问题吗?

我应该指出我的箱图很大,在y轴上有大约200个名字值。也许这就是问题?

3 个答案:

答案 0 :(得分:25)

团体数量不是问题;即使只有2组,我也可以看到同样的事情。问题是ggplot2垂直绘制箱形图(沿y连续,沿x分类)并且您试图水平绘制它们(沿x连续,沿y分类)。

此外,您的示例有几个语法错误,因为我们没有data / d而无法重现。

从一些模拟数据开始

dat <- data.frame(scores=rnorm(1000,sd=500), 
                  names=sample(LETTERS, 1000, replace=TRUE))

更正了示例代码的版本:

ggplot(dat, aes(scores, reorder(names, scores, median))) + geom_boxplot()

ggplot(dat, aes(scores, reorder(names, scores, median))) + geom_boxplot()

这是你看到的水平线。

如果您将分类放在x轴上,而连续放在y上,则

ggplot(dat, aes(reorder(names, scores, median), scores)) + geom_boxplot()

ggplot(dat, aes(reorder(names, scores, median), scores)) + geom_boxplot()

最后,如果要翻转坐标轴,可以使用coord_flip()。如果您正在做更复杂的事情,可能会有一些额外的问题,但对于基本的箱形图,它可以工作。

ggplot(dat, aes(reorder(names, scores, median), scores)) + 
  geom_boxplot() + coord_flip()

ggplot(dat, aes(reorder(names, scores, median), scores)) + geom_boxplot() + coord_flip()

答案 1 :(得分:1)

万一其他人想知道他们在看什么 为什么

警告消息:

position_dodge需要不重叠的x间隔

为什么会这样

发生这种情况的原因是,某些箱形图/小提琴图(或其他图类型)可能重叠。在许多情况下,您可能并不在意,但在某些情况下,这很重要,因此为什么它会警告您。

如何修复

您有两个选择。 suppress warnings when generating/printing the ggplot

另一种选择,只需更改图的宽度,以使图不重叠,然后警告消失。尝试将width参数更改为geom:例如geom_boxplot(width = 0.5)(与geom_violin()相同)

答案 2 :(得分:0)

除了@stevec的选项外,如果看到的话

  • position_stack requires non-overlapping x intervals
  • position_fill requires non-overlapping x intervals
  • position_dodge requires non-overlapping x intervals
  • position_dodge2 requires non-overlapping x intervals

,如果您的x变量应该针对不同的美学效果(例如填充)重叠,则可以尝试将x_var变成一个因子:

geom_bar(aes(x = factor(x_var), fill = type)