As per this
git issue, I'm struggling with adding fill colors to the box-plot generated by
I post below the code I'm using, but essentially I need to color box-plots based on the location field of my data-frame (see figure at the end); however, upon doing so I'm getting prompted with the following:
Error in geom_boxplot():
! Problem while computing aesthetics.
ℹ Error occurred in the 7th layer.
Caused by error in check_aesthetics():
! Aesthetics must be either length 1 or the same as the data
(300).
✖ Fix the following mappings: fill.
Run rlang::last_trace() to see where the error occurred.
Now, since then I've tried to add an extra colum for the group argument but it appears to not having any effect on the final result...
Anyway, this is the code — I'm trying to closely follow
this guide:
CODE
library(ape)
library(dplyr)
library(tibble)
library(treeio)
library(janitor)
library(ggtree)
library(ggplot2)
library(tidytree)
library(phytools)
library(phangorn)
library(phylobase)
library(ggtreeExtra)
library(RColorBrewer)
###LOAD DATA AND WRANGLING
ibs_matrix = read.delim("/path/to/phylo_tree_header.phy", sep="\t", header=TRUE)
colnames(ibs_matrix)[1] <- ""
ibs_matrix[1] <- NULL
box_plot = read.delim("/path/to/box_plot.txt", sep="\t", header=FALSE)
box_plot[1,1] <- "id"
#ibs_matrix
ibs_matrix_t <- t(ibs_matrix)
box_plot_t <- t(box_plot); box_plot_t <- janitor::row_to_names(box_plot_t, 1)
#ibs_matrix_t
###ADD META INFO AND DF FORMATTING
variety <- c("wt", "lr", "wt", "wt", "lr", "wt", "wt", "wt", "lr", "lr", "lr", "lr")
location <- c("ESP", "ESP", "ITA", "ITA", "JOR", "TUR", "PAL", "GRC", "GRC", "ESP", "ESP", "ITA")
meta_df <- data.frame(ibs_matrix_t[, 1], variety, location); meta_df <- meta_df[ -c(1) ]
meta_df$id <- rownames(meta_df); meta_df <- meta_df[,c(3,1,2)]
rownames(meta_df) <- NULL
###COMPUTE AND CALCULATE PIRWISE DISTANCES, PLUS CONVERSION TO PHYLO
pdist <- dist(ibs_matrix_t, method="euclidean", diag=TRUE, upper=TRUE, p=2)
distances <- distanceHadamard(as.matrix(pdist))
#lento(distances)
phylo <- as.phylo(distances)
###GGTREE PERSONALIZATION
meta_df$variety <- factor(meta_df$variety, levels=c('wt', 'lr'))
t1 <- ggtree(phylo, branch.length='none', layout='circular') %<+% meta_df +
geom_tippoint(aes(color=variety)) + #, shape=21, size=3) +
#scale_color_manual(values=c("black", "black")) +
#scale_fill_manual(values=brewer.pal(9, "Greens")[c(7, 3)]) +
scale_color_manual(values=brewer.pal(9, "Greens")[c(7, 3)]) +
geom_tiplab(size=3, hjust=-.1)
t1
box_plot <- janitor::row_to_names(box_plot, 1); box_plot=subset(box_plot, select=-c(id))
box_plot_t <- data.frame(values=matrix(t(box_plot)),
id=colnames(box_plot)); box_plot_t <- box_plot_t[order(box_plot_t[["id"]]),]
box_plot_t <- full_join(box_plot_t, meta_df, by="id")
t1_box <- t1 +
geom_fruit(
data=box_plot_t, geom=geom_boxplot,
mapping = aes(
y=id,
x=as.numeric(as.character(values))
),
offset=.4, size=.2, outlier.size=.5, outlier.stroke=.08, outlier.shape=21,
axis.params = list(
axis="x",
text.size=1.8,
hjust=1,
vjust=0.5,
nbreak=3
),
grid.params=list()
)
t1_box <- rotate_tree(t1_box, -90)
t1_box
as well as the dput for the data, thanks in advance:
IBS_MATRIX
structure(list(INLUP00165 = c(1.53578, -0.105267, -0.0945413,
-0.083604, -0.209443, -0.139285, -0.208677, -0.199941, -0.209932,
-0.130887, -0.082297, -0.0719018), INLUP00169 = c(-0.105267,
1.60124, -0.142996, -0.023115, -0.243876, -0.0435319, -0.243711,
-0.256835, -0.255688, -0.132416, -0.102566, -0.0512363), INLUP00208 = c(-0.0945413,
-0.142996, 1.70865, -0.00168153, -0.229154, -0.0920099, -0.201994,
-0.278662, -0.210596, -0.190707, -0.164444, -0.101866), INLUP00214 = c(-0.083604,
-0.023115, -0.00168153, 1.36444, -0.176534, -0.0313074, -0.178905,
-0.256911, -0.220043, -0.199516, -0.16628, -0.0265423), INLUP00228 = c(-0.209443,
-0.243876, -0.229154, -0.176534, 1.66881, -0.223521, 0.672806,
-0.346079, -0.25505, -0.243328, -0.219959, -0.194674), INLUP00233 = c(-0.139285,
-0.0435319, -0.0920099, -0.0313074, -0.223521, 1.6054, -0.209163,
-0.304027, -0.216554, -0.225491, -0.186448, 0.0659375), INLUP00245 = c(-0.208677,
-0.243711, -0.201994, -0.178905, 0.672806, -0.209163, 1.63191,
-0.329851, -0.252808, -0.252563, -0.233733, -0.193315), INLUP00325 = c(-0.199941,
-0.256835, -0.278662, -0.256911, -0.346079, -0.304027, -0.329851,
2.72659, -0.253858, -0.0673777, -0.158547, -0.274507), INLUP00332 = c(-0.209932,
-0.255688, -0.210596, -0.220043, -0.25505, -0.216554, -0.252808,
-0.253858, 2.45426, -0.233602, -0.159556, -0.186578), INLUP00393 = c(-0.130887,
-0.132416, -0.190707, -0.199516, -0.243328, -0.225491, -0.252563,
-0.0673777, -0.233602, 1.91195, -0.0165982, -0.219464), INLUP00418 = c(-0.082297,
-0.102566, -0.164444, -0.16628, -0.219959, -0.186448, -0.233733,
-0.158547, -0.159556, -0.0165982, 1.64659, -0.156163), INLUP00496 = c(-0.0719018,
-0.0512363, -0.101866, -0.0265423, -0.194674, 0.0659375, -0.193315,
-0.274507, -0.186578, -0.219464, -0.156163, 1.41031)), row.names = c(NA,
-12L), class = "data.frame")
BOX_PLOT
structure(list(INLUP00165 = c("71247", "46097", "64492", "56344",
"45840", "55882", "53758", "54010", "46585", "48590", "56855",
"60986", "52021", "51466", "63630", "40707", "39995", "45744",
"50270", "51680", "46447", "44447", "58687", "51386", "48827"
), INLUP00169 = c("52201", "41279", "54405", "42242", "44539",
"53794", "42223", "34697", "34368", "29109", "39310", "51673",
"40718", "34476", "41809", "36536", "39560", "43025", "46098",
"53332", "37042", "49219", "57686", "41765", "42885"), INLUP00208 = c("16628",
"12529", "22011", "15841", "14072", "19491", "13796", "17956",
"12269", "19643", "17267", "14894", "17428", "21028", "14427",
"12621", "12243", "13858", "14986", "17584", "16875", "12470",
"22386", "20701", "14384"), INLUP00214 = c("6491", "5005", "9796",
"5728", "4567", "6823", "6793", "6042", "4116", "8757", "6534",
"7075", "6861", "11437", "8627", "5811", "5040", "5795", "7812",
"8108", "4953", "8151", "11226", "6558", "1493"), INLUP00228 = c("66954",
"49763", "61616", "53745", "47684", "52729", "51194", "53530",
"46432", "52910", "50143", "50145", "47138", "51653", "62836",
"39766", "45045", "48115", "15", "53038", "54870", "49241", "41094",
"66164", "43308"), INLUP00233 = c("10543", "7371", "12433", "4465",
"8059", "9989", "12389", "10893", "4609", "11799", "10143", "9525",
"7503", "13011", "9711", "7854", "7143", "9792", "7914", "11623",
"11173", "9082", "13972", "15058", "8268"), INLUP00245 = c("52870",
"38910", "51872", "43726", "37511", "45524", "41920", "42543",
"37332", "44934", "42060", "41015", "39371", "38787", "54069",
"31060", "37420", "42669", "41404", "49921", "40529", "33367",
"53711", "38905", "40467"), INLUP00325 = c("47797", "30812",
"48732", "32561", "29759", "46370", "34187", "36516", "32158",
"36628", "35471", "43933", "36857", "35275", "50396", "25007",
"30359", "38817", "18", "33558", "48311", "35956", "35634", "48511",
"47230"), INLUP00332 = c("52227", "40933", "50193", "43050",
"33053", "48781", "40596", "37521", "34667", "52567", "41589",
"39315", "45442", "43160", "54746", "31881", "35051", "38912",
"39364", "48679", "40634", "42024", "45438", "38130", "43506"
), INLUP00393 = c("82244", "61652", "73363", "58533", "58709",
"68165", "61546", "65897", "51179", "63922", "59164", "54743",
"57061", "81867", "49679", "53079", "60428", "314", "57889",
"63260", "56838", "56178", "68247", "50214", "56837"), INLUP00418 = c("16513",
"14388", "20001", "16319", "10966", "19256", "13421", "16286",
"11389", "18051", "12827", "17798", "17970", "19369", "12898",
"11340", "14178", "174", "18573", "14752", "17577", "20905",
"21986", "13596", "2354"), INLUP00496 = c("98447", "92995", "94249",
"88604", "58761", "91335", "79049", "81218", "74616", "90049",
"78279", "95932", "74531", "69362", "100019", "69923", "75383",
"57086", "32", "80715", "102201", "71007", "77709", "55065",
"45288")), row.names = 2:26, class = "data.frame")
