Metapost 图形包中使用线性维度时出现小值问题

Metapost 图形包中使用线性维度时出现小值问题

制作图表我使用以下 mp 文件制作图表。

input graph;

beginfig(0)
    draw begingraph(5in, 3in);
        setcoords(log, linear);
        glabel.lft(btex Time etex, OUT);
        glabel.bot(btex Size etex, OUT);
        gdraw "test.d" withcolor red;
    endgraph;
endfig;

bye;

如果test.d文件

1 1e-06
2 3e-06
4 5e-06

然后我得到一个奇怪的图表: 在此处输入图片描述

如果我写 ,除了标签之外什么都不会改变setcoords(linear, linear)。但是,如果我将其更改为setcoords(log, log)在此处输入图片描述

这不是一个解决方案,因为我需要linear第二个维度。制作这个 MWE 时,我发现如果我在文件中使用整数(或不太小的实数),一切都没问题test.d

1 1
2 3
4 5

在此处输入图片描述

我在“好”数字和“坏”数字之间得到了最出乎意料的图表。

1 1e-05
2 3e-05
4 5e-05

在此处输入图片描述

因此,我最终找到了以下解决方案来制作美观的图表:修改数据文件,将所有-坐标以使它们不太小。然而,很难认为这个解决方案还不错。问题是,如何在(log, linear)不修改数据文件的情况下制作出好看的图表,即使它包含低于某个临界值的所有值?

答案1

我认为解决这个问题的“最简单”方法是使用该工具将数字缩放到一个合适的范围。在最初的情况下,您可以将它们转换为毫秒,如下所示。

\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
input graph
beginfig(1);
    draw begingraph(5in, 3in);
        setcoords(log, linear);
        glabel.lft(btex Time (ms) etex, OUT);
        glabel.bot(btex Size etex, OUT);
        % gdraw "test.d" withcolor red;
        interim Gpaths:=log;
        gdraw Mreadpath("test.d") shifted (0,6*Mten) withcolor red;
    endgraph;
endfig;
\end{mplibcode}
\end{document}

它被包裹在内luamplib,因此用它编译lualatex(或适应普通 MP),得到如下结果:

在此处输入图片描述

这种方法在第 3 节末尾进行了解释手册。总之,将文件Mreadpath中的坐标读test.d<path>变量,该变量具有内部mlog格式。您可以通过缩放或移动来调整此路径。在本例中,它被移动了,其中(0, 6 * Mten)Mten10 的内部 mlog 格式,因此这会将 6 倍的 log 10 添加到每个 y 坐标,或者换句话说,乘以 10**6 = 1,000,000。请注意,我还将标签更改为(ms)

相关内容