2023년 2월 14일 화요일

[하루에 한 R] gplots heatmap.2()을 졸업하고 ComplexHeatmap의 Heatmap() 함수로 갈아타기

어제 밤늦도록 검색와 실습을 통해서 알아낸 사실 (1) phylogenetic tree를 다루는 클래스는 ape 패키지의 phylo도 있지만 phylogram 패키지의 dendrogram이 더 나을 때도 있다. (2) heatmap을 그리려면 ComplexHeatmap 패키지의 Heatmap() 함수가 더 낫다.

아래의 참고자료를 읽으면서 그야말로 가슴 벅차게 밀려드는 감동의 물결을 느꼈다. gplots의 heatmap.2()에서 구현하기 어려웠던 것들이 여기에서는 가능하다!! 만약 내가 gplots의 기능을 속속들이 공부하지 못하여 이런 오해를 하는 것인지도 모르겠지만.

ComplexHeatmap Complete Reference

외부에서 클러스터링 관련 정보를 줄 수 있다는 것(그러려면 ape가 아니라 phylogram으로 newick 파일을 임포트해야 된다), 그리고 heatmap 가장자리에 표현되는 column/row label을 자유자재로 바꿀 수 있다는 것이 현재 나에게 가장 유용한 기능이었다. 예를 들어서 데이터프레임의 label은 GCF_000146875.3 형식의 RefSeq assembly accession이지만 heatmap 옆에는 Paenibacillus polymyxa E681이라는 실제 균주명을 표현하고 싶다고 가정하자. 만약 heatmap을 만드는 함수를 사용한 클러스터링 결과를 그대로 쓰는 경우라면, 데이터프레임의 column과 row label을 assembly accession으로부터 균주명으로 먼저 치환해 놓으면 된다. Named vector를 활용하면 간단하게 구현할 수 있다. 그러나 외부 프로그램을 이용하여 작성한 dendrogram을 임포트하여 heatmap의 클러스터링 근거로 쓰려면 약간 곤란한 문제가 발생한다. 트리 파일(예를 들어 newick)에는 leaf label로 쓰면 곤란한 문자가 있다. 예를 들자면 괄호 같은 것. 균주명에는 괄호가 포함되는 경우가 종종 있어서 이를 leaf label로 쓰기가 곤란하다. 따라서 트리 자료와 데이터프레임의 label은 전부 간단한 ID(예를 들어 accessembly accession)으로 통일하여 서로 연결된 구조를 잃지 않게 하고, 마지막 단계에서 heatmap을 그림으로 나타날 때 주변에 표시되는 column과 row label을 사용자가 원하는 방식으로 나타내도록 하는 것이 바람직하다.

조만간 자료를 정리하여 포스팅해야 되겠다.

댓글 없음: