Python:使用日期时间格式进行 numpy 重新排列的 SpatiaLite 表?

标签 python qgis spatialite numpy

我在 QGIS-user forum 上发布了这个问题但这可能太技术性了,因此我也在这里尝试一下。

我的计划是有一个 QGIS 插件,它可以读取并绘制与矢量图层中选定点相对应的时间序列数据(这些点代表不同的测量站,有时我需要快速查看其中每个测量站的时间序列)同一地 block 内的多个站点)。因此,我需要 Python 从 Spatialite 表中读取时间序列数据,然后使用 Matplotlib.plot 绘制它:

from pyspatialite import dbapi2 as sqlite 
import numpy as np
import matplotlib.pyplot as plt  
import datetime

MyPath = r"C:\DATA\DBTEST\MyTestDb.sqlite"
conn = sqlite.connect(MyPath,detect_types=sqlite.PARSE_DECLTYPES|sqlite.PARSE_COLNAMES)
curs = conn.cursor()

sql = r"""SELECT Date as 'date [datetime]', Level_masl FROM MyTable"""
rs = curs.execute(sql)
recs = rs.fetchall()

My_format = [('date_time', datetime.datetime), ('values', float)]
table = np.array(recs, dtype=My_format)
table2=table.view(np.recarray)

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(table2.date_time, table2.values, 'o-')
....

但似乎我没有获得正确的数据类型,因为 matplotlib 不接受我的“date_time”。下面显示一个打印表2,我猜小u表示它是unicode而不是datetime?

print table2

recarray([(u'2011-04-20 09:42:00', 703.46000000000004), (u'2011-04-20 09:43:00', 705.35000000000002), ... dtype=[('date_time', '|O4'), ('values', '

我不是程序员,而且绝对是一个完整的 Python 和 Spatialite 初学者,因此我们将非常感谢任何帮助!

/JK

最佳答案

基本上,您正在尝试传递一个字符串。

Matplotlib 有几个方便的函数,用于将日期字符串转换为其(内部)日期时间表示形式。

尝试更多类似的东西:

...
from matplotlib.dates import datestr2num
...

...
time = datestr2num(table2.date_time)
ax.plot_date(time, table2.values, 'o-')
...

plot_dateplot 相同,它只是自动格式化 x 轴以具有时间(例如小时、天、月等)标签。

如果您想使用 plot (或 bar 等),只需调用 ax.plot(time, y, ...)ax.bar 像往常一样,然后调用 ax.xaxis_date() 设置日期标签。

关于Python:使用日期时间格式进行 numpy 重新排列的 SpatiaLite 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7757461/

相关文章:

python - 算法计算 2^n 的理论时间复杂度与实际时间复杂度

python - 为什么 MySQL 会执行返回 None?

javascript - 我在哪里可以获得印度的 .geojson 文件,而不是每个州/地区或任何其他区别的单独文件?

python - 在 MacOS Mojave 上为 QGIS 安装 Python 3.6

django - 让 GeoDjango + Spatialite 在 Windows 上运行

c++ - 无法在 qSqlite ( QT 5.9) 中加载 Spatialite 扩展

python - 在python中从数组中查找最佳元素

java - 如何获得至少一定大小的列表分组的所有组合?

python - 属性错误: 'QgsComposition' object has no attribute 'setMapCanvas'

ruby-on-rails - ActiveRecord 将字段设置为 SQL 表达式