2023년 11월 16일 목요일

[iTOL] Text label dataset을 이용한 자유로운 텍스트 장식

어제 쓴 글('iTOL 제어판에서 라벨 스타일을 일괄적으로 편집하기')에서는 내가 원하는 방식의 라벨 스타일 변경을 제대로 하지 못하였음을 밝혔다. 대신 text label dataset을 이용하면 가능할 수도 있겠다는 것으로 글을 마무리하였었다. iTOL을 익히던 초창기에는 dataset file이 이렇게 다양하지 않았던 것으로 기억한다. 

테스트를 해 보니 과연 이것이 가장 완벽한 해결책임을 알 수 있었다. 오늘의 글에서는 이를 좀더 자세히 다루어 보기로 한다. 단, heatmap 자료의 column label에 대해서는 자유자재로 스타일을 바꾸는 것이 과연 가능한지 아직 알 수 없다.

나는 보통 유전체 염기서열 정보를 이용하여 트리를 만든다. 따라서 Newick tree file을 만들 때에는 assembly accession을 leaf label로 사용한다. 


Assembly accession으로는 무슨 생명체인지 알 수가 없으니 tree 파일의 ID와 실제 표시하고 싶은 학명 또는 균주 정보로 바꾸어야 한다. 가장 직관적인 방법은 labels dataset 파일을 사용하는 것이다. 위에서 보인 트리 자료에 대하여 적용할 labels dataset 파일 일부를 소개해 본다.

GCF_014288055.1,GCF_014288055.1 Agathobaculum sp. M2
GCF_900625105.1,GCF_900625105.1 Agathobaculum sp. Marseille-P7918
GCF_014287995.1,GCF_014287995.1 Agathobaculum sp. NSJ-28

분리자(쉼표)를 경계로 ID와 표시할 텍스트를 나열하였다. Assembly accession으로 나타낸 leaf ID를 균주 정보로 완전히 대체하는 것이 아니라 assembly accession + 균주 번호를 전부 나타내고 싶었기에 이러한 형태가 되었다. 이 파일을 적용하면 다음과 같은 트리 그림이 나온다.


이 상태에서 label text의 속성(색깔, 이탤릭, 볼드)를 바꾸거나 배경색을 지정하는 것은 style dataset 파일을 이용하면 된다. 파일의 데이터 라인은 대충 다음과 같다.

GCF_000807675.2,label,node,#000000,1,bold,#FAEEC3
GCF_900155735.1,label,node,#000000,1,normal,#FAEEC3
GCA_003096535.1,label,node,#000000,1,normal,#FAEEC3

만들어진 그림을 보자. 표시된 텍스트는 ID라는 단일한 필드이다.


이것으로 충분히 아름답다. 하지만 학명을 이탤릭으로 표시하지 못하였다. 제어판의 label style creator를 사용하면 라벨 안에 다양한 스타일 속성을 부여할 수 있다. 그러나 라벨을 공백(분리자는 변경 가능) 기준으로 나눈 뒤 특정 필드에 대해서 속성을 바꾸는 식으로 작동하게 되므로 2, 3번째 필드를 이탤릭으로 바꿀 경우 'sp.'까지도 무차별로 변환된다. 더욱 세밀한 조정 방법이 필요하다.

iTOL 도움말을 공부하다가 우연히 알게 된 text label dataset 덕분에 이 골치아픈 상황을 벗어나게 되었다. 이 데이터셋은 labels dataset 파일의 기능까지 어느 정도는 포함한다. 단, 내가 만든 샘플 그림에서는 ID(assembly accession)이 항상 표시된다. 파일의 데이터 라인을 소개하면 다음과 같다. 텍스트의 색깔을 바꾸는 것도 당연히 가능하고, 볼드와 이탤릭을 한꺼번에 표시할 수 있어서 매우 유용하다. Label position(external or internal)을 정확히 이해하는 것이 중요하다. 다음의 데이터 라인에서 세 번째에 위치하는 숫자가 label position이다. -1, 즉 external로 설정해야 트리의 외부에 텍스트가 표시된다. 우리가 원하는 대부분의 상황에 해당한다.

GCF_025567315.1,<bi>Agathobaculum ammoniilyticum </bi><n>Sanger_34T</n>,-1,#000000,bold,1,0
GCF_015552745.1,<i>Agathobaculum butyriciproducens </i><n>1001099B_141217_D10</n>,-1,#000000,normal,1,0
GCF_027664705.1,<i>Agathobaculum butyriciproducens </i><n>AF94-03DA</n>,-1,#000000,normal,1,0
GCF_020687055.1,<i>Agathobaculum butyriciproducens </i><n>CLA-AA-H270</n>,-1,#000000,normal,1,0

결과를 살펴보자. 애초에 원했던 것이 고스란히 구현되었다. Leaf ID와 그 옆에 표시된 text는 분명히 별도의 필드라는 것이 한눈에 느껴진다.


다음은 iTOL 도움말에서 text label dataset의 활용을 극대화하여 나타낸 매우 화려한 사례이다. 여기에서 leaf ID가 보이지 않는 것은 Control panel > Basic > Display > Labels에서 'Hide'를 선택했기 때문이다. 만약 labels dataset만을 이용하였다면, 라벨을 보이지 않게 한 경우 leaf 옆에는 아무런 텍스트가 나타나지 않을 것이다.


제어판의 dataset editor에서 데이터를 하나씩 입력하거나 클립보드에서 복사해 넣어도 된다.


2023년 11월 17일 업데이트

iTOL에서 제공하는 text lable dataset template file(업데이트 작성 날짜 기준)에는 사소한 오류가 두 군데 존재한다. ALL_LABELS_ROTATION 변수는 정의되지 않은 것이라는 오류 메시지가 나오므로 주석 처리를 해야 한다. 그리고 파일 마지막 부분에 소개한 DATA example에서 Oryza sativa 라인이 잘못되었다. Leaf 3개짜리 가상의 트리를 만들어서 적용했을 때 Oryza sativa 텍스트가 표시되지 않아서 한참을 헤맸었다. 다음의 data example line을 보라.

DATA
#Examples

#node 9598 will have an external label 'Pan troglodytes' in bold red and twice the size of standard labels
#9598,Pan troglodytes,-1,#ff0000,bold,2,0

#node 9606 will have an external label with multiple mixed styles
#9606,<bi color='#006600'>Homo </bi><i>sapiens</i><sup size='0.5' color='#999999'>citation</sup>,-1,#000000,normal,1,0

#node 4530 will have an internal label 'Oryza sativa' in bold italic blue, starting directly over the node
#4530,Oryza sativa,0,#0000ff,bold-italic,1

데이터 라인은 ID, label, position, color, style, size_factor, rotation의 6개 필드로 구성되어야 하지만 Oryza sativa 라인에서는 맨 끝에 와야 하는 rotation이 빠진 상태이다. 여기에 ',0'을 추가해야 한다. 

데이터셋 템플릿 파일에 최종 수정일이나 버전 번호를 붙여서 관리를 하면 더욱 좋을 것 같다. 오류 보고 겸 나의 의견을 간단히 적어서 iTOL 측에 보냈다(iTOL about & contact). 이메일을 보낸 다음날, iTOL의 개발자인 Ivica Letunic을 통해서 곧 수정되었다는 답장을 받았다. 개인 웹사이트구글 스칼라를 보니 이 사람도 보통 수준의 연구자가 아니다! 2006년부터 2021년까지 출판된 iTOL 논문의 저자는 전부 Ivica Letunic과 Peer Bork 두 사람이다! Peer Bork는 EMBL Heidelberg의 소장 아닌가...

댓글 없음: