plot_neat | R Documentation |
Primarily for line and bar plots
for factorial designs. Otherwise (if no data_per_subject
is given)
descriptive dispersion plots (histogram, density, or box plots) for a
continuous variable. (For the latter, only the parameters values
,
parts
, part_colors
, and binwidth
are used, the rest are
ignored.)
plot_neat( data_per_subject = NULL, values = NULL, within_ids = NULL, between_vars = NULL, factor_names = NULL, value_names = NULL, y_title = NULL, reverse = FALSE, panels = NULL, type = "line", dodge = NULL, bar_colors = "viridis", line_colors = "viridis", row_number = 1, method = mean, eb_method = neatStats::mean_ci, numerics = FALSE, hush = FALSE, parts = c("h", "d", "n", "b"), part_colors = NULL, binwidth = NULL )
data_per_subject |
Data frame containing all values
(measurements/observations for a factorial design) in a single row per each
subject. Otherwise, if no data frame is given (default: |
values |
For plots of means (factorial designs): vector of strings;
column name(s) in the |
within_ids |
|
between_vars |
|
factor_names |
|
value_names |
|
y_title |
|
reverse |
Logical (default: |
panels |
|
type |
Strong: |
dodge |
Number. Specifies the amount by which the adjacent bars or dots
' |
bar_colors |
Vector of strings, specifying colors from which all colors
for any number of differing adjacent bars are interpolated. (If the number
of given colors equal the number of different bars, the precise colors will
correspond to each bar.) The default |
line_colors |
Vector of strings, specifying colors from which all colors
for any number of differing vertically aligned dots and corresponding lines
are interpolated. The default |
row_number |
Number. In case of multiple panels, the number of rows in
which the panels should be arranged. For example, with the default
|
method |
A function (default: |
eb_method |
A function (default: |
numerics |
If |
hush |
Logical. If |
parts |
For dispersion plots only (if no |
part_colors |
For dispersion plots only (if no |
binwidth |
For dispersion plots only (if no |
By default, a ggplot
plot object. (This object
may be further modified or adjusted via regular
ggplot
methods.) If so set (numerics
),
aggregated values as specified by the methods.
More than three factors is not allowed: it would make little sense and
it would be difficult to clearly depict in a simple figure. (However, you
can build an appropriate graph using ggplot
directly; but you can also just divide the data to produce several
three-factor plots, after which you can use e.g. ggpubr
's
ggarrange
to easily collate the plots.)
anova_neat
, mean_ci
, se
# assign random data in a data frame for illustration # (note that the 'subject' is only for illustration; since each row contains the # data of a single subject, no additional subject id is needed) dat_1 = data.frame( subject = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14), grouping1 = c(1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2), grouping2 = c(1, 2, 1, 2, 2, 1,2, 1,2,1, 1, 1, 2, 1), value_1_a = c(36.2, 45.2, 41, 24.6, 30.5, 28.2, 40.9, 45.1, 31, 16.9, 40.1, 42.1, 41, 12.9), value_2_a = c(-14.1, 58.5,-25.5, 42.2,-13, 4.4, 55.5,-28.5, 25.6,-37.1, 55.1,-38.5, 28.6,-34.1), value_1_b = c(83, 71, 111, 70, 92, 75, 110, 111, 110, 85, 132, 121, 151, 95), value_2_b = c(8.024,-14.162, 3.1,-2.1,-1.5, 0.91, 11.53, 18.37, 0.3,-0.59, 12.53, 13.37, 2.3,-3), value_1_c = c(27.4, -17.6, -32.7, 0.4, 37.2, 1.7, 18.2, 8.9, 1.9, 0.4, 2.7, 14.2, 3.9, 4.9), value_2_c = c(7.7,-0.8, 2.2, 14.1, 22.1,-47.7,-4.8, 8.6, 6.2, 18.2,-6.8, 5.6, 7.2, 13.2) ) head(dat_1) # see what we have # plot for factors 'grouping1', 'grouping2' plot_neat( data_per_subject = dat_1, values = 'value_1_a', between_vars = c('grouping1', 'grouping2') ) # same as above, but with bars and renamed factors plot_neat( data_per_subject = dat_1, values = 'value_1_a', between_vars = c('grouping1', 'grouping2'), type = 'bar', factor_names = c(grouping1 = 'experimental condition', grouping2 = 'gender') ) # same, but with different (lighter) gray scale bars plot_neat( dat_1, values = 'value_1_a', between_vars = c('grouping1', 'grouping2'), type = 'bar', factor_names = c(grouping1 = 'experimental condition', grouping2 = 'gender'), bar_colors = c('#555555', '#BBBBBB') ) # same, but with red and blue bars plot_neat( dat_1, values = 'value_1_a', between_vars = c('grouping1', 'grouping2'), type = 'bar', factor_names = c(grouping1 = 'experimental condition', grouping2 = 'gender'), bar_colors = c('red', 'blue') # equals c('#FF0000', '#0000FF') ) # within-subject factor for 'value_1_a' vs. 'value_1_b' vs. 'value_1_c' # (automatically named 'within_factor'), between-subject factor 'grouping1' plot_neat( dat_1, values = c('value_1_a', 'value_1_b', 'value_1_c'), between_vars = c('grouping1', 'grouping2') ) # same, but panelled by 'within_factor' plot_neat( dat_1, values = c('value_1_a', 'value_1_b', 'value_1_c'), between_vars = c('grouping1', 'grouping2'), panels = 'within_factor' ) # same, but SE for error bars instead of (default) SD plot_neat( dat_1, values = c('value_1_a', 'value_1_b', 'value_1_c'), between_vars = c('grouping1', 'grouping2'), panels = 'within_factor', eb_method = se ) # same, but 95% CI for error bars instead of SE # (arguably more meaningful than SEs) plot_neat( dat_1, values = c('value_1_a', 'value_1_b', 'value_1_c'), between_vars = c('grouping1', 'grouping2'), panels = 'within_factor', eb_method = mean_ci ) # same, but using medians and Median Absolute Deviations plot_neat( dat_1, values = c('value_1_a', 'value_1_b', 'value_1_c'), between_vars = c('grouping1', 'grouping2'), panels = 'within_factor', method = stats::median, eb_method = stats::mad ) # within-subject factor 'number' for variables with number '1' vs. number '2' # ('value_1_a' and 'value_1_b' vs. 'value_2_a' and 'value_2_b'), factor 'letter' # for variables with final letter 'a' vs. final letter 'b' ('value_1_a' and # 'value_2_a' vs. 'value_1_b' and 'value_2_b') plot_neat( dat_1, values = c('value_1_a', 'value_2_a', 'value_1_b', 'value_2_b'), within_ids = list( letters = c('_a', '_b'), numbers = c('_1', '_2') ) ) # same as above, but now including between-subject factor 'grouping2' plot_neat( dat_1, values = c('value_1_a', 'value_2_a', 'value_1_b', 'value_2_b'), within_ids = list( letters = c('_a', '_b'), numbers = c('_1', '_2') ), between_vars = 'grouping2' ) # same as above, but renaming factors and values for display plot_neat( dat_1, values = c('value_1_a', 'value_2_a', 'value_1_b', 'value_2_b'), within_ids = list( letters = c('_a', '_b'), numbers = c('_1', '_2') ), between_vars = 'grouping2', factor_names = c(numbers = 'session (first vs. second)'), value_names = c( '_1' = 'first', '_2' = 'second', '1' = 'group 1', '2' = 'group 2' ) ) # In real datasets, these could of course be more meaningful. For example, let's # say participants rated the attractiveness of pictures with low or high levels # of frightening and low or high levels of disgusting qualities. So there are # four types of ratings: # 'low disgusting, low frightening' pictures # 'low disgusting, high frightening' pictures # 'high disgusting, low frightening' pictures # 'high disgusting, high frightening' pictures # this could be meaningfully assigned e.g. as below pic_ratings = data.frame( subject = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), rating_fright_low_disgust_low = c(36.2, 45.2, 41, 24.6, 30.5, 28.2, 40.9, 45.1, 31, 16.9), rating_fright_high_disgust_low = c(-14.1, 58.5,-25.5, 42.2,-13, 4.4, 55.5,-28.5, 25.6,-37.1), rating_fright_low_disgust_high = c(83, 71, 111, 70, 92, 75, 110, 111, 110, 85), rating_fright_high_disgust_high = c(8.024,-14.162, 3.1,-2.1,-1.5, 0.91, 11.53, 18.37, 0.3,-0.59) ) head(pic_ratings) # see what we have # the same logic applies as for the examples above, but now the # within-subject differences can be more meaningfully specified, e.g. # 'disgust_low' vs. 'disgust_high' for levels of disgustingness, while # 'fright_low' vs. 'fright_high' for levels of frighteningness plot_neat( pic_ratings, values = c( 'rating_fright_low_disgust_low', 'rating_fright_high_disgust_low', 'rating_fright_low_disgust_high', 'rating_fright_high_disgust_high' ), within_ids = list( disgustingness = c('disgust_low', 'disgust_high'), frighteningness = c('fright_low', 'fright_high') ) ) # now let's say the ratings were done in two separate groups pic_ratings = data.frame( subject = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), group_id = c(1, 2, 1, 2, 2, 1, 1, 1, 2, 1), rating_fright_low_disgust_low = c(36.2, 45.2, 41, 24.6, 30.5, 28.2, 40.9, 45.1, 31, 16.9), rating_fright_high_disgust_low = c(-14.1, 58.5,-25.5, 42.2,-13, 4.4, 55.5,-28.5, 25.6,-37.1), rating_fright_low_disgust_high = c(83, 71, 111, 70, 92, 75, 110, 111, 110, 85), rating_fright_high_disgust_high = c(8.024,-14.162, 3.1,-2.1,-1.5, 0.91, 11.53, 18.37, 0.3,-0.59) ) # now include the 'group_id' factor in the plot plot_neat( pic_ratings, values = c( 'rating_fright_low_disgust_low', 'rating_fright_high_disgust_low', 'rating_fright_low_disgust_high', 'rating_fright_high_disgust_high' ), within_ids = list( disgustingness = c('disgust_low', 'disgust_high'), frighteningness = c('fright_low', 'fright_high') ), between_vars = 'group_id' ) ## DISPERSION PLOTS plot_neat(values = rnorm(100)) # with smaller binwidth (hence more bins) plot_neat(values = rnorm(100), binwidth = 0.2) # without normal distribution line plot_neat(values = rnorm(100), parts = c('h', 'd', 'b')) # without histrogram plot_neat(values = rnorm(100), parts = c('d', 'n', 'b')) # blue density, fully opaque histogram plot_neat(values = rnorm(100), part_colors = c(dc = 'blue', ha = 1))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.