解决方法是执行以下操作:
- 在图表上使用
fromZero 属性;
- 使用 generator 函数来表示您的自定义 y 轴标签值;
- 将标签生成器函数给出的结果传递给
formatYLabel prop;
- 调整数据:从数据集中的每个数字中减去所需的最小标签值。
上面给出的方法示例:
const minValue = 5;
const maxValue = 90;
function* yLabel() {
yield* [minValue, '', maxValue];
}
const d = [10, 5, 90, 30, 20, 10, 80];
const datapoints = d.map((datapoint) => datapoint - minValue - 1);
const data = {
labels: ['Sat', 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri'],
datasets: [
{
data: datapoints,
},
],
};
const CustomChart = () => {
const screenWidth = Dimensions.get('window').width;
const yLabelIterator = yLabel();
return (
<View>
<LineChart
data={data}
segments={2}
width={screenWidth}
height={220}
bezier
fromZero
chartConfig={{
color: (opacity = 3) => `rgba(200, 255, 255, ${opacity})`,
data: data.datasets,
}}
formatYLabel={() => yLabelIterator.next().value}
/>
</View>
);
};
数据集中每个元素减去1 已完成,因为0 包含在设置fromZero 时的范围内。
还要注意图表的segments 的数量在这里很重要。如果你想有3 标签,你应该有2 段。
如上例所示,带有2 标签是该规则的例外。拥有2 标签和1 段不起作用。示例中显示的解决方法是使用3 标签和2 段,但将中间标签设为空字符串。
对整个方法的一个警告是,数据数组中的值不能高于最大标签值。