【发布时间】:2018-04-01 09:08:39
【问题描述】:
我有不同长度的时间序列数据(信号),我想在比例和信号之间没有任何边距进行绘制。
目标:绘制每个信号,以便(物理)打印绘图将显示每个数据点。绘图应保存到文件中。
给定:
- 打印机的最大打印分辨率为 600 dpi。
- 信号具有不同数量的数据点(从 30000 到 100000)。
信号示例:
import numpy as np
Fs = 512
# Create random signal
np.random.seed(1)
data = [np.random.uniform(-10000, 20000) for i in range(5*Fs)]
如果我只是用 matplotlib 绘制它:
import matplotlib.pyplot as plt
plt.figure(figsize=(len(data)/600,2)) # divide by 600 which is dpi resolution of printer
plt.plot(data, color = "black", linewidth = 1.0)
plt.show()
我不希望第一个数据点和 Y 轴之间或最后一个数据点和右边框之间有任何空白。 Y 轴的标签也不应该影响绘图的大小,所以也要考虑它的宽度。
如何完成打印每一个点?
【问题讨论】:
-
删除空白集
plt.xlim([...])和plt.ylim([...])以完全匹配您的数据。如果您真的想要打印每个点,您可能应该将绘图保存为矢量图形格式,然后打印得足够大。首先,我真的不明白你为什么想要这个。其次,我认为您永远无法确定,您的打印机驱动程序及其软件也可能会影响实际打印的内容。 -
作为上述评论的替代,
plt.margins(0,0)删除自动边距 -
我不确定
margins是否解决了这个问题(可能只是其中的一部分)。另一方面,如果您有 100000 个点,则完全不清楚“打印每个点”是什么意思。如果你有 100000 点除以 600 dpi = 166 英寸 = 4.20 米。没有纸可以测量 4 米。所以从这个意义上说,我仍然认为这个问题无法回答。 -
评论您的 figsize:figsize 包括轴标签和所有内容,因此您设置 figsize 的方式可能不是您真正想要的。如果你有一个无限的纸打印机,你的方法可能是有道理的,但很难看到......
-
感谢大家的意见。我收集了一些单通道轨迹,我希望它们打印得足够大,以便肉眼看到图案。是的,这是一项不寻常的任务,是的,我可以使用的打印机不受纸张长度的限制。
标签: python matplotlib plot