Data Visualization & Effective Meetings

As your quest for relevant data continues, we’ll discuss how creating and maintaining a data inventory can be an effort that saves you heartache and greatly accelerates many of the technical facets of your project. Similarly, we’ll provide you some tools and best practices for making sure that your meetings are impactful, necessary, and accessible to all participants so that meeting with the group doesn’t cost you any momentum!

Note Pre-Class Preparation

There is no specific pre-class preparation for this module!

Process Design

Tip Learning Objectives

After completing this topic you will be able to:

  • Articulate core considerations for an effective meeting
  • Plan effective meetings!

Good meeting design starts with understanding your purpose and objectives, as well as your participants. Once you understand why you need to meet (your overarching goal) and what you want to accomplish (the specific outcomes you are driving toward), you can turn to how you will accomplish your purpose (i.e. the agenda of activities, timings, and tech) and who will play what roles. You want participants to know their role and how to be at their best.

A good rule of thumb is to allow 2-3x as much time to plan a meeting as its duration.

Figure separating meeting planning into 'why, what, how, and who' facets

Meeting Roles

Tip Learning Objectives

After completing this topic you will be able to:

  • Identify useful roles for any meeting

It’s very difficult to both facilitate a conversation and engage fully in it as a participant. If you add taking notes on top of that, it’s sure to become overwhelming. So recruit some help. The number of roles you need to fill will depend on the size of the group and the complexity of the process. Online meetings particularly benefit from a team approach to facilitation. Share and rotate duties over time:

  • Process facilitator - sets tone and pace, mediates conflicts, and ensures all voices are being heard, interpersonal dynamics are positive/effective, and group is staying on task
  • Meeting chair (optional) - keeps an eye on the overall vision and progress of the meeting
  • Timekeeper - may also be the chair or facilitator
  • Tech Host - monitors chat, sets up breakout rooms, records meeting, troubleshoots technology as needed in virtual/hybrid meetings
  • Notetaker - captures action items and notes, often in a google doc that can be viewed and added to by others; may also produce a meeting summary
  • Scribe - captures important points that can be seen in real time by the whole group, usually on a whiteboard or flipchart
  • Spotter - keeps a running list of who is waiting to speak (especially in large groups or intense discussions)
  • Relationship monitor - tracks group dynamics and actively works to help everyone feel included and engaged on personal and social levels, may also be the facilitator
  • Participation monitor - engineers opportunities for participation, quells interrupters, amplifies and credits the messages of quieter participants, may also be the facilitator

As you get to know your team members, you can start to match people to these different roles based on their skills and recruit them to help. Also, be aware of who has been performing a given role so that you don’t risk repeatedly trapping one group member in an administrative role across many meetings where they can’t contribute fully on an intellectual level.

Online Meetings

Tip Learning Objectives
  • Explain methods for improving the experience of virtual participants on hybrid teams

Online meetings benefit from all the same considerations as in person meetings, plus a little extra care and planning. Keeping your team engaged is doubly challenging in a virtual setting: our computers are full of distractions (email! notifications! internet rabbit holes!) and as the facilitator, it’s harder to tell whether participants are engaged when all you have to go on is a small video window. Managing people’s energy and attention and creating opportunities for real human connection are real challenges. On the flip side, online meetings allow distributed teams to stay connected and can provide a dynamic and rich platform for shared work.

In addition to the general tips above, in online settings:

  1. Be thoughtful and equitable when scheduling across time zones
  2. Develop online meeting norms for your team and enforce them (e.g., use of chat, indicating you want to speak)
  3. Ask a team member to help you monitor the chat and assist participants with tech or connectivity challenges
  4. Encourage personal connection (e.g., with check ins, invitations to have video on)
  5. Check engagement regularly
  6. Provide breaks (bio breaks, silence, invitations to step away from the screen for reflection)
  7. Make video optional
  8. Take advantage of tech tools (breakout rooms, polls, shared notes, virtual whiteboards, recording, transcription, etc.)

Alternatives to Conventional Meeting Structures

Tip Learning Objectives

After completing this topic you will be able to:

  • Explain how some meeting microstructures privilege different thinking styles
  • Use some common microstructures

Differences in thinking and learning styles, disciplinary background, power, and other dimensions of diversity mean that there’s no such thing as a one-size-fits-all approach for participatory processes. Nonetheless, we tend to default to a small set of traditional ways of sharing information and engaging people when we meet. These conventional structures are often either too limiting (presentations, status reports, and managed discussions) or too free-form and disorganized (open discussions and brainstorms) to effectively tap the wisdom of the group (Lipmanowicz and McCandless, 2014). To support the engagement of all participants, we need to break out of those traditional ways of meeting.

