2017-09-05 3 views
-1

私は先に質問したことがありますが、今度はx tickを変更する方法について質問しています。 x tickを月と日に変更する

Multiindex scatter plot

は、あなたがリンクに行く必要はありませんので、私は、セット・アップを繰り返してみましょう。次のデータがあるとします:

data = {'Value': {('1', 1): 3.0, 
('1', 2): 4.0, 
('1', 3): 51.0, 
('1', 4): 10.0, 
('1', 5): 2.0, 
('1', 6): 17.0, 
('1', 7): 14.0, 
('1', 8): 7.0, 
('1', 9): 2.0, 
('1', 10): 1.0}} 
df=pd.DataFrame(data) 

これは、1月の最初の10日間の値を表しています。私はこのデータをプロットしたいので、私が使用します。

df1 = df[df['Value']<10] 
df1['Value'] = df1['Value']*2 

df.plot() 
plt.show() 

を今、私はわずかに異なる値が、同じインデックス値を持つこれらの日付のサブセットの値を持つ別のデータセットがあるとし答えは1

、私のように散布図をオーバーレイすることができますどのようにすることができ、x軸は(非閏年で)年の365日を表し、より一般的な例では、

ax = df.plot() 
df1.reindex(df.index).plot(marker='o',linestyle='none',color='g', ax=ax) 

x tickを得る毎月の初日を表す私が思い付くことができる最高のソリューションです:もちろん

plt.xticks(np.arange(0,365,30),['1/1','2/1','3/1','4/1','5/1','6/1','7/1','8/1','9/1','10/1','11/1','12/1']) 

、数ヶ月は、すべての30日ではありませんので、これは正確に動作しません。より簡単で正確な方法は何ですか?

+0

これはパンダも関与したがっていますか? –

+0

それはおそらく最もよいでしょう。 – user21359

答えて

1

私があなたを理解していると仮定すると、それほど難しいことではありません。アクションの大半はパンダの外で行われます。これは、ダニを設定する際にかなりの緯度があることを示唆しているようです。

import pandas as pd 
from datetime import datetime 
import matplotlib.pyplot as plt 

df = pd.DataFrame(
    data = { 
     'Values' : [3, 4, 5, 6, 2, 7, 6, 3, 4, 2, 4, 5], 
     'Months': [datetime(2017, _, 1) for _ in range(1,13)] 
    } 
    ) 
ax = df.plot() 
ax.set_xticks(list(range(0,12))) 
ax.set_xticklabels([datetime(2017,_,1).strftime('%b') for _ in range(1,13)]) 
plt.show() 

また、ティックプレースメントの精度についても質問しました。上記のコードでは、ティックプレースメントは単に月数の線形関数です。プロットでは、もっと洗練された何かをすることから、ほとんど何も得られません。

ここでは、月の長さと1月1日から12月1日の合計日数に基づいてティック位置をより慎重に計算し、これをプロットで使用されている簡単な計算と比較します。ほとんど違いはありません。

>>> for m in range(1, 13): 
...  '%.3f %.3f' % ((m-1)/11, (datetime(2017,m,1)-datetime(2017,1,1)).days/334) 
...  
'0.000 0.000' 
'0.091 0.093' 
'0.182 0.177' 
'0.273 0.269' 
'0.364 0.359' 
'0.455 0.452' 
'0.545 0.542' 
'0.636 0.635' 
'0.727 0.728' 
'0.818 0.817' 
'0.909 0.910' 
'1.000 1.000' 

ここにプロットがあります。

Monthly ticks

関連する問題