更改渐近线中的 x 轴标签

更改渐近线中的 x 轴标签

我正在使用渐近线制作热图。我有一个包含两个条目的值数组,这些条目从 0 到 50,但都代表从 0 到 1 的物理量。

我想要一个 x 轴和一个 y 轴,它们的范围从 0 到 50,但标签的范围从 0 到 1,有人知道该怎么做吗?

我到目前为止包含了我的代码:

import graph;
import palette;
import patterns;

file in=input("input.dat").line();
real[][] vals = in;

pen outside = lightgrey;

pen[] Palette = Gradient(100, white, blue);

xaxis("$x$",YZero,
  xmin=-1,
  RightTicks(Label("$%.2g$"),
             new real[]{1,20,40,60}),
  above=false); 
yaxis("$y$",ymin = -1);

image(vals,Range(minValue,maxValue),(mx,my),(Mx,My),Palette);

谢谢您的帮助 !

斯尔恩

答案1

如果我理解了这个问题,你可以x-axis通过定义来修改标签ticklabel。按照文档(和示例)和 graph.asy 文件

typedef string ticklabel(real);

ticklabel Format(string s=defaultformat)
{
return new string(real x) {return format(s,x);};
}
ticklabel DefaultFormat=Format();

ticklabel从实数返回x一个字符串。我修改了文档示例。

    import graph;
    import palette;

    size(10cm,10cm,IgnoreAspect);

    real f(real x, real y) {
      return 0.9*pow10(2*sin(x/5+2*y^0.25)) + 0.1*(1+cos(10*log(y)));
    }

    scale(Linear,Log,Log);

    pen[] Palette=BWRainbow();

    bounds range=image(f,Automatic,(0,1),(100,100),nx=200,Palette);

    string mod(real x)
    {
    return format(x/10,locale="en_US.utf8");
    }

    ticklabel mytick()
    {
    return new string(real x)
    {
    return  mod(x);
    };
    }

    ticklabel mytick=mytick();

    xaxis("$x$",BottomTop,RightTicks(mytick,
          new real[]{1,20,40,60,70,95}),
         above=true); 

    yaxis("$y$",LeftRight,RightTicks,above=true);

    palette("$f(x,y)$",range,(0,200),(100,250),Top,Palette,
            PaletteTicks(ptick=linewidth(0.5*linewidth())));

事实上,如果你不需要 ticklabel 函数中的任何选项,那么命令

      xaxis("$x$",BottomTop,RightTicks(ticklabel=mod,
            new real[]{1,20,40,60,70,95}),
            above=true); 

给出了类似的结果。如果不指定,new real[]{1,20,40,60,70,95})则将 10 到 100 转换为 1 到 10...

在此处输入图片描述

相关内容