タンパク質の模式図をRで描いてみよう
タンパク質の基本構造
タンパク質は20種類のアミノ酸(または、そのうちのいくつか)が直鎖状に連なったポリペプチド鎖で構成されています。このアミノ酸残基の配列を「一次構造」といいます。ポリペプチド鎖は折りたたまれて立体的な構造をとり、その中で、αヘリックス構造やβシート構造など、特定のドメインに形成される基本的な構造を「二次構造」と呼びます。この二次構造が連なった一本のポリペプチド鎖全体の立体構造、すなわちタンパク質全体の三次元構造を「三次構造」といいます。さらに、複数のタンパク質が相互作用し集合した構造を「四次構造」と呼びます。
Gene ID
遺伝子やタンパク質について論文に記載する場合には、遺伝子名やIDを記載します。例えば、シロイヌナズナの場合には、The Arabidopsis Information Resource (TAIR)に記載されたGene IDが使用されます。イネ、トマト、ミヤコグサなど、全ゲノム配列が解読された植物種については、それぞれのデータベースが公開されており、各遺伝子にはGene IDが付与されています。新たに発見したDNA配列であれば、GeneBankに配列を登録し、その登録番号を論文に記載します。
例、ARABIDOPSIS THALIANA HOMEOBOX25 (ATHB25, AT5G65410)
タンパク質構造の模式図
また、Gene IDに合わせて、その遺伝子がコードするタンパク質の構造をわかりやすく示すために、以下のような模式図をつけることが一般的です。
模式図は、Microsoft PowerPointやApple Keynote、あるいはAdobe Illustratorなどのソフトウェアで作成されるのが一般的ですが、複数のパラログやオーソログを並べて図を作成するのは、思いのほか手間がかかります。特に、全長のアミノ酸残基数や、それぞれのドメインの開始位置と終了位置が数値データとして得られているのに、それに合わせてマウスを使って図を手動で描くのは非効率的で面倒です。
そこで、Rでタンパク質の模式図を描いてみましょう。
Rでタンパク質のドメイン構造を示す模式図を作成
先ほどのATHB25のパラログを例として、以下の図を描いてみます。
まず、各遺伝子のコードするタンパク質の全長アミノ酸配列の長さとzinc finger regionおよびhomeodomain領域のアミノ酸の位置を調べて、以下のようなcsvファイルを作成しましょう。
ここでは、zinc finger regionとhomeodomainは、それぞれ、以下のサイトのPfamとSuperFamilyの位置を参考にしました。
Plant Transcription Factor Database
それでは、Rを起動して図を描いてみます。
まず、ggplotsとdplyrライブラリを読み込みます。
> library(ggplot2)
> library(dplyr)
次に、先ほど作成したATHBs_structure.csvを読み込んで、内容を確認してみましす。
> data <- read.csv("ATHBs_structure.csv")
> data
gene total ZF_start ZF_end HD_start HD_end
1 ATHB25 (AT5G65410) 279 73 124 182 252
2 ATHB22 (AT4G24660) 220 47 99 145 218
3 ATHB33 (AT1G75240) 309 74 126 234 301
4 ATHB21 (AT2G02540) 310 85 137 210 283
5 ATHB34 (AT3G28920) 312 50 104 183 252
6 ATHB29 (AT1G69600) 242 29 82 148 214
7 ATHB31 (AT1G14440) 312 88 140 207 279
8 ATHB30 (AT5G15210) 271 55 108 166 237
9 ATHB23 (AT5G39760) 334 55 108 188 261
10 ATHB28 (AT3G50890) 249 59 110 174 243
11 ATHB26 (AT5G60480) 223 35 88 112 172
12 ATHB24 (AT2G18350) 262 80 132 185 259
13 ATHB27 (AT5G42780) 242 63 111 167 237
14 ATHB32 (AT1G14687) 168 5 50 98 164
geneの列をfactorに変換して、plotで図を描画します。
> data$gene <- factor(data$gene, levels = data$gene)
> plot <- ggplot(data, aes(y = gene))
+ geom_rect(aes(xmin = 0, xmax = total, ymin = as.numeric(gene) - 0.4, ymax = as.numeric(gene) + 0.4), fill = "lightgrey")
+ geom_rect(aes(xmin = ZF_start, xmax = ZF_end, ymin = as.numeric(gene) - 0.4, ymax = as.numeric(gene) + 0.4), fill = "green")
+ geom_rect(aes(xmin = HD_start, xmax = HD_end, ymin = as.numeric(gene) - 0.4, ymax = as.numeric(gene) + 0.4), fill = "yellow")
+ labs(x = "Amino Acid Position", y = "genes", title = "Zinc Finger and Homeodomain region in ATHB structure")
+ theme_minimal()
出力すると、
> print(plot)
順番を引用論文と同じにしてみましょう。
> sorted_data <- data[order(sub("ATHB", "", data$gene), decreasing = TRUE), ]
> sorted_data
gene total ZF_start ZF_end HD_start HD_end
5 ATHB34 (AT3G28920) 312 50 104 183 252
3 ATHB33 (AT1G75240) 309 74 126 234 301
14 ATHB32 (AT1G14687) 168 5 50 98 164
7 ATHB31 (AT1G14440) 312 88 140 207 279
8 ATHB30 (AT5G15210) 271 55 108 166 237
6 ATHB29 (AT1G69600) 242 29 82 148 214
10 ATHB28 (AT3G50890) 249 59 110 174 243
13 ATHB27 (AT5G42780) 242 63 111 167 237
11 ATHB26 (AT5G60480) 223 35 88 112 172
1 ATHB25 (AT5G65410) 279 73 124 182 252
12 ATHB24 (AT2G18350) 262 80 132 185 259
9 ATHB23 (AT5G39760) 334 55 108 188 261
2 ATHB22 (AT4G24660) 220 47 99 145 218
4 ATHB21 (AT2G02540) 310 85 137 210 283
> sorted_data$gene <- factor(sorted_data$gene, levels = sorted_data$gene)
> plot <- ggplot(sorted_data, aes(y = gene))
+ geom_rect(aes(xmin = 0, xmax = total, ymin = as.numeric(gene) - 0.4, ymax = as.numeric(gene) + 0.4), fill = "lightgrey")
+ geom_rect(aes(xmin = ZF_start, xmax = ZF_end, ymin = as.numeric(gene) - 0.4, ymax = as.numeric(gene) + 0.4), fill = "green")
+ geom_rect(aes(xmin = HD_start, xmax = HD_end, ymin = as.numeric(gene) - 0.4, ymax = as.numeric(gene) + 0.4), fill = "yellow")
+ labs(x = "Amino Acid Position", y = "ATHBs", title = "Protein Structures with Zinc Finger and Homeodomain domain")
+ theme_minimal()
> print(plot)
できました。
フォントのサイズを少し大きくしてみましょう。
>plot <- ggplot(sorted_data, aes(y = gene))
+ geom_rect(aes(xmin = 0, xmax = total, ymin = as.numeric(gene) - 0.4, ymax = as.numeric(gene) + 0.4), fill = "lightgrey")
+ geom_rect(aes(xmin = ZF_start, xmax = ZF_end, ymin = as.numeric(gene) - 0.4, ymax = as.numeric(gene) + 0.4), fill = "green")
+ geom_rect(aes(xmin = HD_start, xmax = HD_end, ymin = as.numeric(gene) - 0.4, ymax = as.numeric(gene) + 0.4), fill = "yellow")
+ labs(x = "Amino Acid Position", y = "ATHBs", title = "Protein Structures with Zinc Finger and Homeodomain domain")
+ theme_minimal()
+ theme(axis.title.x = element_text(size = 14), axis.title.y = element_text(size = 14), axis.text.x = element_text(size = 12), axis.text.y = element_text(size = 12))
tiffファイルとして保存します。
> tiff("protein_structure.tiff", width = 1200, height = 1200)
> plot <- ggplot(sorted_data, aes(y = gene))
+ geom_rect(aes(xmin = 0, xmax = total, ymin = as.numeric(gene) - 0.4, ymax = as.numeric(gene) + 0.4), fill = "lightgrey")
+ geom_rect(aes(xmin = ZF_start, xmax = ZF_end, ymin = as.numeric(gene) - 0.4, ymax = as.numeric(gene) + 0.4), fill = "green")
+ geom_rect(aes(xmin = HD_start, xmax = HD_end, ymin = as.numeric(gene) - 0.4, ymax = as.numeric(gene) + 0.4), fill = "yellow")
+ labs(x = "Amino Acid Position", y = "ATHBs", title = "Protein Structures with Zinc Finger and Homeodomain domain")
+ theme_minimal()
+ theme(axis.title.x = element_text(size = 24), axis.title.y = element_text(size = 24), axis.text.x = element_text(size = 24), axis.text.y = element_text(size = 24))
> print(plot)
> dev.off()
600 x 600 pixelでは画像が粗いので、1200 x 1200 pixelで、フォントサイズは24にしています。
Tan et al. の論文とATHB34の長さが違うようですが、おそらく論文公表時とアノテーションが変わったか、オルターナティブスプライシングのパターンの異なるタンパク質を図示しているものと推測されます。
簡単に模式図を描くことができました。