2

csv ファイルから pps カウントと時間をプロットするスクリプトに取り組んでいます。この時点まではすべて機能しますが、X 軸で目盛り/目盛りラベルが発生する間隔を変更する方法がわかりません。デフォルトの代わりに 60 のタイムスタンプ/目盛りが必要です。私がいる場所は次のとおりです。

import matplotlib
matplotlib.use('Agg')                   
from matplotlib.mlab import csv2rec     
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator
from pylab import *

data = csv2rec('tpm_counter.log', names=['packets', 'time']) # reads in the data from the csv as column 1 = tweets column 2 = time
rcParams['figure.figsize'] = 12, 4                           # this sets the ddimensions of the graph to be made
rcParams['font.size'] = 8

fig = plt.figure()
plt.plot(data['time'], data['packets'])                      # this sets the fields to be graphed
plt.xlabel("Time(minutes)")                                  # this sets the x label
plt.ylabel("Packets")                                        # this sets the y label
plt.title("Packets Capture Log: Packets Per Minute")         # this sets the title

#plt.xticks(range(60)) --- nothing shows on the graph if I use this

fig.autofmt_xdate(bottom=0.2, rotation=90, ha='left')

plt.savefig('tpm.png')                                      # this sets the output file name

試してみましplt.xticks(range(60))たが、プロットが生成されると何もありません。

4

2 に答える 2

3

上記のbmuの答えはうまくいきます。しかし、プロット内の xticks と xlabels を再スケーリングするより一般的な方法を確認することは、他の人にとって役立つかもしれません。csv ファイルを使用する代わりに、いくつかのサンプル データを生成しました。

import matplotlib            
import matplotlib.pyplot as plt
from pylab import *

time=range(5000) #just as an example
data=range(5000) # just as an example

fig = plt.figure()
plt.plot(time,data)                      # this sets the fields to be graphed
plt.xlabel("Every 60th point")           # this sets the x label
plt.ylabel("Data")                       # this sets the y label
plt.title("Rescaling axes")              # this sets the title

#Slice the data into every 60th point. We want ticks at these points
tickpos=data[::60] 
#Now create a list of labels for each point...
ticklabels=[]
for point in tickpos:
    ticklabels.append(str(point/60))  

plt.xticks(tickpos,ticklabels) # set the xtick positions and labels

plt.savefig('tpm.png')                                     
于 2012-05-22T14:52:11.957 に答える
2

日付のデモをご覧ください。

HourLocatorまたはMinuteLocatorを、適合したDateFormatterと一緒に使用できます。

import matplotlib.dates as mdates
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot_date(data['time'], data['packets']) 
hours = mdates.HourLocator() 
fmt = mdates.DateFormatter('%H:%M')
ax.xaxis.set_major_locator(hours)
ax.xaxis.set_major_formatter(fmt)
于 2012-05-19T00:13:59.480 に答える