refactoring logo plots to add flame bar

This commit is contained in:
Tanushree Tunstall 2022-08-06 18:47:54 +01:00
parent f0a9eb4eec
commit c968089cd2
4 changed files with 194 additions and 196 deletions

View file

@ -1,64 +1,29 @@
# takes a dataframe and returns the same dataframe with two extra columns for colours and position
generate_distance_colour_map = function(plotdf,
generate_distance_colour_map = function(plot_df,
xvar_colname = "position",
yvar_colname = 'duet_scaled',
lig_dist_colname = "ligand_distance",
lig_dist_colours = c("green", "yellow", "orange", "red"),
#tpos0 = 0,
#tpos1 = 0,
#tpos2 = 0,
#tpos3 = 0,
debug = FALSE
debug = TRUE
)
{
#-------------------
# x and y axis
# range, scale, etc
#-------------------
my_xlim = length(unique(plotdf[[yvar_colname]])); my_xlim
ymin = min(plotdf[[yvar_colname]]); ymin
ymax = max(plotdf[[yvar_colname]]); ymax
#if (tpos0 == 0){
# tpos0 = ymin-0.5
#}
#if (tpos1 == 0){
# tpos1 = ymin-0.65
#}
#if (tpos2 == 0){
# tpos2 = ymin-0.75
#}
#if (tpos3 == 0){
# tpos3 = ymin-0.85
#}
if (debug) {
cat("\nAnnotating x-axis ~", lig_dist_colname, "requested...")
}
#-------------------------------------
# round column values: to colour by
#--------------------------------------
#plotdf = plotdf[order(plotdf[[lig_dist_colname]]),]
plotdf['lig_distR'] = round(plotdf[[lig_dist_colname]], digits = 0)
#head(plotdf['lig_distR'])
#-------------------------------------
# ligand distance range, min, max, etc
#--------------------------------------
lig_min = min(round(plotdf[[lig_dist_colname]]), na.rm = T); lig_min
lig_max = max(round(plotdf[[lig_dist_colname]]), na.rm = T); lig_max
lig_mean = round(mean(round(plotdf[[lig_dist_colname]]), na.rm = T)); lig_mean
plot_df['lig_distR'] = round(plot_df[[lig_dist_colname]], digits = 0)
lig_min = min(round(plot_df[[lig_dist_colname]]), na.rm = T); lig_min
lig_max = max(round(plot_df[[lig_dist_colname]]), na.rm = T); lig_max
lig_mean = round(mean(round(plot_df[[lig_dist_colname]]), na.rm = T)); lig_mean
#-------------------------------------
# Create mapping colour key
#--------------------------------------
# sorting removes NA, so that n_colours == length(ligD_valsR)
n_colours = length(sort(unique(round(plotdf[[lig_dist_colname]], digits = 0)))); n_colours
n_colours = length(sort(unique(round(plot_df[[lig_dist_colname]], digits = 0)))); n_colours
lig_cols = colorRampPalette(lig_dist_colours)(n_colours); lig_cols
ligD_valsR = sort(unique(round(plotdf[[lig_dist_colname]], digits = 0))); ligD_valsR
length(ligD_valsR)
ligD_valsR = sort(unique(round(plot_df[[lig_dist_colname]], digits = 0))); ligD_valsR
if (debug) {
length(ligD_valsR)
if (n_colours == length(ligD_valsR)) {
cat("\nStarting: mapping b/w"
, lig_dist_colname
@ -73,49 +38,49 @@ generate_distance_colour_map = function(plotdf,
ligDcolKey <- data.frame(ligD_colours = lig_cols
, lig_distR = ligD_valsR); ligDcolKey
names(ligDcolKey)
if (debug) {
names(ligDcolKey)
cat("\nSuccessful: Mapping b/w", lig_dist_colname, "and colours")
}
#-------------------------------------
# merge colour key with plotdf
# merge colour key with plot_df
#--------------------------------------
plotdf = merge(plotdf, ligDcolKey, by = 'lig_distR')
plot_df = merge(plot_df, ligDcolKey, by = 'lig_distR')
plotdf_check = as.data.frame(cbind(position = plotdf[[xvar_colname]]
, ligD = plotdf[[lig_dist_colname]]
, ligDR = plotdf$lig_distR
, ligD_cols = plotdf$ligD_colours))
return(plotdf)
# plot_df_check = as.data.frame(cbind(position = plot_df[[xvar_colname]]
# , ligD = plot_df[[lig_dist_colname]]
# , ligDR = plot_df$lig_distR
# , ligD_cols = plot_df$ligD_colours))
return(plot_df)
}
generate_distance_legend = function(plotdf,
generate_distance_legend = function(plot_df,
yvar_colname,
xvar_colname = 'position',
lig_dist_colname = "ligand_distance",
legend_title = "Ligand\nDistance"
)
)
{
# build legend for ligand distance "heat bar"
lig_min = min(round(plotdf[[lig_dist_colname]]), na.rm = T); lig_min
lig_max = max(round(plotdf[[lig_dist_colname]]), na.rm = T); lig_max
lig_mean = round(mean(round(plotdf[[lig_dist_colname]]), na.rm = T)); lig_mean
lig_min = min(round(plot_df[[lig_dist_colname]]), na.rm = T); lig_min
lig_max = max(round(plot_df[[lig_dist_colname]]), na.rm = T); lig_max
lig_mean = round(mean(round(plot_df[[lig_dist_colname]]), na.rm = T)); lig_mean
labels = seq(lig_min, lig_max, len = 5); labels
labelsD = round(labels, digits = 0); labelsD
get_legend(ggplot(plotdf, aes_string(x = sprintf("factor(%s)", xvar_colname)
, y = yvar_colname)) +
geom_tile(aes(fill = .data[[lig_dist_colname]])
, colour = "white") +
scale_fill_gradient2(midpoint = lig_mean
, low = "green"
, mid = "yellow"
, high = "red"
, breaks = labels
, limits = c(lig_min, lig_max)
, labels = labelsD
, name = legend_title)
)
get_legend(
ggplot(plot_df, aes_string(x = sprintf("factor(%s)", xvar_colname), y=0)) +
geom_tile(aes(fill = .data[[lig_dist_colname]])
, colour = "white") +
scale_fill_gradient2(midpoint = lig_mean
, low = "green"
, mid = "yellow"
, high = "red"
, breaks = labels
, limits = c(lig_min, lig_max)
, labels = labelsD
, name = legend_title)
)
}