【问题标题】:How to add XAxis using StackedAreaChart in React Native?如何在 React Native 中使用 StackedAreaChart 添加 XAxis?
【发布时间】:2020-06-19 02:05:06
【问题描述】:

我正在使用this React Native 包来制作StackedAreaChart。它工作正常,但我无法使用 date 标签添加 XAxis。

这是我的代码

const hardCodedData = [
        {
            month: new Date(2015, 0, 1),
            BackLeft: 3840,
            BackRight: 1920,
            FrontLeft: 960,
            FrontRight: 400,
        },
        {
            month: new Date(2015, 1, 1),
            BackLeft: 1600,
            BackRight: 1440,
            FrontLeft: 960,
            FrontRight: 400,
        },
        {
            month: new Date(2015, 2, 1),
            BackLeft: 640,
            BackRight: 960,
            FrontLeft: 3640,
            FrontRight: 400,
        },
        {
            month: new Date(2015, 3, 1),
            BackLeft: 3320,
            BackRight: 480,
            FrontLeft: 640,
            FrontRight: 400,
        },
    ]

const colors = ['#E8B2EE', '#47D1D9', '#8072FF', '#FE8C87']

    const keys = ['BackLeft', 'BackRight', 'FrontLeft', 'FrontRight']

    const svgs = [
        { onPress: () => alert('Back Left') },
        { onPress: () => alert('Back Right') },
        { onPress: () => alert('Front Left') },
        { onPress: () => alert('Front Right') },
    ]

    const Gradient = () =>
        map(hardCodedData, (d, i) => {
            //console.log("color: " + d.month)
            let key = 'gradient' + d.month;
            let color = colors[i];
            console.log("color: " + color)
            return (
                <Defs key={key}>
                    <LinearGradient id={key} x1={'0'} y={'0%'} x2={'0'} y2={'100%'}>
                        <Stop offset={'0%'} stopColor={ color } />
                        <Stop
                            offset={'100%'}
                            stopColor={'rgba(165, 125, 255, 0)'}
                        />
                    </LinearGradient>
                </Defs>
            );
        });

    let gradients = map(hardCodedData, d => {
        let fill = `url(#gradient${d.month})`;
        return fill;
    })

<StackedAreaChart
     style={{ height: 334, paddingVertical: 16 }}
     data={hardCodedData}
     keys={keys}
     colors={gradients}
     curve={shape.curveNatural}
     showGrid={false}
     svgs={svgs}
 >
     <Grid />
     <Line />
     <Gradient />
 </StackedAreaChart>

你能帮我解决这个问题吗?

编辑 在@Wiliam Brochensque Junior 的帮助下,我能够渲染 XAxis

 <XAxis
    style={{ backgroundColor: 'transparent' }}
    data={hardCodedData}
    formatLabel={(value, index) => hardCodedData[index].month.getDay().toString() + "-" + hardCodedData[index].month.getMonth().toString() + "-" + hardCodedData[index].month.getYear().toString()}
     contentInset={{ left: 18, right: 18 }}
     svg={{ fontSize: 20, fill: '#3A8F98' }}
 />

【问题讨论】:

  • 我现在正在工作,所以我无法回答与您的代码完全一致的答案,但我根据图书馆本身的要求做出了回答。希望对您有所帮助!

标签: react-native react-native-android react-native-ios react-native-svg-charts


【解决方案1】:

this代码为例,可以如下:

import React from 'react'
import { StackedAreaChart, XAxis, Grid } from 'react-native-svg-charts'
import * as shape from 'd3-shape'
import { View } from 'react-native'

class AreaStackWithAxisExample extends React.PureComponent {
    render() {
        const data = [
            {
                month: new Date(2015, 0, 1),
                apples: 3840,
                bananas: 1920,
                cherries: 960,
                dates: 400,
            },
            {
                month: new Date(2015, 1, 1),
                apples: 1600,
                bananas: 1440,
                cherries: 960,
                dates: 400,
            },
            {
                month: new Date(2015, 2, 1),
                apples: 640,
                bananas: 960,
                cherries: 3640,
                dates: 400,
            },
            {
                month: new Date(2015, 3, 1),
                apples: 3320,
                bananas: 480,
                cherries: 640,
                dates: 400,
            },
        ]

        const colors = [
            'rgb(138, 0, 230, 0.8)',
            'rgb(173, 51, 255, 0.8)',
            'rgb(194, 102, 255, 0.8)',
            'rgb(214, 153, 255, 0.8)',
        ]
        const keys = ['apples', 'bananas', 'cherries', 'dates']

        return (
            <View style={{ flexDirection: 'row', height: 200 }}>
                <StackedAreaChart
                    style={{ flex: 1 }}
                    contentInset={{ top: 10, bottom: 10 }}
                    data={data}
                    keys={keys}
                    colors={colors}
                    curve={shape.curveNatural}
                >
                    <Grid />
                </StackedAreaChart>
                <XAxis
                    style={{ position: 'absolute', top: 0, bottom: 0 }}
                    data={StackedAreaChart.extractDataPoints(data, keys)}
                    contentInset={{ top: 10, bottom: 10 }}
                    svg={{
                        fontSize: 8,
                        fill: 'white',
                        stroke: 'black',
                        strokeWidth: 0.1,
                        alignmentBaseline: 'baseline',
                        baselineShift: '3',
                    }}
                />
            </View>
        )
    }
}

export default AreaStackWithAxisExample

【讨论】:

  • 嗯,这不会给我一个错误,但我认为它缺少标签。谢谢兄弟,我希望你以后能在答案中走得更远。
  • 感谢您的支持。我的帐户无法提问,所以我必须回答一些问题。
  • 谢谢你的回答,我想我找到了丢失的部分,它给了我一些可以显示的东西,但现在我必须处理日期格式,因为 XAxis 中的年份是错误的,我会的用你修改后的答案编辑我的问题。
  • 我还发现了日期格式问题,getFullYear() 给了我Date 对象的正确年份。
猜你喜欢
  • 2020-06-15
  • 2019-04-07
  • 2019-07-28
  • 2015-07-04
  • 2022-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多