如何在 c3 图表中创建刻度线
How to create scale breaks in c3 charts
我必须在 C3
条形图中表示数据。问题是数据集通常包含一个或两个非常大的值和其他小得多的值(相比之下更小)。这会导致在几乎看不见的条形旁边出现非常高的条形。我知道使用 this 之类的换位符可以解决问题。但是我在 C3
中没有找到一个甚至提到它的例子。
有什么方法可以在 C3 charts?
中创建刻度线 如果没有,是否有其他开源 JS
库可以做到这一点?
您可以使用带拆分域的 d3 线性比例转换值和比例。
然后使用多条网格线绘制分割线
HTML
<div id="chart"></div>
脚本
var myScale = d3.scale.linear().domain([0, 10, 90, 100]).range([0, 40, 60, 100]);
var chart = c3.generate({
data: {
columns: [
['A', 3, 2, 1, 4, 1.5, 92.5, 93, 91, 94].map(function (value, index) {
return index ? myScale(value) : value;
})],
type: 'bar'
},
tooltip: {
format: {
value: function (value) {
return parseFloat(myScale.invert(value).toFixed(5));
}
}
},
axis: {
y: {
min: 0,
max: 100,
padding: {
top: 0,
bottom: 0
},
tick: {
format: function (d) {
if (d > myScale.range()[1] && d < myScale.range()[2]) return null
else return myScale.invert(d)
}
}
}
},
grid: {
y: {
lines: [{ value: (myScale.range()[1] + myScale.range()[2]) / 2, class: 'breakFill' },
{value: (myScale.range()[1] + myScale.range()[2]) / 2 + 1, class: 'break' },
{value: (myScale.range()[1] + myScale.range()[2]) / 2 - 1, class: 'break' }]
}
}
});
您必须使用网格线而不是区域,因为区域层在条形层下方(网格层在条形层上方)
CSS
这由一条(粗)填充线和 2 条边框线组成
.breakFill > line {
stroke-width: 4px;
stroke: white;
stroke-opacity: 1;
}
.break > line {
stroke-width: 1px;
stroke: grey;
}
您还可以使用波浪形图案更好地设计它的样式,或者放置一个带有波浪形背景的 HTML 元素。
Fiddle - http://jsfiddle.net/tdfpj3oc/
我必须在 C3
条形图中表示数据。问题是数据集通常包含一个或两个非常大的值和其他小得多的值(相比之下更小)。这会导致在几乎看不见的条形旁边出现非常高的条形。我知道使用 this 之类的换位符可以解决问题。但是我在 C3
中没有找到一个甚至提到它的例子。
有什么方法可以在 C3 charts?
中创建刻度线 如果没有,是否有其他开源 JS
库可以做到这一点?
您可以使用带拆分域的 d3 线性比例转换值和比例。
然后使用多条网格线绘制分割线
HTML
<div id="chart"></div>
脚本
var myScale = d3.scale.linear().domain([0, 10, 90, 100]).range([0, 40, 60, 100]);
var chart = c3.generate({
data: {
columns: [
['A', 3, 2, 1, 4, 1.5, 92.5, 93, 91, 94].map(function (value, index) {
return index ? myScale(value) : value;
})],
type: 'bar'
},
tooltip: {
format: {
value: function (value) {
return parseFloat(myScale.invert(value).toFixed(5));
}
}
},
axis: {
y: {
min: 0,
max: 100,
padding: {
top: 0,
bottom: 0
},
tick: {
format: function (d) {
if (d > myScale.range()[1] && d < myScale.range()[2]) return null
else return myScale.invert(d)
}
}
}
},
grid: {
y: {
lines: [{ value: (myScale.range()[1] + myScale.range()[2]) / 2, class: 'breakFill' },
{value: (myScale.range()[1] + myScale.range()[2]) / 2 + 1, class: 'break' },
{value: (myScale.range()[1] + myScale.range()[2]) / 2 - 1, class: 'break' }]
}
}
});
您必须使用网格线而不是区域,因为区域层在条形层下方(网格层在条形层上方)
CSS
这由一条(粗)填充线和 2 条边框线组成
.breakFill > line {
stroke-width: 4px;
stroke: white;
stroke-opacity: 1;
}
.break > line {
stroke-width: 1px;
stroke: grey;
}
您还可以使用波浪形图案更好地设计它的样式,或者放置一个带有波浪形背景的 HTML 元素。
Fiddle - http://jsfiddle.net/tdfpj3oc/