Books and websites like Liberating Structures, Gamestorming, and the Facilitator’s Guide to Participatory Decision Making offer dozens of alternative group processes (see Resources). Known as microstructures or knowledge games, these simple, fun activities are designed to include everyone, distribute control, and unleash creativity. One or more activities can be matched to your intended outcomes and arranged in a sequence to advance the team toward your overall goal. Liberating Structures offers a matching matrix to help you identify microstructures that could fit your needs and an app you can use to browse and assemble strings of activities. Gamestorming organizes their activities into categories (e.g. games for opening, games for decision-making) for exploration.

Microstructures for Small Group Meetings

Here are a few microstructures that work well for small group virtual meetings. They also work for larger groups and in person settings:

Microstructure Thinking Preference Purpose How It Works
Icebreaker / check in Relational Connect as a team, start on a positive, human note Many versions exist, e.g., one word to describe how you are arriving; one thing you are feeling grateful for today; coolest thing you’ve learned lately; describe where you grew up without using any place names, etc.
Round robin / go around Analytical, Relational Hear from everyone Everyone answers the same prompt. Alternatives to going in order: each speaker calls on the next person after they have shared - keeping track of who has / hasn’t spoken keeps people paying attention; popcorn-style - people share in the order that they feel moved to speak
1,2,4,all Analytical, Practical, Experimental, Relational Engage everyone in generating questions, ideas, and suggestions Individual reflection; Pair share; Two pairs combine and share as a group of 4; Small groups share highlights with whole group
Min specs Experimental Specify simple rules the group must follow to achieve your purpose 1,2,4,all format; Individuals brainstorm things the group must do or must not do to achieve its purpose; Share in pairs or small groups; Pare the list down to the minimum set of rules you could follow and still achieve the purpose
Affinity Map Analytical, Relational Surface ideas, detect patterns, and analyze Brainstorm ideas using sticky notes on a wall or virtual whiteboard; Cluster into categories; If useful, prioritize within categories
Brainwriting Analytical, Practical, Experimental, Relational Surface and elaborate ideas (1) Brainstorm ideas in a google doc or virtual whiteboard (or on index cards in person); (2) Read and add to each other’s ideas; (3) Discuss
What, So What, Now What Analytical, Practical, Experimental Make sense of past progress or experiences and decide on future actions What - As a group, compile the facts and observations relevant to the context; So What - Reflect on the facts and their implications, identify patterns, generate hypotheses; Now What - Draw conclusions - What actions make sense?
Fist to Five / Gradient of Agreement Practical, Relational Assess degree of consensus; seek closure Use when ready to close a discussion or make a decision; Invite participants to rate their level of agreement with a proposal on a scale of 0-5; Five fingers means “absolute, total agreement or support” and a fist means “complete opposition”
Polling Analytical, Practical Rank alternatives Before you start - clarify how you will use the results - are you gathering information or taking a vote to make a decision?; Decide how many votes per person; In person - use sticky dots; Virtually - use +1s in a google doc or a digital polling tool (e.g., Zoom, Mural, slido)
Feasibility-Impact Matrix (see figure below) Analytical, Practical, Experimental Compare alternatives Discuss and agree on definitions for two criteria for evaluating ideas: feasibility of implementation and impact potential; Rate each idea against these two axes and map onto 2x2 grid

Graph of impact versus feasibility where both axes range from low to high and the plot area is divided into four equal sections

Harvesting Meeting Content

Tip Learning Objectives

After completing this topic you will be able to:

Paraphrase why recording meeting content ‘as you go’ is useful

As you go, and definitely before your meeting is over, engage your team in synthesizing and capturing the information that has been discussed. This helps you to deepen understanding, document your workflow and decisions, and pick up easily next time. Use a consistent system - like a running notes document linked in the calendar item. Graphics or drawings can be a valuable complement to oral and written content in making thinking visible.

Art of many groups of people with blue speech bubbles connected by an orange amorphous cloud

Making thinking visible, Credit: Nancy Margulies, World Cafe, Flickr

Consider using:

  • Grids to organize information
  • Conceptual models or mind maps to articulate shared understanding of complex systems
  • Manifestos, abstracts, and other written collateral to distill ideas

When capturing notes, try to use people’s own words; if necessary ask them to distill long or complex points into a headline you can capture. Invite them to offer corrections if the notetaker didn’t capture what they meant.

