5

次のようなものを再作成したいと思います。

しかし、私自身のデータを使用しています。私のデータは次のようになります。

 Number    Name1        Structure        mean    stdev
 1         Aldehydes    RCH=O       122.76    7.67
 2         Ketones          R2C=O       8.11      0.15
 2         Amides       R-CONr2     20.1      83.24

このプロットを再現するにはどうすればよいですか? 私は限りました:

from pylab import *
import numpy  
data = numpy.genfromtxt('data',unpack=True,names=True,dtype=None) 
pos = arange(size(data['Number']))
ax2.errorbar(pos,data['mean'], yerr=data['stdev'])

しかし、このプロットを私の例に似せることはできません。誰かがこれのサンプルコードを投稿できますか?

4

1 に答える 1

1

データを誤差範囲としてプロットすることから始め、対応するテキストで注釈を付けることができます。

以下は、開始するための簡単なコードです。

import numpy as np
import matplotlib.pyplot as plt

data = np.genfromtxt('data.txt', unpack=True,names=True,dtype=None)

fig, ax = plt.subplots()
ax.set_yticklabels([])
ax.set_xlabel(r'ppm ($\delta$)')
pos = np.arange(len(data))
#invert y axis so 1 is at the top
ax.set_ylim(pos[-1]+1, pos[0]-1)
ax.errorbar(data['mean'], pos, xerr=data['stdev'], fmt=None)

for i,(name,struct) in enumerate(zip(data['Name1'], data['Structure'])):
    ax.text(data['mean'][i], i-0.06, "%s, %s" %(name, struct), color='k', ha='center')

plt.show()

画像

matplotlib は多色のテキストをサポートしていないため、注釈内の単一の文字の色を変更するのは非常に困難です。正規表現を使用して同じテキストに 2 回注釈を付けることで回避策を見つけようとしました (1 つは赤で「C」のみ、もう 1 つは「C」なし) が、各文字が同じスペースを占有しないため、そうではありません。すべての単語でうまく機能します (以下を参照)。

#add to the import
import re

#and change
for i,(name,struct) in enumerate(zip(data['Name1'], data['Structure'])):
    text_b = ax.text(data['mean'][i], i-0.05, "%s, %s" %(name, struct), color='k', ha='center')
    text_b.set_text(text_b.get_text().replace('C', '   '))
    text_r = ax.text(data['mean'][i], i-0.05, "%s %s" %(name, struct), color='r', ha='center')
    text_r.set_text(re.sub('[abd-zABD-Z]', '  ', text_r.get_text()))
    text_r.set_text(re.sub('[0-9\=\-\W]', ' ', text_r.get_text()))

img2

于 2013-03-09T04:46:10.303 に答える