2017-03-26 10 views
1

私はmatplotlib.pyplot(plt)を使って時間に対する温度のグラフをプロットしています。私はxticksが午前12時と午後12時の間だけであることを望んでいます。Matplotlib - Xticksをデータポイントではない行の値に変更する

使用しているデータにこれらのデータポイントがないため、正確に午前12時および午後12時を各日付に選択するにはどうすればよいですか?基本的には、2つのデータ点の間の点に/ 2つのデータ点の間の線上にxtickが必要です。

以下は、私のデータと私の機能のスニペットです。

Temp UNIX Time    Time 
5.04 1490562000 2017-03-26 22:00:00 
3.21 1490572800 2017-03-27 01:00:00 
2.15 1490583600 2017-03-27 04:00:00 
1.66 1490594400 2017-03-27 07:00:00 
6.92 1490605200 2017-03-27 10:00:00 
11.73 1490616000 2017-03-27 13:00:00 
13.77 1490626800 2017-03-27 16:00:00 

def ploting_graph(self): 
    ax=plt.gca() 
    xfmt = md.DateFormatter('%d/%m/%y %p') 
    ax.xaxis.set_major_formatter(locator) 
    plt.plot(self.df['Time'],self.df['Temp'], 'k--^') 
    plt.xticks(rotation=10) 
    plt.grid(axis='both',color='r') 
    plt.ylabel("Temp (DegC)") 
    plt.xlim(min(self.df['Time']),max(self.df['Time'])) 
    plt.ylim(min(self.df['Temp'])-1,max(self.df['Temp'])+1) 
    plt.title("Forecast Temperature {}".format(self.location)) 
    plt.savefig('{}_day_forecast_{}.png'.format(self.num_of_days,self.location),dpi=300) 

おそらく私は2017-03-27 00:00:00と12:00:00にxtickを探していることが分かります。

ご協力いただければ幸いです。正しい方向へのプッシュさえも素晴らしいでしょう。非常に先進的にありがとう!

ジョン。

答えて

1

ロケータとフォーマッタが必要です。ロケータは、フォーマッタが日時の表示方法を決定している間に、12時間ごとに目盛りだけを表示することを決定します。

import pandas as pd 
import matplotlib.pyplot as plt 
import matplotlib.dates 

dates = ["2017-03-26 22:00:00","2017-03-27 01:00:00","2017-03-27 04:00:00","2017-03-27 07:00:00", 
     "2017-03-27 10:00:00","2017-03-27 13:00:00","2017-03-27 16:00:00"] 
temps = [5.04, 3.21, 2.15,1.66, 6.92, 11.73, 13.77 ] 

df = pd.DataFrame({"Time":dates, "Temp":temps}) 
df["Time"] = pd.to_datetime(df["Time"], format="%Y-%m-%d %H:%M:%S") 


fig, ax = plt.subplots() 

xfmt = matplotlib.dates.DateFormatter('%d/%m/%y 12%p') 
ax.xaxis.set_major_formatter(xfmt) 

locator = matplotlib.dates.HourLocator(byhour=[0,12]) 
ax.xaxis.set_major_locator(locator) 
plt.plot(df['Time'],df['Temp'], 'k--^') 
plt.xticks(rotation=10) 
plt.grid(axis='both',color='r') 
plt.ylabel("Temp (DegC)") 
plt.xlim(min(df['Time']),max(df['Time'])) 
plt.ylim(min(df['Temp'])-1,max(df['Temp'])+1) 
plt.title("Forecast Temperature") 

plt.show() 

0

プロットでxticks関数を試してみてください。以下は私が試した簡単な例です。

import matplotlib.pyplot as plt 
x = [2,3,4,5,6,14,16,18,24,22,20] 
y = [1, 4, 9, 6,5,6,7,8,9,5,7] 
labels = ['12Am', '12Pm'] 
plt.plot(x, y, 'ro') 
'12,24 are location on x-axis for labels' 
plt.xticks((12,24),('12Am', '12Pm')) 
plt.margins(0.2) 
plt.show() 
+0

問題は、問題のxvalues日付ではない整数であるということであるので、12または24は、軸上に実際にはありません。 – ImportanceOfBeingErnest

関連する問題