Warning Activity: Team Planning

On your own, think about an upcoming team meeting that hasn’t yet been planned

  • Why will you be meeting?
  • What do you think should be the purpose of that meeting?

In your project teams:

  • Decide as a group which upcoming meeting you want to focus on
  • Identify a facilitator, timekeeper, reporter for today’s breakout session (not the meeting)
  • Use round robin or silent Google Doc-ing to hear everyone’s answers to the prompt
  • Plan your next meeting together (resources: EasyRetro board, tools highlighted above)
    • Agree on the meeting purpose
    • Identify 1-3 intended outcomes
    • Draft an agenda for the meeting
    • What activities will you use to make your meeting inclusive? Can you include an activity that preferences each thinking style?
    • Identify roles and responsibilities
    • What’s your plan for harvesting content?
    • Identify any prep work for participants and for the facilitator(s)
  • Discuss:
    • How might things get off track?
    • What’s your plan if they do?
  • Modify your plan as needed

As a whole class, let’s discuss your answers to the following questions:

  • What activities did you identify to help make your meeting inclusive to all the thinking styles on your team?
  • Where would you like advice from the class?
  • Are there other questions you are holding related to inclusive facilitation?

Data Visualization for Synthesis

Tip Learning Objectives

After completing this topic you will be able to:

  • Describe how data visualization fits into the synthesis process

As shown in the graphic below, visualization can be valuable throughout the lifecycle of a synthesis project, albeit in different ways at different phases of a project.

Diagram depicting how raw data is transformed to cleaned data, then standardized data, and finally to published data products by a set of scripts between each 'type' of data

Diagram of data stages from raw data to published products. Credit: Margaret O’Brian & Li Kui & Sarah Elmendorf

Visualization for Exploration

Tip Learning Objectives

After completing this topic you will be able to:

  • Explain how data visualization can be used to explore data

Exploratory data visualization is an important part of any scientific project. Before launching into analysis it is valuable to make some simple plots to scan the contents. These plots may reveal any number of issues, such as typos, sensor calibration problems or differences in the protocol over time.

These “fitness for use” visualizations are even more critical for synthesis projects. In synthesis, we are often re-purposing publicly available datasets to answer questions that differ from the original motivations for data collection. As a result, the metadata included with a published dataset may be insufficient to assess whether the data are useful for your group’s question. Datasets may not have been carefully quality-controlled prior to publication and could include any number of ‘warts’ that can complicate analyses or bias results. Some of these idiosyncrasies you may be able to anticipate in advance (e.g. spelling errors in taxonomy) and we encourage you to explicitly test for those and rectify them during the data harmonization process. Others may come as a surprise.

During the early stages of a synthesis project, you will want to gain skill to quickly scan through large volumes of data. The figures you make will typically be for internal use only, and therefore have low emphasis on aesthetics.

Exploratory Visualization Applications

Specific applications of exploratory data visualization include identifying:

This may include temporal, spatial, or taxonomic coverage, to name a few.

For example, the metadata might indicate a dataset covers the period 2010-2020. That could mean one data point in 2010 and one in 2020! This may not be useful for a time-series analysis.

Do the units “make sense” with the figure? Typos in metadata do occur, so if you find yourself with elephants weighing only a few grams, it may be necessary to reach out to the dataset contact.

Consider the following:

  • Do the data from sequential years, replicate sites, different providers generally fall into the same ranges or is there sensor drift or changes in protocols that need to be addressed?
  • A risk of synthesis projects is that you may find you are comparing apples to oranges across datasets, as the individual datasets included in your project were likely not collected in a coordinated fashion.
  • A benefit of synthesis projects is you will typically have large volumes of data, collected from many locations or timepoints. This data volume can be leveraged to give you a good idea of how your response variable looks at a ‘typical’ location as well as inform your gestalt sense of how much site-to-site, study-to-study, or year-to-year variability is expected. In our experience, where one particular dataset, or time period, strongly differs from the others, the most common root cause is differences in methodology that need to be addressed in the data harmonization process.

In addition to those other uses of exploratory visualization, you may also find:

  • Harmonization issues
    • Are all your datasets measured in units that can be converted to the same units?
    • If not, can you envision metrics (relative abundance? Effect size?) that would make datasets intercomparable?
  • Some entire datasets cannot be used
  • Parts of some datasets cannot be used
  • Additional quality control is needed (e.g. filtering large outliers)

