ggplot2: create a box and whiskers plot with individual observations

流过昼夜 提交于 2021-01-29 10:45:34

问题


I am having problems to plot the individual observations. These are my data:

    Subject Part    Face_type   Microvolts
1   First Half  AF  -2.029166667
2   First Half  AF  -1.76
3   First Half  AF  -3.788333333
4   First Half  AF  -2.691666667
5   First Half  AF  0.335833333
6   First Half  AF  -4.719166667
7   First Half  AF  -0.920833333
8   First Half  AF  -1.719166667
9   First Half  AF  -6.115
10  First Half  AF  -0.4175
11  First Half  AF  -0.855833333
12  First Half  AF  0.1925
13  First Half  AF  -1.485833333
14  First Half  AF  -1.9475
15  First Half  AF  -0.790833333
16  First Half  AF  0.176666667
17  First Half  AF  -0.261666667
18  First Half  AF  -4.4275
1   Second Half AF  0.236666667
2   Second Half AF  -0.908333333
3   Second Half AF  -3.4925
4   Second Half AF  -3.7675
5   Second Half AF  -0.541666667
6   Second Half AF  -4.305
7   Second Half AF  -0.949166667
8   Second Half AF  -1.468333333
9   Second Half AF  -6.129166667
10  Second Half AF  -0.174166667
11  Second Half AF  -0.7575
12  Second Half AF  0.904166667
13  Second Half AF  -1.7625
14  Second Half AF  -2.234166667
15  Second Half AF  0.159166667
16  Second Half AF  0.474166667
17  Second Half AF  -1.435833333
18  Second Half AF  -4.614166667
1   First Half  TF  -0.81
2   First Half  TF  -1.419166667
3   First Half  TF  -2.945833333
4   First Half  TF  -1.939166667
5   First Half  TF  -0.000833333
6   First Half  TF  -3.699166667
7   First Half  TF  -1.020833333
8   First Half  TF  -0.878333333
9   First Half  TF  -5.41
10  First Half  TF  -0.2225
11  First Half  TF  -0.9775
12  First Half  TF  1.238333333
13  First Half  TF  -1.401666667
14  First Half  TF  -1.419166667
15  First Half  TF  -0.104166667
16  First Half  TF  0.4925
17  First Half  TF  -0.193333333
18  First Half  TF  -4.061666667
1   Second Half TF  -0.718333333
2   Second Half TF  -0.394166667
3   Second Half TF  -3.339166667
4   Second Half TF  -2.948333333
5   Second Half TF  -0.8475
6   Second Half TF  -4.2675
7   Second Half TF  -1.389166667
8   Second Half TF  -1.228333333
9   Second Half TF  -5.849166667
10  Second Half TF  -0.286666667
11  Second Half TF  -1.106666667
12  Second Half TF  0.520833333
13  Second Half TF  -1.615
14  Second Half TF  -1.583333333
15  Second Half TF  -0.500833333
16  Second Half TF  0.099166667
17  Second Half TF  -1.973333333
18  Second Half TF  -4.194166667
1   First Half  FF  -1.139166667
2   First Half  FF  -1.461666667
3   First Half  FF  -3.603333333
4   First Half  FF  -2.691666667
5   First Half  FF  0.97
6   First Half  FF  -3.825
7   First Half  FF  -1.723333333
8   First Half  FF  -1.726666667
9   First Half  FF  -6.478333333
10  First Half  FF  -0.664166667
11  First Half  FF  -0.856666667
12  First Half  FF  0.865833333
13  First Half  FF  -1.7675
14  First Half  FF  -1.761666667
15  First Half  FF  0.215833333
16  First Half  FF  0.409166667
17  First Half  FF  0.215833333
18  First Half  FF  -3.9975
1   Second Half FF  -0.809166667
2   Second Half FF  -1.581666667
3   Second Half FF  -3.0475
4   Second Half FF  -3.82
5   Second Half FF  0.370833333
6   Second Half FF  -4.259166667
7   Second Half FF  -1.445833333
8   Second Half FF  -1.485
9   Second Half FF  -6.015833333
10  Second Half FF  -0.145833333
11  Second Half FF  -1.303333333
12  Second Half FF  0.754166667
13  Second Half FF  -2.01
14  Second Half FF  -1.814166667
15  Second Half FF  0.336666667
16  Second Half FF  0.883333333
17  Second Half FF  -0.948333333
18  Second Half FF  -3.219166667
1   First Half  OF  -1.2525
2   First Half  OF  -1.6125
3   First Half  OF  -4.205
4   First Half  OF  -3.615
5   First Half  OF  0.1075
6   First Half  OF  -4.215
7   First Half  OF  -1.554166667
8   First Half  OF  -1.780833333
9   First Half  OF  -5.699166667
10  First Half  OF  -1.0875
11  First Half  OF  -0.975
12  First Half  OF  0.434166667
13  First Half  OF  -2.2
14  First Half  OF  -2.100833333
15  First Half  OF  -0.441666667
16  First Half  OF  0.373333333
17  First Half  OF  -0.549166667
18  First Half  OF  -5.225
1   Second Half OF  -0.935833333
2   Second Half OF  -1.391666667
3   Second Half OF  -3.8125
4   Second Half OF  -4.176666667
5   Second Half OF  -0.864166667
6   Second Half OF  -3.763333333
7   Second Half OF  -1.315
8   Second Half OF  -2.039166667
9   Second Half OF  -5.764166667
10  Second Half OF  -0.690833333
11  Second Half OF  -1.395833333
12  Second Half OF  0.755833333
13  Second Half OF  -1.914166667
14  Second Half OF  -2.210833333
15  Second Half OF  -0.945
16  Second Half OF  0.799166667
17  Second Half OF  -1.628333333
18  Second Half OF  -4.909166667

