2

Python 2.6.2Matplotlib1.1.0の使用

http://matplotlib.sourceforge.net/examples/api/date_index_formatter.htmlに基づいて、画像プロットを生成するPythonプログラムを作成しました

gr = getResults()
AttributeName = gr.getAttributeName(attributeId)
dates = []
values = []
for data in gr.byClient(clientId, attributeId):
    dates.append(data[0])
    values.append(data[1])

from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure
import matplotlib.ticker as ticker
import numpy as np

# Create a figure with size 6 x 6 inches.
fig = Figure(figsize=(6,6))

# Create a canvas and add the figure to it.
canvas = FigureCanvas(fig)

# Create a subplot.
ax = fig.add_subplot(111)

# Set the title.
ax.set_title("Response over time",fontsize=14)

# Set the X Axis label.
ax.set_xlabel("Date",fontsize=12)

# Set the Y Axis label.
ax.set_ylabel(AttributeName,fontsize=12)

# Display Grid.
ax.grid(True,linestyle='-',color='0.75')

N = len(dates)
ind = np.arange(N)

def format_date(x, pos=None):
    thisind = np.clip(int(x+0.5),0, N-1)
    return dates[thisind].strftime('%Y-%m-%d')

ax.xaxis.set_major_formatter(ticker.FuncFormatter(format_date))

# Generate the Scatter Plot.
ax.scatter(dates,values,s=20,color='tomato');
fig.autofmt_xdate()

# Save the generated Scatter Plot to a PNG file.
canvas.print_figure(outputFileName,dpi=50)

問題はformat_dateメソッドにあります。xパラメータが呼び出されると、734586、734747、734808などの値になります...これにより、clipメソッドは常にインデックスを最後の日付に設定します。最終的な画像の実際のレイアウトは問題ありません。間違った日付を選択しているだけです。等間隔の日付を選択するためにx値をどのように使用しますか?

4

1 に答える 1

7

pylab.num2date()を呼び出して、この数値を日時オブジェクトに変換できます。

import pylab as pl
from matplotlib import ticker
from datetime import date

dates = [date(2012,7,10), date(2012,8,5), date(2012,9,4)]
values = [1,2,3]

def format_date(x, pos=None):
    return pl.num2date(x).strftime('%Y-%m-%d')

gca().xaxis.set_major_formatter(ticker.FuncFormatter(format_date))

# Generate the Scatter Plot.
scatter(dates,values,s=20,color='tomato');
gcf().autofmt_xdate()

ここに画像の説明を入力してください

于 2012-07-24T05:32:21.820 に答える