Identifying all of these pieces of information is an important precursor to the data harmonization stage, where you will process the datasets you have selected into an analysis-ready format. Visualization is a–relatively–easy way of doing these checks!

Warning Activity: Data Sleuth

In this activity, you’ll play the role of data detective. You will have many potential datasets to look through. It is important to do it correctly, but you likely won’t need or want to develop boutique code to examine each dataset, especially since some may be discarded after an initial pass.

As a project team, discuss the following points:

  1. Decide on a structure for tracking results of exploratory data checks
    • Git issues? Additional columns in your team-data-inventory google sheet? Something else?
    • Draft a list of ‘generic checks’ you would want to apply to each dataset before inclusion in your synthesis
  2. Use the summarytools and/or datacleanr packages to explore one exemplar dataset that you intend to include in your project
    • Discuss any issues you discover
    • Create a “to do” list for the exemplar dataset that details additional steps needed to make that dataset analysis ready (e.g. remove 1993 due to incomplete sampling, convert concentrations from mmols to mg/L, contact dataset providers to ask about anomalous values in April 2021)
    • Revise the list of ‘generic checks’ for remaining datasets as necessary
  3. If you choose to save any images and/or code you used in your exploratory data visualization, decide on a naming convention and storage location
    • Will you add these files to your .gitignore or do you plan on committing them?
  4. What additional plots would you ideally make that are not available through these generic tools?
# Load the library
library(summarytools)

# Load data
dataset_1 <- read_csv("your_file_name_here.csv")

# View the data in your Rstudio environment
summarytools::view(summarytools::dfSummary(dataset_1), footnote = NA)

# Alternatively,save the results for viewing later, or to share with your team
print(summarytools::dfSummary(dataset_1), footnote = NA,
      file = 'dataset_01_summary.html')
1
Careful! Use lowercase ‘v’ in the view function of the summarytools package
# Load the library
library(datacleanr)

# Load data
dataset_1 <- read_csv("your_file_name_here.csv")

# Launch the shiny app and view the data interactively
datacleanr::dcr_app(dataset_1)

Both of these packages have extensive vignettes and online instructional materials. See here for one from summarytools and here for one from datacleanr.

Final Pre-Code Step: Draw!

Tip Learning Objectives

After completing this topic you will be able to:

  • Explain why drawing a graph is a useful step before writing code to ‘actually’ make the graph

It may sound facile, but one of the best things you can do to make your life easier when you ‘actually’ start making graphs is to draw your hypothetical graph. You will likely find that creating a small sketch of your ideal figure will help you make some critical decisions. This can save you time so you don’t laboriously code a graph that–once created–doesn’t meet your expectations. You may still change your mind once you’ve seen the graph your code produces (and that is okay!) but you’ll likely make some of the necessary larger decisions with pen and paper and streamline your process in generating a visualization that perfectly meets your needs.

Warning Activity: Sketch-y Graphing

On a piece of scrap paper, draw one graph you think might be helpful in your project. Then, ask yourself the following questions:

  • Does the graph make it clear whether your hypothesis is or is not supported?
    • How / will you identify statistical significance?
  • What type of graph makes the most sense (e.g., boxplot vs. violin plot, etc.)?
  • What information is contained in the axes versus stored in other graph elements (e.g., point shape, color, transparency, etc.)?

Graphing with ggplot2

Tip Learning Objectives

After completing this topic you will be able to:

  • Define fundamental ggplot2 vocabulary
  • Create ggplot2 graphs

You may already be familiar with the ggplot2 package in R but if you are not, it is a popular graphing library based on The Grammar of Graphics. Every ggplot is composed of four elements:

  1. A ‘core’ ggplot function call
  2. Aesthetics
  3. Geometries
  4. Theme

Note that the theme component may be implicit in some graphs because there is a suite of default theme elements that applies unless otherwise specified.

This module will use example data to demonstrate these tools but as we work through these topics you should feel free to substitute a dataset of your choosing! If you don’t have one in mind, you can use the example dataset shown in the code chunks throughout this module. This dataset comes from the lterdatasampler R package and the data are about fiddler crabs (Minuca pugnax) at the Plum Island Ecosystems (PIE) LTER site.

# Load needed libraries
library(tidyverse); library(lterdatasampler)

# Load the fiddler crab dataset
data(pie_crab)

