我正在尝试绘制一些数据,但是我仍然坚持在同一个数字上绘制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'))”,但日期中没有同步。两个地块的日期应该相等。
有人可以给我一些关于这个问题的线索吗?
最诚挚的问候,
答案 0 :(得分:3)
您没有正确使用add_subplot
:
ax = f.add_subplot(2,1,1)
ax2 = f.add_subplot(2,1,2)
第一个数字表示行数,第二个数字表示列数,第三个数字表示绘图的索引。
答案 1 :(得分: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轴。