forest_plot: Create a forest plot

View source: R/forest_plot.R

forest_plotR Documentation

Create a forest plot

Description

forest_plot creates a forest plot of AUC and Cmax ratios from Simcyp Simulator results. Please use the function pk_table with the argument "extract_forest_data" set to TRUE to generate the simulated input data for forest_dataframe. This function will also work with observed data; please see notes for the argument "observed_PK" for how to include observed data.

In the graph, data will be broken up on the y axis by the simulation file name and, optionally, along the x axis by anything you specify for facet_column_x. Since file names do not generally make the most lovely of y axis labels, please use the argument y_axis_labels to specify how you'd like your y axis to look. If you're a little confused here or you're just the kind of person who prefers to wing it rather than, say, reading the instructions when assembling furniture, we recommend skipping to the end of this help file and trying out the examples to see what we mean.

Usage

forest_plot(
  forest_dataframe,
  y_axis_labels,
  y_order = NA,
  PKparameters = NA,
  observed_PK = NA,
  use_AUCt_when_AUCinf_NA = FALSE,
  include_AUCt_for_AUCinf_caption = TRUE,
  facet_column_x,
  facet_title_x = NA,
  show_numbers_on_right = FALSE,
  mean_type = "geometric",
  variability_type = "90% CI",
  x_axis_limits = NA,
  x_axis_title = NA,
  x_axis_number_type = "ratios",
  x_order = NA,
  y_axis_title = "none",
  pad_y_axis = TRUE,
  legend_position = "none",
  color_set = "grays",
  point_shape = c(24, 21),
  point_color_column,
  point_color_set = "default",
  angle_x_axis_text = 0,
  graph_title = NA,
  graph_title_size = 14,
  table_title = NA,
  rel_widths = c(5, 1),
  prettify_ylabel = NA,
  PK_labels = NA,
  include_dose_num = NA,
  include_ratio_in_labels = TRUE,
  error_bar_height = NA,
  show_borders = TRUE,
  vline_at_1 = "gray dashed",
  dose_units = "mg",
  save_graph = NA,
  return_caption = FALSE,
  fig_height = 6,
  fig_width = 5,
  prettify_compound_names = NA
)

Arguments

forest_dataframe