# Check its structure
str(pie_crab)
tibble [392 × 9] (S3: tbl_df/tbl/data.frame)
 $ date         : Date[1:392], format: "2016-07-24" "2016-07-24" ...
 $ latitude     : num [1:392] 30 30 30 30 30 30 30 30 30 30 ...
 $ site         : chr [1:392] "GTM" "GTM" "GTM" "GTM" ...
 $ size         : num [1:392] 12.4 14.2 14.5 12.9 12.4 ...
 $ air_temp     : num [1:392] 21.8 21.8 21.8 21.8 21.8 ...
 $ air_temp_sd  : num [1:392] 6.39 6.39 6.39 6.39 6.39 ...
 $ water_temp   : num [1:392] 24.5 24.5 24.5 24.5 24.5 ...
 $ water_temp_sd: num [1:392] 6.12 6.12 6.12 6.12 6.12 ...
 $ name         : chr [1:392] "Guana Tolomoto Matanzas NERR" "Guana Tolomoto Matanzas NERR" "Guana Tolomoto Matanzas NERR" "Guana Tolomoto Matanzas NERR" ...

With this dataset in hand, let’s make a series of increasingly customized graphs to demonstrate some of the tools in ggplot2.

Let’s begin with a scatterplot of crab size on the Y-axis with latitude on the X. We’ll forgo doing anything to the theme elements at this point to focus on the other three elements.

ggplot(data = pie_crab, mapping = aes(x = latitude, y = size, fill = site)) +
  geom_point(pch = 21, size = 2, alpha = 0.5)
1
We’re defining both the data and the X/Y aesthetics in this top-level bit of the plot. Also, note that each line ends with a plus sign
2
Because we defined the data and aesthetics in the ggplot() function call above, this geometry can assume those mappings without re-specifying

We can improve on this graph by tweaking theme elements to make it use fewer of the default settings.

ggplot(data = pie_crab, mapping = aes(x = latitude, y = size, fill = site)) +
  geom_point(pch = 21, size = 2, alpha = 0.5) +
  theme(legend.title = element_blank(),
        panel.background = element_blank(),
        axis.line = element_line(color = "black"))
1
All theme elements require these element_... helper functions. element_blank removes theme elements but otherwise you’ll need to use the helper function that corresponds to the type of theme element (e.g., element_text for theme elements affecting graph text)

We can further modify ggplot2 graphs by adding multiple geometries if you find it valuable to do so. Note however that geometry order matters! Geometries added later will be “in front of” those added earlier. Also, adding too much data to a plot will begin to make it difficult for others to understand the central take-away of the graph so you may want to be careful about the level of information density in each graph. Let’s add boxplots behind the points to characterize the distribution of points more quantitatively.

ggplot(data = pie_crab, mapping = aes(x = latitude, y = size, fill = site)) +
  geom_boxplot(pch = 21) +
  geom_point(pch = 21, size = 2, alpha = 0.5) +
  theme(legend.title = element_blank(), 
        panel.background = element_blank(),
        axis.line = element_line(color = "black"))
1
By putting the boxplot geometry first we ensure that it doesn’t cover up the points that overlap with the ‘box’ part of each boxplot

ggplot2 also supports adding more than one data object to the same graph! While this module doesn’t cover map creation, maps are a common example of a graph with more than one data object. Another common use would be to include both the full dataset and some summarized facet of it in the same plot.

Let’s calculate some summary statistics of crab size to include that in our plot.

# Load the supportR library
library(supportR)

# Summarize crab size within latitude groups
crab_summary <- supportR::summary_table(data = pie_crab, groups = c("site", "latitude"),
                                        response = "size", drop_na = TRUE)

# Check the structure
str(crab_summary)
'data.frame':   13 obs. of  6 variables:
 $ site       : chr  "BC" "CC" "CT" "DB" ...
 $ latitude   : num  42.2 41.9 41.3 39.1 30 39.6 41.6 33.3 42.7 34.7 ...
 $ mean       : num  16.2 16.8 14.7 15.6 12.4 ...
 $ std_dev    : num  4.81 2.05 2.36 2.12 1.8 2.72 2.29 2.42 2.3 2.34 ...
 $ sample_size: int  37 27 33 30 28 30 29 30 28 25 ...
 $ std_error  : num  0.79 0.39 0.41 0.39 0.34 0.5 0.43 0.44 0.43 0.47 ...

With this data object in-hand, we can make a graph that includes both this and the original, un-summarized crab data. To better focus on the ‘multiple data objects’ bit of this example we’ll pare down on the actual graph code.

