tombishop1 / itraxBook

Book on the use of R for Itrax data processing
https://tombishop1.github.io/itraxBook/
Creative Commons Attribution 4.0 International
1 stars 0 forks source link

Section 6.5 add image plot to use transparency #21

Open tombishop1 opened 1 year ago

tombishop1 commented 4 months ago
# sidewaysPlot ----
mySidewaysImage1 <- aperm(CD166_19_S1$image$image, c(2,1,3))[, dim(aperm(CD166_19_S1$image$image, c(2,1,3)))[2]:1, ]
mySidewaysRadio1 <- t(CD166_19_S1$radiograph$image)[, dim(t(CD166_19_S1$radiograph$image))[2]:1]
mySidewaysImage2 <- aperm(CD166_19_S2$image$image, c(2,1,3))[, dim(aperm(CD166_19_S2$image$image, c(2,1,3)))[2]:1, ]
mySidewaysRadio2 <- t(CD166_19_S2$radiograph$image)[, dim(t(CD166_19_S2$radiograph$image))[2]:1]
mySidewaysImage3 <- aperm(CD166_19_S3$image$image, c(2,1,3))[, dim(aperm(CD166_19_S3$image$image, c(2,1,3)))[2]:1, ]
mySidewaysRadio3 <- t(CD166_19_S3$radiograph$image)[, dim(t(CD166_19_S3$radiograph$image))[2]:1]

mySidewaysPlot <- ggplot() +
  scale_x_reverse(limits = rev(range(as.numeric(CD166_19_xrf$depth)))) +
  scale_y_continuous(breaks = round(range(as.numeric(row.names(mySidewaysImage1))), 0),
                     limits = range(as.numeric(row.names(mySidewaysImage1)))) +
  labs(y = "[mm]", x = "Position [mm]") +
  annotation_custom(rasterGrob(mySidewaysImage1,
                               width = unit(1, "npc"),
                               height = unit(1, "npc")),
                    xmax = max(rev(range(CD166_19_S1$xrf$depth)/-1)),
                    xmin = min(rev(range(CD166_19_S1$xrf$depth)/-1)),
                    ymin = min(as.numeric(row.names(mySidewaysImage1))),
                    ymax = max(as.numeric(row.names(mySidewaysImage1)))
                    ) +
  annotation_custom(rasterGrob(mySidewaysRadio1,
                               width = unit(1, "npc"),
                               height = unit(1, "npc")),
                    xmax = max(rev(range(CD166_19_S1$xrf$depth)/-1)),
                    xmin = min(rev(range(CD166_19_S1$xrf$depth)/-1)),
                    ymin = mean(as.numeric(row.names(mySidewaysImage1))) - mean(as.numeric(row.names(mySidewaysRadio1))),
                    ymax = mean(as.numeric(row.names(mySidewaysImage1))) + mean(as.numeric(row.names(mySidewaysRadio1)))
  ) +
  annotation_custom(rasterGrob(mySidewaysImage2,
                               width = unit(1, "npc"),
                               height = unit(1, "npc")),
                    xmax = max(rev(range(CD166_19_S2$xrf$depth)/-1)),
                    xmin = min(rev(range(CD166_19_S2$xrf$depth)/-1)),
                    ymin = min(as.numeric(row.names(mySidewaysImage2))),
                    ymax = max(as.numeric(row.names(mySidewaysImage2)))
  ) +
  annotation_custom(rasterGrob(mySidewaysRadio2,
                               width = unit(1, "npc"),
                               height = unit(1, "npc")),
                    xmax = max(rev(range(CD166_19_S2$xrf$depth)/-1)),
                    xmin = min(rev(range(CD166_19_S2$xrf$depth)/-1)),
                    ymin = mean(as.numeric(row.names(mySidewaysImage1))) - mean(as.numeric(row.names(mySidewaysRadio1))),
                    ymax = mean(as.numeric(row.names(mySidewaysImage1))) + mean(as.numeric(row.names(mySidewaysRadio1)))
  ) +
  annotation_custom(rasterGrob(mySidewaysImage3,
                               width = unit(1, "npc"),
                               height = unit(1, "npc")),
                    xmax = max(rev(range(CD166_19_S3$xrf$depth)/-1)),
                    xmin = min(rev(range(CD166_19_S3$xrf$depth)/-1)),
                    ymin = min(as.numeric(row.names(mySidewaysImage3))),
                    ymax = max(as.numeric(row.names(mySidewaysImage3)))
  ) +
  annotation_custom(rasterGrob(mySidewaysRadio3,
                               width = unit(1, "npc"),
                               height = unit(1, "npc")),
                    xmax = max(rev(range(CD166_19_S3$xrf$depth)/-1)),
                    xmin = min(rev(range(CD166_19_S3$xrf$depth)/-1)),
                    ymin = mean(as.numeric(row.names(mySidewaysImage3))) - mean(as.numeric(row.names(mySidewaysRadio3))),
                    ymax = mean(as.numeric(row.names(mySidewaysImage3))) + mean(as.numeric(row.names(mySidewaysRadio3)))
  ) +
  theme(axis.title.y = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.y = element_blank(),
        axis.title.x = element_blank(),
        axis.text.x = element_blank(),
        axis.ticks.x = element_blank())

