我正在尝试使用以下代码制作带有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个名字值。也许这就是问题?
答案 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()
这是你看到的水平线。
如果您将分类放在x轴上,而连续放在y上,则
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)