我试图将轴旁边的值格式从1000更改为1k或1000000更改为1M。
这在LinearAxis中是否可行?
这是我的代码:
int stacknewmovie (movie* p, list* l){
if(!p || !l){
return 0;
}
node* n;
n=newnode();
if(!n){
return 0;
}
insertnodeinfo(n, p);
n->next=NULL;
if(l->first==NULL){
l->first=node; //problem here replace "node" by "n"??
return 1;
}else{
n->next=l->first;
l->first=n;
return 1;
}
这可能是StringFormat吗?
还可以更改TickStyle,以便破折号通过整个情节吗?
提前致谢
迈克尔
答案 0 :(得分:7)
您可以使用Axis类的LabelFormatter属性从1000更改为1K等。
创建格式化函数以获取double并返回一个字符串:
private static string _formatter(double d)
{
if (d < 1E3)
{
return String.Format("{0}", d);
}
else if (d >= 1E3 && d < 1E6)
{
return String.Format("{0}K", d / 1E3);
}
else if (d >= 1E6 && d < 1E9)
{
return String.Format("{0}M", d / 1E6);
}
else if (d >= 1E9)
{
return String.Format("{0}B", d / 1E9);
}
else
{
return String.Format("{0}", d);
}
}
然后将其添加到Axis类:
plotmodel.Axes.Add(new LinearAxis
{
//Other properties here
LabelFormatter = _formatter,
});
答案 1 :(得分:2)
我使用这种方法。基于Metric prefixes。适用于区间(-Inf, 0.001> u <1000, +Inf)
中的值,即0.001
转换为1m
,1000
转换为1k
等
// Axis
PlotModel.Axes.Add(new LinearAxis
{
Title = "Value",
LabelFormatter = ValueAxisLabelFormatter,
});
// ValueAxisLabelFormatter method
private string ValueAxisLabelFormatter(double input)
{
double res = double.NaN;
string suffix = string.Empty;
// Prevod malych hodnot
if (Math.Abs(input) <= 0.001)
{
Dictionary<int, string> siLow = new Dictionary<int, string>
{
[-12] = "p",
[-9] = "n",
[-6] = "μ",
[-3] = "m",
//[-2] = "c",
//[-1] = "d",
};
foreach (var v in siLow.Keys)
{
if (input != 0 && Math.Abs(input) <= Math.Pow(10, v))
{
res = input * Math.Pow(10, Math.Abs(v));
suffix = siLow[v];
break;
}
}
}
// Prevod velkych hodnot
if (Math.Abs(input) >= 1000)
{
Dictionary<int, string> siHigh = new Dictionary<int, string>
{
[12] = "T",
[9] = "G",
[6] = "M",
[3] = "k",
//[2] = "h",
//[1] = "da",
};
foreach (var v in siHigh.Keys)
{
if (input != 0 && Math.Abs(input) >= Math.Pow(10, v))
{
res = input / Math.Pow(10, Math.Abs(v));
suffix = siHigh[v];
break;
}
}
}
return double.IsNaN(res) ? input.ToString() : $"{res}{suffix}";
}