基本上,您需要在 Rickshaw中调整、和类的tickOffsets()
功能。Axis.X
Axis.Y
Axis.Time
tickSize
不会为您提供帮助-就像@Old Pro正确说明的那样-它表示粗体刻度线的大小(以像素为单位)。它与间距无关。
对于基于时间的轴
我的解决方案基本上包括替换这些文件中tickOffsets()
的标准函数
this.tickOffsets = function() {
var domain = this.graph.x.domain();
var unit = this.fixedTimeUnit || this.appropriateTimeUnit();
var count = Math.ceil((domain[1] - domain[0]) / unit.seconds);
var runningTick = domain[0];
var offsets = [];
for (var i = 0; i < count; i++) {
var tickValue = time.ceil(runningTick, unit);
runningTick = tickValue + unit.seconds / 2;
offsets.push( { value: tickValue, unit: unit } );
}
return offsets;
};
通过自定义例程。这会做的伎俩:
this.tickOffsets = function() {
var domain = this.graph.x.domain();
var unit = this.fixedTimeUnit || this.appropriateTimeUnit();
var tickSpacing = args.tickSpacing || unit.seconds;
var count = Math.ceil((domain[1] - domain[0]) / tickSpacing);
var runningTick = domain[0];
var offsets = [];
for (var i = 0; i < count; i++) {
var tickValue = time.ceil(runningTick, unit);
runningTick = tickValue + tickSpacing;
offsets.push( { value: tickValue, unit: unit } );
}
return offsets;
};
有了它,你可以写类似的东西
var time = new Rickshaw.Fixtures.Time();
var timeUnit = time.unit('year');
var x_axis = new Rickshaw.Graph.Axis.ExtendedTime(
{
graph: graph,
tickSpacing: 60*60*24*365*13, // 13 years
timeUnit: timeUnit
} );
每 13 年均匀分布蜱虫。
对于基于值的轴
对于基于值的轴,您需要扩展该render()
函数以包含一个“手动”设置轴刻度的工具。我是这样做的:
this.render = function() {
if (this.graph.height !== this._renderHeight) this.setSize({ auto: true });
var axis = d3.svg.axis().scale(this.graph.y).orient(this.orientation);
if (this.tickSpacing) {
var tickValues = [];
var min = Math.ceil(axis.scale().domain()[0]/this.tickSpacing);
var max = Math.floor(axis.scale().domain()[1]/this.tickSpacing);
for (i = min * this.tickSpacing; i < max; i += 1) {
console.log(i);
tickValues.push(i * this.tickSpacing);
}
axis.tickValues(tickValues);
}
axis.tickFormat( args.tickFormat || function(y) { return y } );
if (this.orientation == 'left') {
var berth = this.height * berthRate;
var transform = 'translate(' + this.width + ', ' + berth + ')';
}
if (this.element) {
this.vis.selectAll('*').remove();
}
this.vis
.append("svg:g")
.attr("class", ["y_ticks", this.ticksTreatment].join(" "))
.attr("transform", transform)
.call(axis.ticks(this.ticks).tickSubdivide(0).tickSize(this.tickSize));
var gridSize = (this.orientation == 'right' ? 1 : -1) * this.graph.width;
this.graph.vis
.append("svg:g")
.attr("class", "y_grid")
.call(axis.ticks(this.ticks).tickSubdivide(0).tickSize(gridSize));
this._renderHeight = this.graph.height;
};
这里的重要部分是子句中的if (this.tickSpacing)
语句。它们计算配置数组中变量给出的刻度,并将它们分配给语句tickSpacing
中的轴。axis.tickValues(tickValues)
注意是在函数中的语句中this.tickValues
赋值,上面没有说明。this.tickSpacing = args.tickSpacing
initialize()
自己试试
看看这个jsfiddle,那里有完整的代码。这肯定会给你一些指示。如果您愿意,您可以使用您的价值观创建自己的 jsfiddle,并告诉我您是否需要其他任何东西。