散布図にいくつかのサブプロットを作成し、残りのカテゴリを反復することによって複数のプロットをプロットしようとしていますが、プロットはエラーを投げずに最初の反復のみを表示します。明確にするために、ここではデータが実際にどのように見えるかの例です:ループ内の散布図は最初の反復をプロットするだけです
a kind state property T
0 0.905618 I dry prop1 10
1 0.050311 I wet prop1 20
2 0.933696 II dry prop1 30
3 0.114824 III wet prop1 40
4 0.942719 IV dry prop1 50
5 0.276627 II wet prop2 10
6 0.612303 III dry prop2 20
7 0.803451 IV wet prop2 30
8 0.257816 II dry prop2 40
9 0.122468 IV wet prop2 50
そして、これは私が例を生成する方法である:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import gridspec
kinds = ['I','II','III','IV']
states = ['dry','wet']
props = ['prop1','prop2']
T = [10,20,30,40,50]
a = np.random.rand(10)
k = ['I','I','II','III','IV','II','III','IV','II','IV']
s = ['dry','wet','dry','wet','dry','wet','dry','wet','dry','wet']
p = ['prop1','prop1','prop1','prop1','prop1','prop2','prop2','prop2','prop2','prop2']
t = [10,20,30,40,50,10,20,30,40,50]
df = pd.DataFrame(index=range(10),columns=['a','kind','state','property','T'])
df['a']=a
df['kind']=k
df['state']=s
df['property']=p
df['T']=t
print df
次に、私は2行2列を生成するつもりです濡れた状態と乾燥した状態でproperty1とproperty2の変動を表示します。だから私は基本的にこのようないくつかの小さなものに私のデータフレームをスライス:これらのサブプロットのそれぞれにおける
first = df[(df['state']=='dry')&(df['property']=='prop1')]
second = df[(df['state']=='wet')&(df['property']=='prop1')]
third = df[(df['state']=='dry')&(df['property']=='prop2')]
fourth = df[(df['state']=='wet')&(df['property']=='prop2')]
dfs = [first,second,third,fourth]
、特定の実験室条件を指定して、私はサンプルの異なる種類のT
対a
の値をプロットしたいです。サンプルの種類を区別するために、私はそれらに異なる色とマーカーを割り当てます。
fig = plt.figure(figsize=(8,8.5))
gs = gridspec.GridSpec(2,2, hspace=0.4, wspace=0.3)
colours = ['r','b','g','gold']
symbols = ['v','v','^','^']
titles=['dry 1','wet 1','dry 2','wet 2']
for no, df in enumerate(dfs):
ax = fig.add_subplot(gs[no])
for i, r in enumerate(kinds):
#print i, r
df = df[df['kind']==r]
c = colours[i]
m = symbols[i]
plt.scatter(df['T'],df['a'],c=c,s=50.0, marker=m, edgecolor='k')
ax = plt.xlabel('T')
ax = plt.xticks(T)
ax = plt.ylabel('A')
ax = plt.title(titles[no],fontsize=12,alpha=0.75)
plt.show()
しかし、結果は赤のみの三角形で種類I
この場合には、最初の反復をプロット:だからここに私のプロットスクリプトがあります。この最初の項目を反復リストから削除すると、最初の変数(青い三角形のII
)だけがプロットされます。
私は間違っていますか? 図はこのように見えますが、それに応じて、それぞれのサブプロットに赤と青と緑と金のマーカーが表示されます。
(これは同様に私の実際のデータで発生するので、問題は、私は例を生成する方法であってはならないのでご注意ください。)
このコメントは、コメントとして投稿するのではなく、編集して、編集してください。 –
あなたの問題はこの行にあると思う: 'df = df [df ['kind'] == r]'。それは内側 'for'ループの内側にあります。つまり、外側の' for'ループの元の 'df'が上書きされます。に名前を変更してみてください。 df2 ['a']、c = c、s = 50.0、marker = m、edgecolor = df2 = df [df ['kind'] == r] 'と' plt.scatter(df2 ['T']、 'k') '。 –