我正在尝试创建一个Boxplot / Scatterplot组合。到目前为止,我对它做得还不错,但有一个问题让我感到非常烦恼,我一直无法弄明白。我在R,我已经安装了ggplot2包。这是我正在使用的代码:
#(xx= stand in for my data set, which I imported from excel with the
# column labels as the X-axis values)
> boxplot(xx, lwd = 1.5, ylab = 'Minutes', xlab = "Epoch")
> stripchart(xx, vertical = TRUE,
+ method = "jitter", add = TRUE, pch = 20, col = 'blue')
这给了我一个非常接近我想要的情节,但问题是异常值被放置在图表上两次。如果可能的话,我想让条形图排除它们(最高的蓝点组)并且只使用箱形图中的那些(黑色轮廓圆圈),这样它们就会脱颖而出并且看起来不那么草率。
我试图通过在stripchart命令中添加许多不同的异常值参数来改变有问题的点,遗憾的是没有运气。我已经尝试将y-limits设置为低于其值,尝试使用outline = false(完全删除条形图),尝试更改异常值颜色,outpch等。该命令不适用于任何这些尝试。这是ylim的一个例子:
> stripchart(xx, vertical = TRUE,
+ method = "jitter", add = TRUE, pch = 20, col = 'blue', ylim = true,
ylim (0,20))
ylim(0,20)中的错误:找不到函数“ylim”
这是一个异常颜色的例子:
> stripchart(xx vertical = TRUE,
+ method = "jitter", add = TRUE, pch = 20, col = 'blue', outcol = "black")
警告讯息:
1:在plot.xy(xy.coords(x,y),type = type,...)中:“outcol”不是 图形参数
.......#警告信息继续如此。
条形图是否能够排除异常值?或者我还没有充分了解它们(以及R作为一个整体,就此而言)有效地编写代码?
如果可以这样做,我该怎么办?只要视图上的视觉效果相同,我就完全没有直接解决数据方面的异常问题的解决方案。
感谢您的时间和任何帮助!
编辑:这是一些可以使用的数据。顶行是列标签,数据在下面。很抱歉,如果这种格式是坏的。第29行和第10行等数据中的第29行和第10行等,是我的图表中作为异常值绘制的一些点的示例,我想保留在箱线图中而不是散点图中/带状图。
1 5 10 15 30 60
7.233333333 8.166666667 9.666666667 7.75 9 7
7.133333333 9.25 9.333333333 9.75 10 11
0.733333333 0.5 0.833333333 1 1 0
1.766666667 1.166666667 1 0.75 1 0
1.75 2.25 2.333333333 2.25 1 1
6.75 7 7.166666667 7.75 6.5 7
1.516666667 1.75 1.333333333 2 2 2
1.533333333 1.5 2 1.25 1.5 2
27.3 28.33333333 29.33333333 30.25 28.5 29
6.35 6 6.333333333 7 6 6
7.083333333 8.333333333 8.833333333 8.75 8 8
8.533333333 10.08333333 10.5 12 10.5 11
7.65 8.416666667 9 10.75 9 12
6.85 7.333333333 8 7.25 6 8
4.433333333 5 5.5 5 6.5 6
8.616666667 10 11.66666667 12.25 13 12
3.633333333 3.75 3.5 3.25 3 2
0.8 0.75 0.833333333 1 1 0
7.283333333 8.583333333 9.666666667 9.75 12 8
7.483333333 8.75 8.333333333 7.75 6.5 7
3.466666667 2.916666667 3.166666667 2.5 2 0
5.483333333 6.416666667 6.833333333 6.75 7 8
答案 0 :(得分:0)
这里有一些事情发生。如果您想坚持基础绘图功能(boxplot()
和stripchart()
),您只需告诉stripchart
仅绘制某些标准内的点。异常值的通用标准是距离均值3个或更多标准差的任何点。我们不是将未经修改的数据集传递给stripchart
,而是将该数据集分组(请注意[ ]
括号)。
boxplot(xx)
stripchart(xx[xx <= mean(xx) + sd(xx) * 3], vertical = T, method = 'jitter', add = T, pch = 20, col = 'blue')
当然,如果您确实想要使用ggplot2
(我建议不仅要安装该软件包,而是整个 tidyverse 安装install.packages('tidyverse')
),您可以生成一个可以说是更好的情节:
生成ggplot版本所需的数据格式和命令与基本图形版本完全不同,超出了本答案的范围。可重现的代码如下。
library(tidyverse)
df <- structure(list(X1 = c(7.233333333, 7.133333333, 0.733333333, 1.766666667, 1.75, 6.75, 1.516666667, 1.533333333, 27.3, 6.35, 7.083333333, 8.533333333, 7.65, 6.85, 4.433333333, 8.616666667, 3.633333333, 0.8, 7.283333333, 7.483333333, 3.466666667, 5.483333333 ), X5 = c(8.166666667, 9.25, 0.5, 1.166666667, 2.25, 7, 1.75, 1.5, 28.33333333, 6, 8.333333333, 10.08333333, 8.416666667, 7.333333333, 5, 10, 3.75, 0.75, 8.583333333, 8.75, 2.916666667, 6.416666667 ), X10 = c(9.666666667, 9.333333333, 0.833333333, 1, 2.333333333, 7.166666667, 1.333333333, 2, 29.33333333, 6.333333333, 8.833333333, 10.5, 9, 8, 5.5, 11.66666667, 3.5, 0.833333333, 9.666666667, 8.333333333, 3.166666667, 6.833333333), X15 = c(7.75, 9.75, 1, 0.75, 2.25, 7.75, 2, 1.25, 30.25, 7, 8.75, 12, 10.75, 7.25, 5, 12.25, 3.25, 1, 9.75, 7.75, 2.5, 6.75), X30 = c(9, 10, 1, 1, 1, 6.5, 2, 1.5, 28.5, 6, 8, 10.5, 9, 6, 6.5, 13, 3, 1, 12, 6.5, 2, 7), X60 = c(7L, 11L, 0L, 0L, 1L, 7L, 2L, 2L, 29L, 6L, 8L, 11L, 12L, 8L, 6L, 12L, 2L, 0L, 8L, 7L, 0L, 8L)), .Names = c("X1", "X5", "X10", "X15", "X30", "X60"), class = "data.frame", row.names = c(NA, -22L))
df.long <- gather(df, x, value) %>%
mutate(x = as.factor(as.numeric(gsub('X', '', x)))) %>%
group_by(x) %>%
mutate(is.outlier = value > mean(value) + sd(value) * 3)
plot.df <- ggplot(data = df.long, aes(x = x, y = value, group = x)) +
geom_boxplot() +
geom_point(data = filter(df.long, !is.outlier), color = '#0000ff88', position = position_jitter(width = 0.1))
print(plot.df)