【问题标题】:Matplotlib limit row's plotted from CSVMatplotlib 限制行从 CSV 绘制
【发布时间】:2016-07-26 17:59:41
【问题描述】:

我目前正在以当前格式将传感器的温度和湿度水平记录到 CSV 文件中:-

2016-04-05 20:21:39,15.50,49.30
2016-04-05 20:22:40,15.50,49.30
2016-04-05 20:23:40,15.40,49.30
2016-04-05 20:24:41,15.40,49.40

然后我使用numpy.loadtxt 读取要绘制的值:-

dates, temp = np.loadtxt('templog.csv',
                         converters={0: datefunc},
                         unpack=True,
                         delimiter=',',
                         usecols=(0, 1))

dates2, humid = np.loadtxt('templog.csv',
                           converters={0: datefunc},
                           unpack=True,
                           delimiter=',',
                           usecols=(0, 2))

这一切都很好,但它从一开始就绘制了每个指标。例如,我想限制要绘制的“x”最后一行数,以允许我只执行最后 24 小时。

这是否可以使用 CSV 文件作为源,或者我最好将数据插入 sqlite3 数据库,然后使用适当的选择查询来提取我想要的数据并绘制。

【问题讨论】:

  • 你能告诉我们你的情节并告诉我们你想改变什么吗?
  • 不确定向您展示情节是否会有所帮助。我只是不想绘制 CSV 文件中的每一行。如果它的长度为 500、1000 或 10,000 行,我如何仅绘制文件的最后 100 行?
  • 只需对要绘制的数组部分进行切片。查找切片语法以及它如何与 Numpy 数组一起使用。并且可能在一次调用loadtxt() 中加载三个数组。 :-)

标签: python csv numpy matplotlib


【解决方案1】:

您可以保持数据按原样读取。随心所欲地限制绘图。

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot_date(dates, temp)
ax.set_xlim(['yyyy-mm-dd hh:mm:dd', 'YYYY-MM-DD HH:MM:DD'])

【讨论】:

  • 尝试此方法无法使其在我的场景中工作。发布一些我能够得到工作的东西。
【解决方案2】:

在@blackJack 的启发下,我能够在 plot_date 中使用数组切片来绘制由 numpy 解包生成的数组中的最后 x 个项目,例如 temp[-10:] -

hours = 24 # How many hours to show on the graph
logtime = 5 # How many minutes each sample is taken

ax.plot_date(dates[-((hours*60)/logtime):],
             temp[-((hours*60)/logtime):], ls='-', marker='', color='red')
ax2.plot_date(dates[-((hours*60)/logtime):],
              humid[-((hours*60)/logtime):], ls='-', marker='')

【讨论】:

    猜你喜欢
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    相关资源
    最近更新 更多