rm(mySidewaysImage1, mySidewaysImage2, mySidewaysImage3, mySidewaysRadio1, mySidewaysRadio2, mySidewaysRadio3)

# segplot
mySegPlot <- left_join(CD166_19_xrf, 
          tibble(uid = CD166_19_xrf_acomp %>%
                   rownames(),
                 group = dist(CD166_19_xrf_acomp) %>%
                   hclust(method = "ward.D2") %>%
                   cutree(k = 5) %>%
                   as.factor()
          ),
          by = "uid"
) %>%

  ggplot() + 
  geom_tile(aes(x = depth, y = 1, fill = group)) +
  scale_x_reverse() +
  theme(axis.title.y = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.y = element_blank(),
        legend.position = "none") 

egg::ggarrange(mySidewaysPlot, 
               mySegPlot + xlab("Depth [mm]"),
               nrow = 2, 
               heights = c(1,1)
               )

rm(mySidewaysPlot, mySegPlot)
tombishop1 commented 4 months ago
mySidewaysImage1 <- aperm(CD166_19_S1$image$image, c(2,1,3))[, dim(aperm(CD166_19_S1$image$image, c(2,1,3)))[2]:1, ]
mySidewaysRadio1 <- t(CD166_19_S1$radiograph$image)[, dim(t(CD166_19_S1$radiograph$image))[2]:1]
mySidewaysImage2 <- aperm(CD166_19_S2$image$image, c(2,1,3))[, dim(aperm(CD166_19_S2$image$image, c(2,1,3)))[2]:1, ]
mySidewaysRadio2 <- t(CD166_19_S2$radiograph$image)[, dim(t(CD166_19_S2$radiograph$image))[2]:1]
mySidewaysImage3 <- aperm(CD166_19_S3$image$image, c(2,1,3))[, dim(aperm(CD166_19_S3$image$image, c(2,1,3)))[2]:1, ]
mySidewaysRadio3 <- t(CD166_19_S3$radiograph$image)[, dim(t(CD166_19_S3$radiograph$image))[2]:1]

Segs <- left_join(CD166_19_xrf, 
                  tibble(uid = CD166_19_xrf_acomp %>%
                           rownames(),
                         group = dist(CD166_19_xrf_acomp) %>%
                           hclust(method = "ward.D2") %>%
                           cutree(k = 5) %>%
                           as.factor()
                  ),
                  by = "uid"
) 

