【问题标题】:sparklines bar graph fit迷你图条形图拟合
【发布时间】:2013-08-06 23:22:22
【问题描述】:

我正在使用迷你图包http://omnipotent.net/jquery.sparkline/#s-about

我正在尝试使迷你图条形图适合预定大小,但我有很多图表,理想情况下应该是动态的。

我正在尝试类似的东西:

$.each(sparklines, function(index, sparkline) {
    var sparkline = $(sparkline);
    var data_out = sparkline.attr('data');
    $.getJSON('/search/histogram/?histo_field=' + data_out, function (data) {
        var width = sparkline.width();
        var data_obj = data.data;
        var l = data_obj.length;
        var pixel_width = parseInt((370-l) / l);
        sparkline.sparkline(data_obj, {type: 'bar', "barWidth":pixel_width,"height":50})
        });
});

parseInt((370-l) / l); 是为了说明间距。

问题是,它没有正确安装。尤其是当条形图中有很多这样的条时。

它应该正好使用 370px,但在一种情况下它使用 363px,而在另一种情况下它使用 281。

我尝试只做parseInt(370) / l);,但留下了大约 10 像素的悬垂。

有什么想法吗?

【问题讨论】:

  • 我现在也有同样的问题。你有没有找到好的解决方案?

标签: javascript jquery sparklines


【解决方案1】:

它永远不会完美匹配,因为 count * (width + spacing) 的倍数可能永远不会完全填满宽度,因为它们被四舍五入为整数值。

我现在使用的最佳近似值是这样的。 (还有一些额外的代码可以从数据属性中读取设置。)

var $el = $(el);

var values = $el.data('values').split(',').map(parseFloat);
var type = $el.data('type') || 'line' ;
var height = $el.data('height') || 'auto';

var parentWidth = $el.parent().width();
var valueCount = values.length;
var barSpacing = 1;

var barWidth = Math.round((parentWidth - ( valueCount - 1 ) * barSpacing ) / valueCount);

$el.sparkline(values, {width:'100%', type: type, height: height, barWidth: barWidth, barSpacing: barSpacing});

剩下的唯一优化是使用barSpacing 参数来减少圆角barWidths 与父宽度的乘积之间的差异。

【讨论】:

  • "var parentWidth = $el.parent().width() - paddingSize;"如果你有填充。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2020-11-10
  • 2019-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多