2017-12-07 13 views
2

私はパンダのデータフレームを持っています。私は散布図を作成しており、カラーバーに基づいてデータを分類しようとしました。私は毎月の分類と品質分類のために以下の例のコードに示すようにしました。matplotlibとpandasの年中無休のカラーバー

a = np.random.rand(366) 
b = np.random.rand(366)*0.4 
index = (pd.date_range(pd.to_datetime('01-01-2000'), periods=366)) 
df = pd.DataFrame({'a':a,'b':b},index = index) 
plt.scatter(df['a'],df['b'],c = df.index.month) 
plt.colorbar() 

enter image description here

も品質のために:

plt.scatter(df['a'],df['b'],c = df.index.quarter) 
plt.colorbar() 

enter image description here

私の質問:毎年半分に分類する方法があります。例えば1-6月と7-12月のように、また月のように10-3と4-9の場合 ありがとうございました。ご協力いただきありがとうございます。

答えて

2

分散関数をカラー引数に入れるカスタム関数を作成します。私は半年ごとの分裂の例を作りました。あなたはあなた自身のsplit関数のためのテンプレートとして使用することができます。

import numpy as np 
import pandas as pd 
import matplotlib.pylab as plt 

# if month is 1 to 6 then the first halfyear else the second halfyear 
def halfyear(m): 
    return 0 if (m <= 6) else 1 
# vectorize function to use with Series 
hy = np.vectorize(halfyear) 

a = np.random.rand(366) 
b = np.random.rand(366)*0.4 
index = (pd.date_range(pd.to_datetime('01-01-2000'), periods=366)) 
df = pd.DataFrame({'a':a,'b':b},index = index) 

# apply custom function 'hy' for 'c' argument 
plt.scatter(df['a'],df['b'], c = hy(df.index.month)) 
plt.colorbar() 

plt.show() 

enter image description here

のようなラムダ関数を使用する別の方法:

plt.scatter(df['a'],df['b'], \ 
c = df.index.map(lambda m: 0 if (m.month > 0 and m.month < 7) else 1)) 
+0

そして、同図に2つのプロットをマージする方法? – bikuser

+0

https://matplotlib.org/examples/pylab_examples/subplots_demo.html第2または第3の例 – Serenity

1

は、私は完全に切り捨てられませんソリューションを選ぶだろう毎月の情報似ているが区別できる色を月に使用すると、半年と月だけ視覚的に分類することができます。

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import matplotlib.colors 

a = np.random.rand(366) 
b = np.random.rand(366)*0.4 
index = (pd.date_range(pd.to_datetime('01-01-2000'), periods=366)) 
df = pd.DataFrame({'a':a,'b':b},index = index) 

colors=["crimson", "orange", "darkblue", "skyblue"] 
cdic = list(zip([0,.499,.5,1],colors)) 
cmap = matplotlib.colors.LinearSegmentedColormap.from_list("name", cdic,12) 
norm = matplotlib.colors.BoundaryNorm(np.arange(13)+.5,12) 

plt.scatter(df['a'],df['b'],c = df.index.month, cmap=cmap, norm=norm) 
plt.colorbar(ticks=np.arange(1,13)) 

plt.show() 

enter image description here

+0

はい¡ – bikuser

関連する問題