ggplot() +
  scale_x_reverse(limits = rev(range(as.numeric(CD166_19_xrf$depth)))) +
  scale_y_continuous(breaks = round(range(as.numeric(row.names(mySidewaysImage1))), 0),
                     limits = range(as.numeric(row.names(mySidewaysImage1)))) +
  labs(y = "[mm]", x = "Position [mm]") +
  annotation_custom(rasterGrob(mySidewaysImage1,
                               width = unit(1, "npc"),
                               height = unit(1, "npc")),
                    xmax = max(rev(range(CD166_19_S1$xrf$depth)/-1)),
                    xmin = min(rev(range(CD166_19_S1$xrf$depth)/-1)),
                    ymin = min(as.numeric(row.names(mySidewaysImage1))),
                    ymax = max(as.numeric(row.names(mySidewaysImage1)))
  ) +
  annotation_custom(rasterGrob(mySidewaysRadio1,
                               width = unit(1, "npc"),
                               height = unit(1, "npc")),
                    xmax = max(rev(range(CD166_19_S1$xrf$depth)/-1)),
                    xmin = min(rev(range(CD166_19_S1$xrf$depth)/-1)),
                    ymin = mean(as.numeric(row.names(mySidewaysImage1))) - mean(as.numeric(row.names(mySidewaysRadio1))),
                    ymax = mean(as.numeric(row.names(mySidewaysImage1))) + mean(as.numeric(row.names(mySidewaysRadio1)))
  ) +
  annotation_custom(rasterGrob(mySidewaysImage2,
                               width = unit(1, "npc"),
                               height = unit(1, "npc")),
                    xmax = max(rev(range(CD166_19_S2$xrf$depth)/-1)),
                    xmin = min(rev(range(CD166_19_S2$xrf$depth)/-1)),
                    ymin = min(as.numeric(row.names(mySidewaysImage2))),
                    ymax = max(as.numeric(row.names(mySidewaysImage2)))
  ) +
  annotation_custom(rasterGrob(mySidewaysRadio2,
                               width = unit(1, "npc"),
                               height = unit(1, "npc")),
                    xmax = max(rev(range(CD166_19_S2$xrf$depth)/-1)),
                    xmin = min(rev(range(CD166_19_S2$xrf$depth)/-1)),
                    ymin = mean(as.numeric(row.names(mySidewaysImage1))) - mean(as.numeric(row.names(mySidewaysRadio1))),
                    ymax = mean(as.numeric(row.names(mySidewaysImage1))) + mean(as.numeric(row.names(mySidewaysRadio1)))
  ) +
  annotation_custom(rasterGrob(mySidewaysImage3,
                               width = unit(1, "npc"),
                               height = unit(1, "npc")),
                    xmax = max(rev(range(CD166_19_S3$xrf$depth)/-1)),
                    xmin = min(rev(range(CD166_19_S3$xrf$depth)/-1)),
                    ymin = min(as.numeric(row.names(mySidewaysImage3))),
                    ymax = max(as.numeric(row.names(mySidewaysImage3)))
  ) +
  annotation_custom(rasterGrob(mySidewaysRadio3,
                               width = unit(1, "npc"),
                               height = unit(1, "npc")),
                    xmax = max(rev(range(CD166_19_S3$xrf$depth)/-1)),
                    xmin = min(rev(range(CD166_19_S3$xrf$depth)/-1)),
                    ymin = mean(as.numeric(row.names(mySidewaysImage3))) - mean(as.numeric(row.names(mySidewaysRadio3))),
                    ymax = mean(as.numeric(row.names(mySidewaysImage3))) + mean(as.numeric(row.names(mySidewaysRadio3)))
  ) +
  geom_tile(data = Segs, aes(x = depth, y = 98/2, height = 98, fill = group), alpha = 0.25) #+
  theme(axis.title.y = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.y = element_blank(),
        axis.title.x = element_blank(),
        axis.text.x = element_blank(),
        axis.ticks.x = element_blank())

rm(mySidewaysImage1, mySidewaysImage2, mySidewaysImage3, mySidewaysRadio1, mySidewaysRadio2, mySidewaysRadio3)
rm(Segs)