自定义折线图的对数刻度


custom logarithmic scale for line-graph

我在jpgraph中遇到了这个问题:我需要创建一个图表(线),显示用户在与大约6000名其他玩家的在线游戏中的进度。因此,y轴显示了用户在排名中的位置,从6000到1(最后一个位置到第一个位置)。x轴是时间轴。

因此,首先,x轴刻度需要反转——文档中没有问题。

但是,我想有一种对数刻度-意味着我希望x轴上的值是这样的:6000、5000、4000、3000、2000、1500、1000、900、800、700、600、500、400、300、200、100、50、40、30、20、10、9、8、7、6、5、4、3、2、1

我已经设法得到了这样的刻度,但值越小,标签之间的距离就越小。-我想要的是每个标签之间的距离相等因此在图中,从6000-5000的步骤应该与从50到40的步骤或从2到1的步骤占用同样多的空间。

希望我能解释清楚一些。如果没有,我会加一幅画(我画得很烂),我相信每个人都会明白我的意思。

如果所表示的值仅为正,则可以将比例设置为负,以便向后显示值。JPGraph的构建是为了以增量方式显示比例。在这种情况下,您将减小值并将负值设置为正。

你会得到5,4,3,2,1,而不是1,2,3,4,5,因为-5,-4,-3,-2,-1,0,+1,+2,+3,+4,+5(你可以将其反转),你所要做的就是用函数交换值。

function _cb_negate ( $aVal ) { 
 return round (- $aVal ); 
} 

然后:

$graph -> xaxis -> SetLabelFormatCallback ( "_cb_negate" );

对于日志使用,您需要在xaxis中从最低到最高对值进行排序,因为您不能使用负值。或者,如果日志值在jpgraph中是线性刻度,您需要使用对数算法来处理数组中的值,并使其为负值。

希望它能起作用!

编辑:在yaxis中添加了示例,也适用于xaxis:http://www.asial.co.jp/jpgraph/demo/src/Examples/show-example.php?target=inyaxisex1.php