制作图表我使用以下 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)
是Mten
10 的内部 mlog 格式,因此这会将 6 倍的 log 10 添加到每个 y 坐标,或者换句话说,乘以 10**6 = 1,000,000。请注意,我还将标签更改为(ms)
。