require(tidyverse)
require(cowplot)
After determining that I can take the cells directly from the media to the flow cytometer, by diluting them in the original media or just PBS, I decided to repeat the previous experiment, this time dropping the endogenous set (in retrospect should have kept them in) and added newly obtained plasmid-Pho4-GFP strains from my latest transformation.
See gDoc. This time I let all strains acclimate to the media for 2x o/n cycles. I also correctly grew up the pRS315 based strains in SD-leu to ensure that cells maintain their plasmids.
See gDoc for details. Some strains didn’t grow to saturation after the first overnight culture and thus the o/n culture instead of the second growth, which was at mid log phase at the time of harvest, was used for flow cytometry.
dat <- read_csv("20201221-Pho4-GFP-plasmid-leu2-test-stats.csv")
── Column specification ──────────────────────────────────────────────────────────────────────────────────────────────
cols(
Sample = col_character(),
Group = col_character(),
Pho4 = col_character(),
Pho4GFP = col_character(),
PHO5RFP = col_logical(),
PHO2 = col_character(),
Parameter = col_character(),
Count = col_double(),
Median = col_double(),
CV = col_double(),
rCV = col_double()
)
dat <- dat %>% mutate(Pho4GFP = factor(Pho4GFP, levels = c("No-GFP","ScPho4-mNeon","ScPho4-EGFP", "CgPho4-mNeon")), Group = factor(Group, levels = c("control", "endogenous", "exogenous", "plasmid")), Pho4 = factor(Pho4, levels = c("pho4-","ScPho4", "CgPho4")))
First look at the level of Pho4-GFP compared with the negative controls.
Figure 1 Pho4-GFP intensity by strain. Pho4-GFP intensities were quantified on an Attune NxT flow cytometer using 400 mV on the BL1 channel. Acquisition rate is 200 ul/min. At least 10,000 events were collected and the median fluorescent intensity (MFI, arbitrary units) were presented on the x-axis, while strain IDs are listed on the vertical axis.
Discussion
rfp.bg <- mean(dat %>% filter(!PHO5RFP, Parameter == "PHO5pr-mCherry") %>% pull(Median))
rfp.basal <- dat %>% filter(PHO5RFP, Pho4 == "pho4-", Parameter == "PHO5pr-mCherry") %>% pull(Median) %>% mean() - rfp.bg
# removed a few outliers with MFI > 20k
p1 <- dat %>% filter(PHO5RFP) %>%
ggplot(aes(x = Sample, y = Median, fill = Group, color = PHO2)) +
geom_bar(stat = "identity", position = position_dodge2(width = 0.9)) +
geom_hline(aes(yintercept = ifelse(Parameter == "Pho4-GFP", gfp.bg, rfp.basal)), linetype = 2, alpha = 0.6) +
facet_grid(Pho4 ~ Parameter, scales = "free", space = "free_y") + ylab("MFI") +
scale_fill_brewer(type = "div", drop = FALSE) + scale_color_manual(values = c("red", NA)) +
coord_flip() + scale_y_continuous(expand = c(0.01,0.02)) +
theme_bw()
p1
Figure 2 Corresponding Pho4-GFP and PHO5pr-mCherry reporter fluorescence intensity per strain. Pho4-GFP and PHO5p-mCherry intensities were quantified on an Attune NxT flow cytometer using 400 mV on the BL1 and 430 mV on the YL2 channels respectively. Acquisition rate is 200 ul/min. At least 10,000 events were collected. Strain IDs are listed on the vertical axis and the Median Fluorescent Intensity (MFI, arbitury units) for each channel on the horizontal axis. An asterisk next to a bar indicates an overnight growth instead of a mid-log phase growth was used for quantification. The dashed vertical line for Pho4-GFP indicates the autofluorescence as calculated by the mean of the intensities in the strains without GFP; the dashed vertical line for the RFP plot indicates the basal level expression from the reporter without Pho4, calculated by the average of yH295 and yH296, both of which lack Pho4 but has the reporter).
Discussion
We will first transform the raw GFP and RFP intensities to make them more interpretable. For the GFP intensity, as there is a substantial background, we will subtract the background from all the GFP-containing strains to obtain the meaningful measure for Pho4 protein levels. For RFP, there is minimal background (see below). However, there is a “basal” expression of the reporter in the absence of Pho4 – what we are interested in is not the absolute level of reporter expression but the fold induction compared with the pho4∆ strains.
# calculate gfp background
gfp.bg <- dat %>% filter(Pho4GFP == "No-GFP", Parameter == "Pho4-GFP") %>% pull(Median) %>% mean()
# transform
dat1 <- dat %>% select(-Count, -CV, -rCV) %>%
pivot_wider(names_from = Parameter, values_from = Median) %>%
mutate(GFP.noBG = ifelse(Pho4GFP == "No-GFP", NA, `Pho4-GFP` - gfp.bg),
RFP.noBG = ifelse(PHO5RFP, `PHO5pr-mCherry` - rfp.bg, 0),
RFP.FC = ifelse(PHO5RFP, RFP.noBG / rfp.basal, NA),
nRFP.FC = RFP.FC / GFP.noBG * median(GFP.noBG, na.rm = T))
dat2 <- dat1 %>% filter(Pho4GFP != "No-GFP", PHO5RFP)
p1 <- dat2 %>%
mutate(GFP.noBG = GFP.noBG / 1000, RFP.noBG = RFP.noBG / 1000) %>%
pivot_longer(cols = c(GFP.noBG, RFP.noBG), names_to = "Parameter", values_to = "Value") %>%
mutate(Parameter = factor(Parameter, levels = c("GFP.noBG", "RFP.noBG"),
labels = c("Pho4-GFP abundance", "PHO5pr-mCherry level")),
Group = factor(Group, levels = c("control", "endogenous", "exogenous", "plasmid"))) %>%
ggplot(aes(x = Sample, y = Value, fill = Group, color = PHO2)) +
geom_bar(stat = "identity", position = position_dodge2(width = 0.9)) +
facet_grid(Pho4GFP ~ Parameter, scales = "free", space = "free_y") +
scale_fill_brewer(type = "div", drop = FALSE) + scale_color_manual(values = c("red", NA)) +
coord_flip() + scale_y_continuous(expand = c(0.01,0.02)) + ylab("MFI (x1000, a.u.)") +
theme_bw()
p2 <- dat2 %>%
pivot_longer(cols = c(RFP.FC, nRFP.FC), names_to = "Parameter", values_to = "Value") %>%
mutate(Parameter = factor(Parameter, levels = c("RFP.FC", "nRFP.FC"),
labels = c("PHO5 fold induction", "PHO5 induction / Pho4-GFP")),
Group = factor(Group, levels = c("control", "endogenous", "exogenous", "plasmid"))) %>%
ggplot(aes(x = Sample, y = Value, fill = Group, color = PHO2)) +
geom_bar(stat = "identity", position = position_dodge2(width = 0.9)) +
geom_hline(yintercept = 1, linetype = 2) +
facet_grid(Pho4GFP ~ Parameter, scales = "free", space = "free_y") +
scale_fill_brewer(type = "div", drop = F) + scale_color_manual(values = c("red", NA)) +
coord_flip() + scale_y_continuous(expand = c(0.01,0.02)) + ylab("Fold Induction") + xlab("") +
theme_bw()
## place shared legend at the bottom
## reference: https://wilkelab.org/cowplot/articles/shared_legends.html
legend <- get_legend(
p1 +
guides(color = guide_legend(nrow = 1), fill = guide_legend(nrow = 1)) +
theme(legend.position = "bottom")
)
prow <- plot_grid(
p1 + theme(legend.position="none"),
p2 + theme(legend.position="none"),
align = 'vh',
labels = c("A", "B", "C"),
hjust = -1,
nrow = 1
)
plot_grid(prow, legend, ncol = 1, rel_heights = c(1, .1))
Figure 3 Composite plot including Pho4 abundance, PHO5 reporter strength and fold induction values. Pho4-GFP and PHO5p-mCherry intensities were quantified as defined above. Strain IDs are listed on the vertical axis. In (A), the x-axis values represent the Median Fluorescent Intensity (MFI, arbitury units) for either Pho4-GFP or PHO5pr-mCherry after subtracting the background (based on strains without the corresponding fluorescent protein). In (B), the fold change for PHO5 reporter is calculated as the background-subtracted RFP level divided by the basal expression level, as measured by the mean of the two strains containing the reporter but have pho4∆. The normalized induction ratio on the right column is calculated by dividing the induction fold change from the left column by the corresponding Pho4-GFP (background subtracted) levels and multiplied by the median Pho4-GFP levels of all strains. The dashed lines in both columns indicate the induction fold change of 1, i.e. no change compared to the pho4∆ strains. In both panels, the x-axes are square-root transformed so as to bring outliers into the plot without compressing the rest of the data range. An asterisk next to a bar indicates an overnight growth instead of a mid-log phase growth was used for quantification.
Discussions