\begingroup

假设有人想画一个图,展示如何在一条线上绘制一个变量及其变换。假设那条线是水平的,顶部刻度是某个变量,比如说x,底部变量将是x,假设1 + x1+\frac{x}{1+x},其中线顶部的刻度和数字是x,并且线底部的刻度和数字将是1 + x1+\frac{x}{1+x}与原文对应的x高于该线的值。这种显示方式在较早的医学文献中很常见,但最近变得不那么流行了,也许是因为计算尺不再常用。

Mathematica 中没有 Plot1D 命令。那么,如何在 Mathematica 中做到这一点?有没有什么方法可以欺骗软件来做到这一点?

编辑:例如,以下内容是否可以折叠,这样就不会y-轴:

编辑:例如,我拍摄了上面的图像并使用 Gimp 将其转换为图形。

那么,如何在 Mathematica 中做到这一点?

\endgroup

6

  • \begingroup
    为什么不使用Plot命令?类似Plot[x/(1+x),{x,0,10}] 这样的显示在较早的医学文献中很常见,那么将此类图像的链接或粘贴到您的问题中会有所帮助。正如他们所说,一张图片胜过千言万语 :)。Mathematica 是最好的绘图软件,因此我相信无论它是什么,都可以在 Mathematica 中完成。
    \endgroup


    – 


  • \begingroup
    @Nasser 我可以四处寻找一个,但我插入的图像应该可以解释我想要什么。显然,我可以反转刻度线的方向。问题是,如何绘制具有零或无限长宽比的东西?
    \endgroup


    – 

  • 1
    \begingroup
    我建议你看一下AxisObject
    \endgroup


    – 

  • \begingroup
    @lericr 我看过了。很接近,但AxisObject仅为每个 指定一个数字范围。如果可以将它们夹在一起或背对背放置,可能会解决问题。有什么想法可以做到这一点吗?
    \endgroup


    – 


  • 1
    \begingroup
    我认为这很容易做到。您可以指定端点并组合图形。抱歉我现在无法进行实验,但它看起来应该相当简单。我确信需要花费一些时间来摆弄它并使其工作,但从概念上讲它似乎并不难。我希望其他人可以加入。
    \endgroup


    – 


最佳答案
2

\begingroup

这是一个想法:

Graphics[{}, Frame -> True,
 FrameTicks -> {{None, None}, {
    Join[Table[{x, x, {0., 0.01`}}, {x, Range[0.95, 1., 0.01]}], 
     Table[{x, , {0., 0.005`}}, {x, Range[0.95, 1., 0.002]}]],
    Join[
     Table[If[
       y === Infinity, {1.`, Infinity, {0., 0.01`}}, {y/(1+y), 
        y, {0., 0.01`}}], {y, {20, 30, 40, 50, 60, 70, 100, 200, 
        Infinity}}], 
     Table[{y/(1+y), 
       Spacer[{0, 0}], {0., 0.005`}}, {y, {25, 35, 45, 55, 64, 80, 
        120, 140, 160, 180, 250, 300, 350, 400}}]]}},
 PlotRange -> {{0.95, 1.}, {0., 0.0001}}, AspectRatio -> Automatic]

\endgroup

7

  • \begingroup
    几乎完美,只是需要更好的勾选。恭喜并感谢。(+1)。
    \endgroup


    – 

  • 1
    \begingroup
    @Carl 哎呀,我一开始留了个小缝隙,所以你可以看到刻度。然后我看到你想要让框架变得非常平坦,但我忘了刻度。
    \endgroup


    – 

  • \begingroup
    PS 的逆s =1 +s=1+s=\frac{t}{1+t}t =s1 =s1st=\frac{s}{1-s}, 在哪里t是时间和sss是 0 到 1 范围内的时间变换。顺便说一句,这些变换与用于在 beta 素数分布和 beta 分布之间进行转换的变换相同。这种变换允许在 0 到 1 范围内绘制无限持续时间的曲线,并允许可视化“终端”曲线行为,这是许多领域都非常感兴趣的问题,因此这个问题远非随意的。我可以轻松获取您的代码并对其进行修复……再次感谢。
    \endgroup


    – 


  • \begingroup
    做了一些小修改,现在已修复,完美!出于某种奇怪的原因,我不是,trusted user所以它处于待定状态。
    \endgroup


    – 

  • \begingroup
    现已完成。感谢一位匿名Trusted同事。
    \endgroup


    – 

\begingroup

以下是使用 的方法AxisObject

tLabMaj = {20, 30, 40, 50, 60, 70, 100, 200, Infinity};
tPosMaj = Table[Limit[x/(1.0 + x), x -> t], {t, tLabMaj}];
tLabMin = {25, 35, 45, 55, 64, 80, 120, 140, 160, 180, 250, 300, 350, 400};
tPosMin = Table[t/(1.0 + t), {t, tLabMin}];
Graphics[{
  AxisObject[{"Horizontal", 0, {0.95, 1}}, TickDirection -> Up,
    TickLabelPositioning -> "Tip", TickPositions -> {{tPosMaj}, {tPosMin}}, 
    TickLabels -> {tLabMaj}, TicksStyle -> Directive[Red, Bold],
    AxisLabel -> Placed[Style["t (time)", Red], Center]],
  AxisObject[{"Horizontal", 0, {0.95, 1}}, TickDirection -> Down,
    TickLabelPositioning -> "Tip", TickPositions -> {{0.95, 1, 0.01},
      {0.95, 1, 0.002}},
    TicksStyle -> Directive[Bold],
    AxisLabel -> "\!\(\*FractionBox[\(t\), \(1 + t\)]\)"]},
  PlotRange -> {{0.95, 1}, {0.0, 0.001}}, AspectRatio -> Automatic,
  ImageSize -> Large]

\endgroup