我正在尝试使用AxisSubplot
对象将一些显示坐标转换为真实坐标,以便将形状绘制到绘图上。问题是我无法找到文档或AxisSubplot
任何地方,我看到Axis但无法弄清楚AxisSubplot
对象中包含的是什么。
我的情节坐标以时间x海拔高度显示,因此显示明智的一套可能是
[ ['03:42:01', 2.3] , ['03:42:06', 3.4] , ...]
在我的显示功能中,我格式化子图的轴,如下所示:
fig.get_xaxis().set_major_locator(mpl.dates.AutoDateLocator())
fig.get_xaxis().set_major_formatter(mpl.dates.DateFormatter('%H:%M:%S'))
现在,当我想使用上面的设置显示多边形时,如何将该日期字符串转换为绘图cooridnates?
points = [['03:42:01', 1], ['03:43:01', 2.1], ['03:21:01', 1]]
polygon = plt.Polygon(points)
fig.add_patch(polygon)
当然,这给了我错误ValueError: invalid literal for float(): 03:42:01
。谁会知道怎么做?以下是绘图轴的示例:
答案 0 :(得分:3)
您似乎有两个问题:
您找不到AxesSubplot
对象的文档。
这是因为它仅在运行时创建。它继承自SubplotBase
。您可以在this answer (to the same question)。
您希望将日期/时间的多边形绘制为x坐标:
因为matplotlib需要知道您的坐标代表日期/时间。有一些绘图函数可以处理日期时间对象(例如plot_date
),但一般情况下你必须处理它。
Matplotlib使用自己的日期内部表示(浮动天数),但在matplotlib.dates
模块中提供必要的转换函数。在您的情况下,您可以按如下方式使用它:
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.dates as mdates
from datetime import datetime
# your original data
p = [['03:42:01', 1], ['03:43:01', 2.1], ['03:21:01', 1]]
# convert the points
p_converted = np.array([[mdates.date2num(datetime.strptime(x, '%H:%M:%S')), y]
for x,y in p])
# create a figure and an axis
fig, ax = plt.subplots(1)
# build the polygon and add it
polygon = plt.Polygon(p_converted)
ax.add_patch(polygon)
# set proper axis limits (with 5 minutes margins in x, 0.5 in y)
x_mrgn = 5/60./24.
y_mrgn = 0.5
ax.set_xlim(p_converted[:,0].min() - x_mrgn, p_converted[:,0].max() + x_mrgn)
ax.set_ylim(p_converted[:,1].min() - y_mrgn, p_converted[:,1].max() + y_mrgn)
# assign date locators and formatters
ax.xaxis.set_major_locator(mdates.AutoDateLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M:%S'))
# show the figure
plt.show()
结果: