あなたはこのようなものを使用することができます:私はちょうどXの位置をラベルに制御を持っているために、インデックスを実行しているの余分な列を作成し
from pandas import DataFrame
from scipy.stats import uniform
from scipy.stats import randint
import numpy as np
import matplotlib.pyplot as plt
# some sample data
df = DataFrame({'gene' : ['gene-%i' % i for i in np.arange(10000)],
'pvalue' : uniform.rvs(size=10000),
'chromosome' : ['ch-%i' % i for i in randint.rvs(0,12,size=10000)]})
# -log_10(pvalue)
df['minuslog10pvalue'] = -np.log10(df.pvalue)
df.chromosome = df.chromosome.astype('category')
df.chromosome = df.chromosome.cat.set_categories(['ch-%i' % i for i in range(12)], ordered=True)
df = df.sort_values('chromosome')
# How to plot gene vs. -log10(pvalue) and colour it by chromosome?
df['ind'] = range(len(df))
df_grouped = df.groupby(('chromosome'))
fig = plt.figure()
ax = fig.add_subplot(111)
colors = ['red','green','blue', 'yellow']
x_labels = []
x_labels_pos = []
for num, (name, group) in enumerate(df_grouped):
group.plot(kind='scatter', x='ind', y='minuslog10pvalue',color=colors[num % len(colors)], ax=ax)
x_labels.append(name)
x_labels_pos.append((group['ind'].iloc[-1] - (group['ind'].iloc[-1] - group['ind'].iloc[0])/2))
ax.set_xticks(x_labels_pos)
ax.set_xticklabels(x_labels)
ax.set_xlim([0, len(df)])
ax.set_ylim([0, 3.5])
ax.set_xlabel('Chromosome')
を。
あなただけの賢明な数値データではなく、文字列をプロットすることができます。 x-dataはどのように見えますか? –
マンハッタンのプロットは遺伝学において非常に一般的であり、実際にはかなり賢明です。 x-データはSNP名の名前(はい、文字列)です。 (例では遺伝子ではなくx-データSNPを呼び出すべきであろうか) –
私はthazt Manhattanプロットが賢明ではないとは言わなかったが、文字列と数字のデータを有意義にプロットすることは部分的には不可能だと言った。あなたは何とかあなたの名前を数字に変換するか、単にそのインデックスを使用する必要があります。私は下の答えとして人工データを使った小さな例を提供します。 –