ggplot() +
  geom_point(pie_crab, mapping = aes(x = latitude, y = size, fill = site),
             pch = 21, size = 2, alpha = 0.2) + 
  geom_errorbar(crab_summary, mapping = aes(x = latitude,
                                            ymax = mean + std_error,
                                            ymin = mean - std_error),
                width = 0.2) +
  geom_point(crab_summary, mapping = aes(x = latitude, y = mean, fill = site),
             pch = 23, size = 3) + 
  theme(legend.title = element_blank(),
        panel.background = element_blank(),
        axis.line = element_line(color = "black"))
1
If you want multiple data objects in the same ggplot2 graph you need to leave this top level ggplot() call empty! Otherwise you’ll get weird errors with aesthetics later in the graph
2
This geometry adds the error bars and it’s important that we add it before the summarized data points themselves if we want the error bars to be ‘behind’ their respective points

Warning Activity: Graph Creation

In a script, attempt the following with one of either your or your group’s datasets:

  • Make a graph using ggplot2
    • Include at least one geometry
    • Include at least one aesthetic (beyond X/Y axes)
    • Modify at least one theme element from the default

Multi-Panel Graphs

Tip Learning Objectives

After completing this topic you will be able to:

  • Describe the difference(s) between “faceted” graphs and “plot grids”
  • Create faceted ggplot2 graphs
  • Assemble grids of plots

It is sometimes the case that you want to make a single graph file that has multiple panels. For many of us, we might default to creating the separate graphs that we want, exporting them, and then using software like Microsoft PowerPoint to stitch those panels into the single image we had in mind from the start. However, as all of us who have used this method know, this is hugely cumbersome when your advisor/committee/reviewers ask for edits and you now have to redo all of the manual work behind your multi-panel graph.

Fortunately, there are two nice–entirely scripted–alternatives that you might consider: Faceted graphs and Plot grids. See below for more information on both.

In a faceted graph, every panel of the graph has the same aesthetics. These are often used when you want to show the relationship between two (or more) variables but separated by some other variable. In synthesis work, you might show the relationship between your core response and explanatory variables but facet by the original study. This would leave you with one panel per study where each would show the relationship only at that particular study.

Let’s check out an example.

ggplot(pie_crab, aes(x = date, y = size, color = site))+
  geom_point(size = 2) +
  facet_wrap(. ~ site) +
  theme_bw() +
  theme(legend.position = "none")
1
This is a ggplot2 function that assumes you want panels laid out in a regular grid. There are other facet_... alternatives that let you specify row versus column arrangement. You could also facet by multiple variables by putting something to the left of the tilde
2
We can remove the legend because the site names are in the facet titles in the gray boxes

In a plot grid, each panel is completely independent of all others. These are often used in publications where you want to highlight several different relationships that have some thematic connection. In synthesis work, your hypotheses may be more complicated than in primary research and such a plot grid would then be necessary to put all visual evidence for a hypothesis in the same location. On a practical note, plot grids are also a common way of circumventing figure number limits enforced by journals.

Let’s check out an example that relies on the cowplot library.

# Load a needed library
library(cowplot)

# Create the first graph
crab_p1 <- ggplot(pie_crab, aes(x = site, y = size, fill = site)) +
  geom_violin() +
  coord_flip() +
  theme_bw() +
  theme(legend.position = "none")

# Create the second
crab_p2 <- ggplot(pie_crab, aes(x = air_temp, y = water_temp)) +
  geom_errorbar(aes(ymax = water_temp + water_temp_sd, ymin = water_temp - water_temp_sd),
                 width = 0.1) +
  geom_errorbarh(aes(xmax = air_temp + air_temp_sd, xmin = air_temp - air_temp_sd),
                 width = 0.1) +
  geom_point(aes(fill = site), pch = 23, size = 3) +
  theme_bw()

# Assemble into a plot grid
cowplot::plot_grid(crab_p1, crab_p2, labels = "AUTO", nrow = 1)
1
Note that we’re assigning these graphs to objects!
2
This is a handy function for flipping X and Y axes without re-mapping the aesthetics
3
This geometry is responsible for horizontal error bars (note the “h” at the end of the function name)
4
The labels = "AUTO" argument means that each panel of the plot grid gets the next sequential capital letter. You could also substitute that for a vector with labels of your choosing

Warning Activity: Multi-Panel Graph Creation

In a script, attempt the following:

  1. Create two graphs with ggplot2 that have different geometries
  2. Assemble the appropriate type of multi-panel graph
  3. If appropriate, facet one of the two graphs by some grouping variable and re-generate the multi-panel graph from step 2