1

いくつかのデータをプロットしようとしていますが、同じ図に 2 つのプロットをプロットすることに行き詰まっています。次のようになります。

ここに画像の説明を入力

コードは次のとおりです。

import re
import sqlite3
import matplotlib.pyplot as plt
from matplotlib.dates import datetime as dt
from matplotlib.dates import DateFormatter

...

for company in companies:
    cursor.execute("select distinct url from t_surv_data where company = ? order by product_type", (company,))
    urls = [r[0] for r in cursor.fetchall()]

    for idx, url in enumerate(urls):              
    cursor.execute("select price, timestamp from t_surv_data where url = ? order by timestamp", (url,))
    data = [[r[0], r[1]] for r in cursor.fetchall()]
    price, date = zip(*data)                
    date = [dt.datetime.strptime(d, '%Y-%m-%d %H:%M:%S') for d in date]

    f = plt.figure('''figsize=(3, 2)''')

    ax = f.add_subplot(111)
    ax.plot(date, price) # x, y
    ax.xaxis.set_major_formatter(DateFormatter('%d\n%h\n%Y'))
    #ax.set_ylim(ymin=0) # If I use this a break the plot

    ax2 = f.add_subplot(211)
    ax2.scatter(date, [1,1,-1])
    ax2.xaxis.set_major_formatter(DateFormatter('%d\n%h\n%Y'))
    #ax2.set_ylim(ymin=-1, ymax=1) # If I use this a break the plot

    plt.savefig('plt/foo' + str(idx) + '.png')
    plt.close()

この質問を解決するにはどうすればよいですか:

1 - プロットが重なり合っているように見えます。これを視覚的にフォーマットして、同じ図の独立したプロットのようにするにはどうすればよいですか。

2 - このコード行を両方のプロット "ax2.xaxis.set_major_formatter(DateFormatter('%d\n%h\n%Y'))" に使用していますが、日付に同期がありません。日付は 2 つのプロットで同じでなければなりません。

誰かが私にこの質問の手がかりを与えることができますか?

よろしくお願いします、

4

2 に答える 2

3

add_subplot正しく使用していません:

ax = f.add_subplot(2,1,1)
ax2 = f.add_subplot(2,1,2)

最初の数字は行数、2 番目は列数、3 番目はプロットのインデックスを示します。

于 2013-08-30T18:41:26.297 に答える
2

プロットで x 軸 (日付を含む軸) を共有する場合は、sharexプロパティを指定する必要があります。

fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)
ax1.plot(...)
ax2.scatter(...)
ax1.xaxis.set_major_formatter(DateFormatter('%d\n%h\n%Y'))

メジャー フォーマッタは x 軸を共有するため、設定する必要があるのは 1 回だけです。

于 2013-08-30T18:45:02.630 に答える