任何人都有任何软件(最好是免费的,最好是开源的)的经验,它将拍摄在笛卡尔坐标(标准的日常绘图)上绘制的数据图像并提取图表上绘制的点的坐标?
本质上,这是一个数据挖掘问题和一个反向数据可视化问题。
任何人都有任何软件(最好是免费的,最好是开源的)的经验,它将拍摄在笛卡尔坐标(标准的日常绘图)上绘制的数据图像并提取图表上绘制的点的坐标?
本质上,这是一个数据挖掘问题和一个反向数据可视化问题。
有许多不同的选项,但基本上都使用相同的工作流程:
程序将每个点作为 xy 矩阵返回。
如果图像被缩放,通常它有助于选择点,或者通过上传图像的缩放版本或使用某些程序中可用的缩放功能。
有许多程序,它们在额外功能、可用性、许可和成本方面各不相同。我在下面列出了它们。
我用过的所有东西都可以正常工作。除了在测量误差非常小的情况下,来自图形抓取的误差是微不足道的(例如,来自数字化的误差 << 误差条的大小或估计中的不确定性)。如果没有测试任何这些程序的准确性,但是在用户之间、程序之间进行比较以及与复制的统计分析结果进行比较会很有趣。
TL;DR: WebPlotDigitizer可作为Web 应用程序和chrome 插件使用
其他回答者假设您处理图形的光栅图像。但如今,好的做法是以矢量形式发布图形。在这种情况下,如果您直接使用矢量图的代码而不将其转换为光栅图像,您可以获得更高的恢复数据的准确性,甚至可以估计恢复错误。
由于论文以 PDF 文件形式在线发布,我假设您有一个 PDF 文件,其中包含矢量图以及您希望从中恢复的数据(以数字形式获取)并估计引入的恢复错误。
首先,PDF 是一种矢量格式,基本上是文本的(可以通过文本编辑器读取)。问题是它可以(并且几乎总是)包含压缩数据流,这些数据流需要解压缩才能被文本编辑器读取。这些压缩的数据流通常包含我们需要的信息。
有几种方法可以解压缩数据流,以便将 PDF 文件转换为具有可读 PDF 代码的文本文档。可能最简单的方法是使用带有选项的免费QPDF 实用程序:--stream-data=uncompress
qpdf infile.pdf --stream-data=uncompress -- outfile.pdf
生成的 outfile.pdf 可以由文本编辑器打开。现在您需要PDF 参考手册 1.7来了解您所看到的。此刻不要惊慌!您只需要知道第 226 - 227 页的“表 4.9 路径构造运算符”中描述的少数运算符。最重要的运算符是(第一列包含运算符的坐标规范,第二列包含运算符,第三列是运算符名称):
x y m moveto
x y l lineto
x y width height re rectangle
h closepath
在大多数情况下,了解这四个操作符就足以恢复数据。
现在您需要将 outfile.pdf 文件作为文本导入到可以操作数据的某个程序中。我将展示如何使用Mathematica来做到这一点。
导入文件:
pdfCode = Import["outfile.pdf", "Text"];
现在我假设最简单的情况:图形包含一条由许多两点线段组成的线。在这种情况下,行的每一段编码如下:
268.79999 408.92975 m
272.39999 408.92975 l
从 PDF 代码中提取所有此类段:
lines = StringCases[pdfCode,
StartOfLine ~~ x1 : NumberString ~~ " " ~~ y1 : NumberString ~~ " m\n" ~~
x2 : NumberString ~~ " " ~~ y2 : NumberString ~~ " l\n"
:> ToExpression@{{x1, y1}, {x2, y2}}];
可视化它们:
Graphics[{Line[lines]}]
你会得到这样的东西(我正在使用的论文包含四个图表):
每两个相邻的段共享一个点。因此,在这种情况下,您可以将相邻段的序列转换为路径:
paths = Split[lines, #1[[2]] == #2[[1]] &];
现在您可以分别可视化所有路径:
Graphics[{Line /@ paths}]
从此图中,您可以选择(通过双击)您正在寻找的路径,复制图形选择并粘贴为新的Graphics
. 为了将其向后转换为点列表,您需要使用 element {1, 1, 1}
。现在我们的点不在图形的坐标系中,而是在 PDF 文件的坐标系中。我们需要建立它们之间的关系。
从上面的图中,您手动选择刻度(按住Shift
以进行多选),然后复制它们并粘贴为 new Graphics
。以下是提取水平刻度坐标的方法:
现在检查刻度之间的差异:
Differences[reHorTicks]
从这些差异中,您可以看到 PDF 文件中刻度的定位有多精确。它给出了通过将原始数据点转换为 PDF 文件中包含的矢量图而引入的误差估计。如果刻度定位存在明显误差,您可以通过将刻度的坐标拟合到线性模型来减少误差。这个线性函数现在可用于获取路径点的原始坐标(即在绘图的坐标系中)。
我没用过,但UWA CogSci 实验室推荐DataThief(共享软件)。