I have created a boxplot using ggplot2

myplot <- ggplot(dataM, aes(Part, Microvolts, fill = Face_type)) + geom_boxplot()

I want to add the individual scores for each face_type for both parts. For that I am using

myplot + geom_dotplot(binaxis='y', stackdir='center',dotsize = .5,fill="black")

However, the points are grouped by the different categories. I have also tried using

myplot + geom_point(position = "dodge")

But it doesn't work...

Any idea?

Thanks!


回答1:


Here is a possible approach:

ggplot(df, aes(Part,
               Microvolts,
               fill = Face_type)) +
  geom_boxplot() +
  geom_dotplot(binaxis = 'y',
               stackdir = 'center',
               dotsize = .5,
               position = position_dodge(width = 0.75)) #define position, I found the width by trying several different values (I believe the last time I did this it was 0.9)

If you want the dots not to be filled then you should remove the fill from aes in the call to ggplot (so it is not inherited by all the layers) and put it in geom_boxplot layer, and add a grouping variable to geom_dotplot (in this case the grouping is defined by the interaction of Face_type and Part.

ggplot(df, aes(x = Part,
               y = Microvolts)) +
  geom_boxplot(aes(fill = Face_type)) +
  geom_dotplot(aes(group = interaction(Face_type, Part)),
               binaxis = 'y',
               stackdir = 'center',
               dotsize = .5,
               position = position_dodge(width = 0.75))

same goes for points:

ggplot(df, aes(Part,
               Microvolts,
               fill = Face_type)) +
  geom_boxplot() +
  geom_point(position = position_dodge(width = 0.75))

data:

structure(list(Subject = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 
10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 1L, 2L, 3L, 4L, 
5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 
1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 
15L, 16L, 17L, 18L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 
11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 1L, 2L, 3L, 4L, 5L, 6L, 
7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 1L, 
2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 
16L, 17L, 18L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 
12L, 13L, 14L, 15L, 16L, 17L, 18L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 
8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L), Part = c("FirstHalf", 
"FirstHalf", "FirstHalf", "FirstHalf", "FirstHalf", "FirstHalf", 
"FirstHalf", "FirstHalf", "FirstHalf", "FirstHalf", "FirstHalf", 
"FirstHalf", "FirstHalf", "FirstHalf", "FirstHalf", "FirstHalf", 
"FirstHalf", "FirstHalf", "SecondHalf", "SecondHalf", "SecondHalf", 
"SecondHalf", "SecondHalf", "SecondHalf", "SecondHalf", "SecondHalf", 
"SecondHalf", "SecondHalf", "SecondHalf", "SecondHalf", "SecondHalf", 
"SecondHalf", "SecondHalf", "SecondHalf", "SecondHalf", "SecondHalf", 
"FirstHalf", "FirstHalf", "FirstHalf", "FirstHalf", "FirstHalf", 
"FirstHalf", "FirstHalf", "FirstHalf", "FirstHalf", "FirstHalf", 
"FirstHalf", "FirstHalf", "FirstHalf", "FirstHalf", "FirstHalf", 
"FirstHalf", "FirstHalf", "FirstHalf", "SecondHalf", "SecondHalf", 
"SecondHalf", "SecondHalf", "SecondHalf", "SecondHalf", "SecondHalf", 
"SecondHalf", "SecondHalf", "SecondHalf", "SecondHalf", "SecondHalf", 
"SecondHalf", "SecondHalf", "SecondHalf", "SecondHalf", "SecondHalf", 
"SecondHalf", "FirstHalf", "FirstHalf", "FirstHalf", "FirstHalf", 
"FirstHalf", "FirstHalf", "FirstHalf", "FirstHalf", "FirstHalf", 
"FirstHalf", "FirstHalf", "FirstHalf", "FirstHalf", "FirstHalf", 
"FirstHalf", "FirstHalf", "FirstHalf", "FirstHalf", "SecondHalf", 
"SecondHalf", "SecondHalf", "SecondHalf", "SecondHalf", "SecondHalf", 
"SecondHalf", "SecondHalf", "SecondHalf", "SecondHalf", "SecondHalf", 
"SecondHalf", "SecondHalf", "SecondHalf", "SecondHalf", "SecondHalf", 
"SecondHalf", "SecondHalf", "FirstHalf", "FirstHalf", "FirstHalf", 
"FirstHalf", "FirstHalf", "FirstHalf", "FirstHalf", "FirstHalf", 
"FirstHalf", "FirstHalf", "FirstHalf", "FirstHalf", "FirstHalf", 
"FirstHalf", "FirstHalf", "FirstHalf", "FirstHalf", "FirstHalf", 
"SecondHalf", "SecondHalf", "SecondHalf", "SecondHalf", "SecondHalf", 
"SecondHalf", "SecondHalf", "SecondHalf", "SecondHalf", "SecondHalf", 
"SecondHalf", "SecondHalf", "SecondHalf", "SecondHalf", "SecondHalf", 
"SecondHalf", "SecondHalf", "SecondHalf"), Face_type = c("AF", 
"AF", "AF", "AF", "AF", "AF", "AF", "AF", "AF", "AF", "AF", "AF", 
"AF", "AF", "AF", "AF", "AF", "AF", "AF", "AF", "AF", "AF", "AF", 
"AF", "AF", "AF", "AF", "AF", "AF", "AF", "AF", "AF", "AF", "AF", 
"AF", "AF", "TF", "TF", "TF", "TF", "TF", "TF", "TF", "TF", "TF", 
"TF", "TF", "TF", "TF", "TF", "TF", "TF", "TF", "TF", "TF", "TF", 
"TF", "TF", "TF", "TF", "TF", "TF", "TF", "TF", "TF", "TF", "TF", 
"TF", "TF", "TF", "TF", "TF", "FF", "FF", "FF", "FF", "FF", "FF", 
"FF", "FF", "FF", "FF", "FF", "FF", "FF", "FF", "FF", "FF", "FF", 
"FF", "FF", "FF", "FF", "FF", "FF", "FF", "FF", "FF", "FF", "FF", 
"FF", "FF", "FF", "FF", "FF", "FF", "FF", "FF", "OF", "OF", "OF", 
"OF", "OF", "OF", "OF", "OF", "OF", "OF", "OF", "OF", "OF", "OF", 
"OF", "OF", "OF", "OF", "OF", "OF", "OF", "OF", "OF", "OF", "OF", 
"OF", "OF", "OF", "OF", "OF", "OF", "OF", "OF", "OF", "OF", "OF"
), Microvolts = c(-2.029166667, -1.76, -3.788333333, -2.691666667, 
0.335833333, -4.719166667, -0.920833333, -1.719166667, -6.115, 
-0.4175, -0.855833333, 0.1925, -1.485833333, -1.9475, -0.790833333, 
0.176666667, -0.261666667, -4.4275, 0.236666667, -0.908333333, 
-3.4925, -3.7675, -0.541666667, -4.305, -0.949166667, -1.468333333, 
-6.129166667, -0.174166667, -0.7575, 0.904166667, -1.7625, -2.234166667, 
0.159166667, 0.474166667, -1.435833333, -4.614166667, -0.81, 
-1.419166667, -2.945833333, -1.939166667, -0.000833333, -3.699166667, 
-1.020833333, -0.878333333, -5.41, -0.2225, -0.9775, 1.238333333, 
-1.401666667, -1.419166667, -0.104166667, 0.4925, -0.193333333, 
-4.061666667, -0.718333333, -0.394166667, -3.339166667, -2.948333333, 
-0.8475, -4.2675, -1.389166667, -1.228333333, -5.849166667, -0.286666667, 
-1.106666667, 0.520833333, -1.615, -1.583333333, -0.500833333, 
0.099166667, -1.973333333, -4.194166667, -1.139166667, -1.461666667, 
-3.603333333, -2.691666667, 0.97, -3.825, -1.723333333, -1.726666667, 
-6.478333333, -0.664166667, -0.856666667, 0.865833333, -1.7675, 
-1.761666667, 0.215833333, 0.409166667, 0.215833333, -3.9975, 
-0.809166667, -1.581666667, -3.0475, -3.82, 0.370833333, -4.259166667, 
-1.445833333, -1.485, -6.015833333, -0.145833333, -1.303333333, 
0.754166667, -2.01, -1.814166667, 0.336666667, 0.883333333, -0.948333333, 
-3.219166667, -1.2525, -1.6125, -4.205, -3.615, 0.1075, -4.215, 
-1.554166667, -1.780833333, -5.699166667, -1.0875, -0.975, 0.434166667, 
-2.2, -2.100833333, -0.441666667, 0.373333333, -0.549166667, 
-5.225, -0.935833333, -1.391666667, -3.8125, -4.176666667, -0.864166667, 
-3.763333333, -1.315, -2.039166667, -5.764166667, -0.690833333, 
-1.395833333, 0.755833333, -1.914166667, -2.210833333, -0.945, 
0.799166667, -1.628333333, -4.909166667)), class = "data.frame", row.names = c(NA, 
-144L))


来源:https://stackoverflow.com/questions/51018282/ggplot2-create-a-box-and-whiskers-plot-with-individual-observations

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!