マンハッタンプロットとは?
マンハッタンプロットは、ゲノムワイド関連研究(GWAS)の結果を視覚化するためによく使用されます。ここでは、簡単なマンハッタンプロットを作成するためのサンプルプログラムを紹介します。
マンハッタンプロット作成サンプル
この例では、ランダムに生成されたGWASデータを使用しますが、実際のデータをプロットする場合は、データフレームに実データをロードしてください。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# ランダムなGWASデータの生成
np.random.seed(123) # 再現性のためのシード
chromosomes = ['chr' + str(i) for i in range(1, 23)] * 10 # 22染色体について
chromosomes.sort()
positions = np.random.randint(1, 1e8, size=len(chromosomes)) # 各SNPのゲノム上の位置 乱数
p_values = -np.log10(np.random.uniform(0.0001, 1, size=len(chromosomes))) # P値(変換)
# データフレームの作成
data = pd.DataFrame({'Chromosome': chromosomes, 'Position': positions, 'P_Value': p_values})
# プロット図(pdf)の作成
def plot_manhattan(data):
# 染色体ごとに色を変える
colors = ['red' if i % 2 == 0 else 'blue' for i in range(1, 23)]
plt.figure(figsize=(12, 6))
for i, chromosome in enumerate(data['Chromosome'].unique()):
chr_data = data[data['Chromosome'] == chromosome]
plt.scatter(chr_data['Position'], chr_data['P_Value'], color=colors[i % len(colors)], s=10, label=chromosome)
plt.axhline(y=-np.log10(5e-8), color='grey', linestyle='--') # 有意水準
plt.xlabel('Chromosome')
plt.ylabel('-Log10(P value)')
plt.title('Manhattan Plot')
plt.xticks(rotation=90)
plt.legend(markerscale=2, bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0.)
plt.tight_layout()
# PDFファイルを保存
plt.savefig('manhattan_plot.pdf', format='pdf')
plt.close()
plot_manhattan(data)

サンプルプログラムの簡単な説明
- ライブラリのインポート
numpy
,pandas
,matplotlib
- ランダムなデータの生成
- 22個の染色体名を生成
- 各SNPのゲノム上の位置とP値をランダム生成
- データフレームの作成
pandas
データフレームに、染色体、位置、P値を格納
- プロットの作成関数
- 染色体ごとに異なる色を割り当てる
- 各染色体のデータに対して散布図を描画
- 有意水準を示すために、水平線追加
- ラベル付け、プロットのタイトル
- 凡例追加
- PDFとして保存:
- プロットをPDFファイルで保存