Python Matplotlib-格式化同一图形上的两个绘图
我试图绘制一些数据,但在同一个图形上绘制两个绘图时遇到了困难。它看起来像这样: 代码是:Python Matplotlib-格式化同一图形上的两个绘图,python,matplotlib,Python,Matplotlib,我试图绘制一些数据,但在同一个图形上绘制两个绘图时遇到了困难。它看起来像这样: 代码是: 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 d
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”)”),但日期中没有同步。两个图中的日期应该相等
有人能给我一些关于这个问题的线索吗
致以最诚挚的问候,您没有正确使用
添加子批次
:
ax = f.add_subplot(2,1,1)
ax2 = f.add_subplot(2,1,2)
第一个数字表示绘图的行数,第二个数字表示绘图的列数,第三个数字表示绘图的索引。您没有正确使用
添加子绘图
:
ax = f.add_subplot(2,1,1)
ax2 = f.add_subplot(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轴,因此只需设置一次主格式化程序。如果希望绘图共享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轴,因此只需设置一次主格式化程序。首先,对于添加子绘图,格式为
add\u子绘图(N\u行、N\u列、N\u绘图)
。因此,您的子绘图应该是211
和212
,而不是111
和211
。其次,DateFormatter
只从绘图中获取XTICK并重新格式化它们;它只格式化现有的记号。要在两个x轴上获得相同的日期,您可以对这两个轴执行ax.set\u xlim(start,end)
,或者让两个子批次共享\u x
。首先检查,对于添加子图,格式为add\u子图(N\u行、N\u列、N\u图)
。因此,您的子绘图应该是211
和212
,而不是111
和211
。其次,DateFormatter
只从绘图中获取XTICK并重新格式化它们;它只格式化现有的记号。要在两个x轴上获得相同的日期,您可以对这两个轴执行ax.set\u xlim(start,end)
,或者让两个子批次共享\u x
。作为旁注签出您可以直接解压AxesSubplot
实例:fig,(ax1,ax2)=plt.子图(…
)。谢谢Viktor和nordev。这也是正确的。我不知道要检查谁是正确的。两者都是正确的。作为旁注,您可以直接解压AxesSubplot
实例:fig,(ax1,ax2)=plt.subplot(…
。谢谢Viktor和nordev。这也是正确的。我不知道要检查谁是正确的。两者都是正确的。