a data.frame with extracted forest-plot data, generated from running pk_table with the argument extract_forest_data set to TRUE on Simulator output files. This can also included observed PK data. Alternatively, if you already have some saved forest-plot data, supply a csv or Excel file with the same data. (If it's an Excel file, it must have only one tab.) The following columns are required:

File

Simulation file name. You can hack this and set the values to whatever you want rather than simulation file names, but this column is what will be used for grouping simulations on the y axis.

PKparameter

the specific PK parameter being compared. This must be one of the standardized, coded options that you can see by running view(PKParameterDefinitions) and looking in the column "PKparameter".

at least one of "mean", "median", or "geomean" (not case sensitive)

This column will be used for the center statistic.

at least one pair of "CI90_lower" and "CI90_upper", "Per5" and "Per95", "Minimum" and "Maximum", or at least one of "GCV" (geometric coefficient of variation), "CV" (arithmetic CV), or "SD" (standard deviation)

These columns will be used for the whiskers. Not case sensitive.

any column you want to facet by

If you want to break up your graphs along the x axis, you must include the column you want to use to do that.

y_axis_labels

a column in forest_dataframe (unquoted) or a named character vector (each item in quotes) to use for labeling the simulations on the y axis. In all forest plots, the y axis will be broken up by the simulation file name behind the scenes, but that's likely not the prettiest way to label the y axis, which is where this argument comes in. If you already have a column in forest_dataframe with the label you want – for example the column "Perpetrator" when your drug of interest is a victim or "Victim" when it's the perpetrator – use that by specifying, for example, y_axis_labels = Perpetrator. You can optionally make the compound names prettier automatically with the argument prettify_ylabel. If you would like to manually specify which simulation file should be labeled what here, do so with a named character vector, e.g., y_axis_labels = c("myfile1.xlsx" = "itraconazole", "myfile2.xlsx" = "efavirenz"). If left as NA, we'll use the simulation file names.

y_order

optionally set the order of simulation files on the y axis. If y_order is left as NA, the y axis will be sorted according to the AUC ratio with inhibitors on top and inducers on the bottom. If you would like to use some other order, there are four possible ways to specify this:

"as is"

If you're already happy with the order of things in the input data forest_dataframe, then setting y_order = "as is" will keep things in exactly the same order.

a character vector of whatever you want for y axis labels

e.g., y_order = c("myfile1.xlsx", "myfile2.xlsx") if the y axis is just going to show file names or, if, say, you've got it set to show specific labels for those file names, then those labels, e.g., if you set y_axis_labels like this: y_axis_labels = ("myfile1.xlsx" = "itraconazole", "myfile2.xlsx" = "efavirenz") then you would set the y_order like this: y_order = c("itraconazole", "efavirenz")

"strongest inhibitor to strongest inducer"

Sort the simulations from top to bottom by AUC ratio from the strongest inhibitor (largest AUC ratio) to the strongest inducer (smallest AUC ratio). (The Cmax ratio will be used if you didn't include AUC.) This is the default option and what you get when y_order is left as NA.

"strongest inducer to strongest inhibitor"

Sort the simulations from top to bottom by AUC ratio from the strongest inducer (smallest AUC ratio) to the strongest inhibitor (largest AUC ratio). (The Cmax ratio will be used if you didn't include AUC.)

PKparameters

optionally specify which PK parameters in forest_dataframe to use as input. If left as NA, all the PK parameters included in forest_dataframe will be included. If you try to include a parameter that's not already present in forest_dataframe, it will be ignored. User a character vector here, e.g., PKparameters = c("AUCinf_dose1", "Cmax_dose1")

observed_PK

observed PK data, with the following columns:

File

the simulation file you'd like the observed data to be graphed next to. If you only have observed data, that's fine: Use a made-up file name here instead. Think of the column "File" as "the set of data to use to create one row in the forest plot". If you have more than one set of observed data without matching simulated data, just use one dummy file name for each.

PKparameter

the specific PK parameter being compared. This must be one of the standardized, coded options that you can see by running view(PKParameterDefinitions) and looking in the column "PKparameter". These MUST EXACTLY match what was used for the simulated data. We get that it's annoying that these must be set up with these coded names, but they have to match exactly to get displayed nicely in the final graph.

at least one of "mean", "median", or "geomean" (not case sensitive)

This column will be used for the center statistic. Whatever statistic you use must be the same for both observed and simulated data.

at least one pair of "CI90_lower" and "CI90_upper", "Per5" and "Per95", "Minimum" and "Maximum", or at least one of "GCV" (geometric coefficient of variation), "CV" (arithmetic CV), or "SD" (standard deviation)

Optional for observed data. These columns will be used for the whiskers. Not case sensitive.

whatever column you specified for y_axis_labels for the simulated data

If you're making a forest plot of perpetrators, for example, and you labeled the y axis according to the values in the column "Inhibitor1", make sure that "Inhibitor1" is included in your observed PK.

any column you want to facet by

If you want to break up your graphs along the x axis, you must include the column you want to use to do that. If you included it for your simulated data, you must include it for your observed.

use_AUCt_when_AUCinf_NA

TRUE or FALSE (default) for whether to swap out AUCt for dose 1 when the Simulator failed to extrapolate to infinity. Here's the deal: If you have some simulations with AUCinf for dose 1 and then some where you have AUCt, you'll have both AUCinf and AUCt on the y axis for all the simulations but there will only be points for AUCt for the simulations where extrapolation failed. That makes a graph that's a little redundant and even a little confusing. If you set this to TRUE, we will use AUCt whenever AUCinf wasn't available and we will not include AUCt on the graph.

include_AUCt_for_AUCinf_caption

TRUE (default) or FALSE for whether to include a caption on the forest plot noting which simulations had AUCt used in place of AUCinf when the Simulator had trouble extrapolating to infinity. This only applies when use_AUCt_when_AUCinf_NA = TRUE

facet_column_x

optionally break up the graph horizontally into small multiples. The designated column name should be unquoted, e.g., facet_column_x = Dose_sub. This would also allow you to potentially use the same value for y_axis_labels for multiple simulations. For example, say you have one simulation – "SimA.xlsx" – where the substrate was dosed QD and another simulation – "SimB.xlsx" – where it was dosed BID, and both of them were co-administered with the inhibitor itraconazole. You want the y axis labels to show what perpetrator was used in each simulation, and both of these used the same inhibitor. If you break up your graphs by setting facet_column_x to whatever column you used to indicate the dosing regimen, then "SimA.xlsx" and "SimB.xlsx" won't overlap on the graph even though they both had the same perpetrator. That's the reason it's ok here. Unclear? Please check out the examples at the bottom, particularly the ones that employ facet_column_x.

facet_title_x

title to use for the facet column along the x axis

show_numbers_on_right

TRUE or FALSE (default) for whether to show the numbers used for the centre statistic (the point) and any variability (the error bars). This only works when the graph has not been facetted along the x direction. If it's facetted along the x direction, it wouldn't be clear which numbers belonged to which facet.

mean_type

type of mean to graph; options are "geometric" (default), "arithmetic", or "median", but this only works when those data are included in forest_dataframe. If you list the mean type as "mean", we'll assume you want arithmetic means.

variability_type

type of variability to show as whiskers; options are "90% CI" (default, geometric), "5th to 95th percentiles", "range", "geometric CV" ("geoCV" or "GCV" are fine), "arithmetic CV" ("CV" is fine), or "standard deviation" ("sd" is also ok for that last one, and it's arithmetic).

x_axis_limits

the x axis limits to use; default is 0.06 to 12.

x_axis_title

optionally supply a character vector or an expression to use for the x axis title

x_axis_number_type

set the x axis number type to be "ratios" (default), "percents" (converts the ratios to a percent), or "keep trailing zeroes" (still uses ratios but, unlike the default, guesses at a reasonable number of digits to include based on the range of the data and includes trailing zeroes as necessary)

x_order

optionally specify the order in which the x-axis facets should appear. For example, if you facet_column_x is the dosing regimen and the values there are "QD" and "BID", the default will be to show them in alphabetical order. If you want "QD" to show up first, though, set the order with x_order = c("QD", "BID")

y_axis_title

optionally specify a vertical title to be displayed to the left of the y axis. Example: y_axis_title = "Perpetrator co-administered with Drug X". Default ("none") leaves off any y-axis title.

pad_y_axis

optionally add a smidge of padding to the y axis (default is TRUE, which includes some generally reasonable padding). If set to FALSE, the y axis tick marks will be placed closer to the top and bottom of your data. The default amount of padding varies depending on how many PK parameters you're including, but try something in the realm of 0 to 3.

legend_position

specify where you want the legend to be. Options are "left", "right", "bottom", "top", or "none" (default) if you don't want one at all.

color_set

the set of colors to use for shading the graph background to indicate the level of interaction depicted. Options are:

"grays" (default)

white for values close to 1 and progressively darker grays for values with ratios outside of 1.25, 2, or 5 fold

"yellow to red"

makes graphs like Figure 1 of Chen Jones 2022 CPT, doi 10.1002/psp4.12864

"green to red"

uses the same colors as "yellow to red" except that the range of values around 1 will be a light green instead of white

"none"

no shading at all

a named character vector of the colors you want for each interaction level

e.g., color_set = c("negligible" = "white", "weak" = "gray90", "moderate" = "gray75", strong = "gray50")

The cutoff values (1.25, 2, or 5 fold) match those in "Clinical Drug Interaction Studies – Cytochrome P450 Enzyme- and Transporter-Mediated Drug Interactions: Guidance for industry", US Food and Drug Administration Center for Drug Evaluation and Research, 2020, p. 19.

point_shape

the shape of the points to show for the center statistic (e.g., the geometric mean). The default is to show a white triangle for observed data and a white circle for simulated data, so point_shape = c(24, 21). Any shapes used in R graphs will work; see options by typing ggpubr::show_point_shapes() into the console. If you have both simulated and observed data, enter two shapes with the first being the shape for the observed data and the second being the shape for the simulated data. If you have only simulated data, enter only one. If you enter more shapes than your graph requires, the extras will be ignored.

point_color_column

the unquoted name of a column in forest_dataframe to use for coloring the points. If not set, points will be white. If you would like to color points based on whether the data were predicted or observed, set this to point_color_column = SimOrObs

point_color_set

color set to use for points. Options:

"default"

a set of colors from Cynthia Brewer et al. from Penn State that are friendly to those with red-green colorblindness. The first three colors are green, orange, and purple. This can also be referred to as "Brewer set 2". If there are only two unique values in the colorBy_column, then Brewer set 1 will be used since red and blue are still easily distinguishable but also more aesthetically pleasing than green and orange.

"Brewer set 1"

colors selected from the Brewer palette "set 1". The first three colors are red, blue, and green. "set 1" also works to specify this option.

"ggplot2 default"

the default set of colors used in ggplot2 graphs (ggplot2 is an R package for graphing.)

"rainbow"

colors selected from a rainbow palette. The default palette is limited to something like 6 colors, so if you have more than that, that's when this palette is most useful. It's not very useful when you only need a couple of colors.

"blue-green"

a set of blues fading into greens. This palette can be especially useful if you are comparing a systematic change in some continuous variable – for example, increasing dose or predicting how a change in intrinsic solubility will affect concentration-time profiles – because the direction of the trend will be clear.

"blues"

a set of blues fading light blue to dark blue. Like "blue-green", this palette can be especially useful if you are comparing a systematic change in some continuous variable.

"Tableau"

uses the standard Tableau palette; requires the "ggthemes" package

"viridis"

from the eponymous package by Simon Garnier and ranges colors from purple to blue to green to yellow in a manner that is "printer-friendly, perceptually uniform and easy to read by those with colorblindness", according to the package author

a character vector of colors

If you'd prefer to set all the colors yourself to exactly the colors you want, you can specify those colors here. An example of how the syntax should look: color_set = c("dodgerblue3", "purple", "#D8212D") or, if you want to specify exactly which item in colorBy_column gets which color, you can supply a named vector. For example, if you're coloring the lines by the compound ID, you could do this: color_set = c("substrate" = "dodgerblue3", "inhibitor 1" = "purple", "primary metabolite 1" = "#D8212D"). If you'd like help creating a specific gradation of colors, please talk to a member of the R Working Group about how to do that using colorRampPalette.

angle_x_axis_text

At what angle should the x axis text be printed? Default is 0 degrees for regular, horizontal text.

graph_title

optionally specify a title that will be centered across the graph

graph_title_size

the font size for the graph title if it's included; default is 14.

table_title

if you have included a table of the numbers by setting show_numbers_on_right = TRUE, optionally specify what to use for the title above those numbers. Setting this to NA (default) will result in a title of what the numbers are, so basically the same text as the default for the x axis, e.g., "Geometric mean Ratio (90% CI)". Otherwise, specify what text you'd like to use. Setting this to "none" will remove the table title.

rel_widths

specify the relative widths of the graph and the table (only applies if you included a table on the right side of the graph) as a numeric vector. The default makes the graph 5x larger than the table, and acceptable input looks like this: rel_widths = c(5, 1)

prettify_ylabel

NA (default), TRUE, or FALSE on whether to attempt to make text included in y_axis_labels prettier. This was designed for the situation where the y axis is labeled with the compound used in the simulation and where the substrates or perpetrators are among the standard options for the simulator. Setting prettify_ylabel = TRUE will make the name of those compounds something more human readable. For example, "SV-Rifampicin-MD" will become "rifampicin", and "Sim-Midazolam" will become "midazolam". If you leave this as NA, we'll prettify if you supply a column name for y_axis_labels and we won't prettify if you supply a named character vector there.

PK_labels

optionally specify what you would like to have appear on the y axis for labels for each PK parameter with a named list of expressions, e.g., PK_labels = list("AUCinf_dose1" = expression("Dose 1" ~ AUC[infinity] ~ (ng/mL "Cmax_dose1" ~ expression("Dose 1" ~ C[max] ~ (ng/mL)). Please particularly note that it must be a list rather than a vector. To see examples of PK parameters set up as expressions for use in graph labels, try running PKexpressions.

include_dose_num

NA (default), TRUE, or FALSE on whether to include the dose number when listing the PK parameter. By default, the parameter will be labeled, e.g., "Dose 1 Cmax ratio" or "Last dose AUCtau ratio", if you have PK data for both the first dose and the last dose. Also by default, if you have data only for the first dose or only for the last dose, the dose number will be omitted and it will be labeled, e.g., "AUCtau ratio" or "Cmax ratio". Set this to TRUE or FALSE as desired to override the default behavior and get exactly what you want.

include_ratio_in_labels

TRUE (default) or FALSE on whether to include "ratio" in the labels for the PK parameters.

error_bar_height

optionally specify a number for the height of the line at the end of the error bar. If left as NA, it will be set to 0.3. If set to 0, the error bars will be just lines. Try it and you'll see what we mean.

show_borders

TRUE (default) or FALSE for whether to show a light gray line between the files on the y axis. Note: This works best when color_set = "none". Otherwise, you'll be able to see what looks like a very thin white line between the graphs that is actually the space between the panels of the graph for each file. We can't quite eliminate that tiny space.

vline_at_1

specify the type of vertical line to show where the ratio = 1; default is to show a gray dashed line, and you can get no line by specifying vline_at_1 = "none". Acceptable input is the color (any R-acceptable color will do) and then the line type separated by spaces, e.g. "gray dashed" or "red dotted". To see all the possible line types, type this into the console: ggpubr::show_line_types(). If you also list a number, e.g., vline_at_1 = "blue longdash 0.5", we'll set that for the line thickness. Default line thickness is 0.5.

dose_units

the units used in dosing, which only applies if you set facet_column_x, to Dose_sub or Dose_inhib. In that situation, setting the dose units here will automatically add those units to the appropriate graph labels. This way, the graph label will be, e.g., "50 mg" and "100 mg" instead of just "50" and "100". This just helps make it clearer what the numbers represent. If you specify anything other than Dose_sub or Dose_inhib for facet_column_x, this will be ignored.

save_graph

optionally save the output graph by supplying a file name in quotes here, e.g., "My forest plot.png" or "My forest plot.docx". If you leave off ".png" or ".docx" from the file name, it will be saved as a png file, but if you specify a different graphical file extension, it will be saved as that file format. Acceptable graphical file extensions are "eps", "ps", "jpeg", "jpg", "tiff", "png", "bmp", or "svg". Do not include any slashes, dollar signs, or periods in the file name. Leaving this as NA means the file will not be saved to disk.

return_caption

TRUE or FALSE (default) for whether to return any caption text to use with the graph. If set to TRUE, you'll get as output a list of the graph, the figure heading, and the figure caption.

fig_height

figure height in inches; default is 6

fig_width

figure width in inches; default is 5

prettify_compound_names

SOON TO BE DEPRECATED. This is the same thing as "prettify_ylabel", which we think is more general and thus more accurate at describing what this argument does.

Value

Output is a graph.

Examples


# We'll use some example forest-plot data for the substrate bufuralol
# with various perpetrators. To start, we'll use all the default settings.
forest_plot(forest_dataframe = BufForestData_20mg)

# You can used the argument y_axis_labels to specify what to use for the
# y axis labels instead of the simulation file names. One option: Use a
# named character vector to list the file names and what you want to
# show instead. This can be as verbose as you like, and it's ok to use
# "\n" for a new line if you want.
forest_plot(forest_dataframe = BufForestData_20mg,
            y_axis_labels = c("buf-20mg-sd-fluv-36mg-qd.xlsx" = "fluvoxamine",
                              "buf-20mg-sd-itra-200mg-qd.xlsx" = "itraconazole",
                              "buf-20mg-sd-quin-200mg-qd.xlsx" = "quinidine",
                              "buf-20mg-sd-tic-219mg-bid.xlsx" = "ticlopidine\nSingh et al. 2017 study"))

# Or use a different column in forest_dataframe to specify y_axis_labels.
# Please note that there must be one unique value in y_axis_labels for
# each simulation file.
forest_plot(forest_dataframe = BufForestData_20mg,
            y_axis_labels = Inhibitor1)

# By default, the graph will show the strongest inhibitors on top and
# the strongest inducers on the bottom, sorted by their AUC GMR. However,
# if you liked the order you already had things in whatever you supplied
# for forest_dataframe, you can tell the forest_plot function not to change
# that by setting y_order to "as is".
forest_plot(forest_dataframe = BufForestData_20mg,
            y_axis_labels = Inhibitor1,
            y_order = "as is")

# If it would be sensible to break up your graph by a column in
# forest_dataframe, you can do that with the argument facet_column_x. We'll
# switch the example data to some with two dose levels here.
forest_plot(forest_dataframe = BufForestData,
            y_axis_labels = Inhibitor1,
            facet_column_x = Dose_sub)

# You can add a title to the facets to indicate what they are with
# facet_title_x.
forest_plot(forest_dataframe = BufForestData,
            y_axis_labels = Inhibitor1,
            facet_column_x = Dose_sub,
            facet_title_x = "Dose bufuralol")

# Or you can break up your graph by the PK parameter shown.
forest_plot(forest_dataframe = BufForestData_20mg,
            y_axis_labels = Inhibitor1,
            facet_column_x = PKparameter)

# If what you supplied for forest_dataframe includes other statistics,
# you can graph those instead of the default, which is the geometric
# mean (point) and geometric 90 percent confidence interval (error bars).
forest_plot(forest_dataframe = BufForestData_20mg,
            y_axis_labels = Inhibitor1,
            mean_type = "median",
            variability_type = "range")

# Here's how to include a table of the numbers used for the centre
# statistic and variability along the right side of the graph.
forest_plot(forest_dataframe = BufForestData_20mg,
            y_axis_labels = Inhibitor1,
            legend_position = "bottom",
            show_numbers_on_right = TRUE,
            color_set = "yellow to red")

# Sometimes, it can take some tweaking to get this to look *just right*, so
# let's specify what we want for the table title and make the table
# proportionately wider compared to the graph.
forest_plot(forest_dataframe = BufForestData_20mg,
            y_axis_labels = Inhibitor1,
            legend_position = "bottom",
            show_numbers_on_right = TRUE,
            table_title = "GMR values",
            rel_widths = c(2, 1),
            color_set = "yellow to red")


# You can compare observed PK data as long as they are laid out the same
# way as the simulated data. Please see the argument `observed_PK` for
# details, but here's an example.
view(BufObsForestData_20mg)
forest_plot(forest_dataframe = BufForestData_20mg,
            y_axis_labels = Inhibitor1,
            observed_PK = BufObsForestData_20mg)

# If you have some observed PK data that are not matched to specific
# simulated data, you can include them by setting a fake file name in the
# column "File", which should really be thought of as "the set of data that
# comprise one row in the graph". Here's an example:
AddnlObsPK <- bind_rows(BufObsForestData_20mg,
                        data.frame(File = "Rifampicin obs data", # call it whatever you like
                                   Inhibitor1 = "rifampicin",
                                   PKparameter = c("AUCt_ratio_dose1",
                                                   "Cmax_ratio_dose1"),
                                   geomean = c(0.4, 0.5),
                                   CI90_lower = c(0.35, 0.42),
                                   CI90_upper = c(0.45, 0.6)))

forest_plot(forest_dataframe = BufForestData_20mg,
            observed_PK = AddnlObsPK,
            y_axis_labels = Inhibitor1,
            legend_position = "right")

# Here are some options for modifying the aesthetics of your graph:

# -- Add an overall graph title and a y axis title to make it clear that
# we're looking at the effects of various perpetrators on bufuralol PK (at
# least, that's what we're doing in this example).
forest_plot(forest_dataframe = BufForestData_20mg,
            y_axis_labels = Inhibitor1,
            include_dose_num = FALSE,
            y_axis_title = "Perpetrator",
            graph_title = "Effects of various DDI perpetrator\ndrugs on bufuralol PK")

# -- Adjust the x axis limits with x_axis_limits
forest_plot(forest_dataframe = BufForestData_20mg,
            y_axis_labels = Inhibitor1,
            x_axis_limits = c(0.9, 5))

# -- Include a legend for the shading
forest_plot(forest_dataframe = BufForestData_20mg,
            y_axis_labels = Inhibitor1,
            legend_position = "bottom")

# -- Change the shading to be like in Chen Jones 2022 CPT
forest_plot(forest_dataframe = BufForestData_20mg,
            y_axis_labels = Inhibitor1,
            legend_position = "bottom",
            color_set = "yellow to red")

# -- Or specify exactly which colors you want for which interaction level, and
# make the vertical line at 1 be a different color and line type.
forest_plot(forest_dataframe = BufForestData_20mg,
            y_axis_labels = Inhibitor1,
            legend_position = "bottom",
            color_set = c("negligible" = "white", "weak" = "#C6CDF7",
                          "moderate" = "#7294D4", strong = "#E6A0C4"),
            vline_at_1 = "purple dotted")

# -- Or make the shading disappear and also make the error bars just be lines.
# Also make the error bars lose the hat at either end, and don't show any lines
# in between the files.
forest_plot(forest_dataframe = BufForestData_20mg,
            y_axis_labels = Inhibitor1,
            legend_position = "bottom",
            color_set = "none",
            show_borders = FALSE,
            error_bar_height = 0)

# -- Make the compound names match *exactly* what was in the Simulator file
# rather than being automatically prettified
forest_plot(forest_dataframe = BufForestData_20mg,
            y_axis_labels = Inhibitor1,
            prettify_ylabel = FALSE)




shirewoman2/Consultancy documentation built on Feb. 18, 2025, 10 p.m.