我目前正在使用Victory图表,并且在处理将时间添加到X轴时遇到问题。我需要显示一个折线图,在y轴上显示0到1(百分比)之间的数字,在x轴上显示时间。我已经查看了他们的文档,并尝试了几种方案来获取x坐标以显示时间,但是我没有看到如何将来自数据库的数据格式化为可接受的时间显示格式。我希望时间以“10:30 AM”等格式显示。我想格式化x轴数据,并在x轴和y轴上添加标签。我将如何实现呢?我应该使用Date对象还是基于时间的数据可接受的字符串格式?字符串可以接受哪个比例尺?
下面列出了我当前用于图表的jsx标签:
constructor (props) {
super(props);
this.state = {
data: props.data,
zoomDomain: { x: [new Date(2010, 1, 1), new Date(2050, 1, 1)] }
}
}
handleZoom(domain) {
this.setState({ zoomDomain: domain });
}
<VictoryChart width={400} height={500} theme={VictoryTheme.material} scale={{x:"time", y:"linear"}}
containerComponent={
<VictoryZoomContainer
zoomDimension="x"
zoomDomain={this.state.zoomDomain}
onZoomDomainChange={this.handleZoom}
/>
}>
<VictoryAxis
tickFormat={(x) => {
return (new Date(x)).getFullYear();
}}
orientation="bottom"
/>
<VictoryAxis dependentAxis
tickFormat={(y) => y / 10}
orientation="left"
/>
<VictoryLine
groupComponent={<VictoryClipContainer clipPadding={{ top: 5, right: 10 }}/>}
style={{ data: { stroke: "#c43a31", strokeWidth: 5, strokeLinecap: "round" } }}
data={this.state.data}
x="x"
y="y"/>
</VictoryChart>
更新:我想以一种不同的方式尝试这种方式,因为时间不适合我。我想尝试仅显示月份和年份。有没有一种方法可以实现,因此,如果大多数时间是在3月5日到6日之间,它将显示月份之间的界线,而在3月到4月之间则会显示这些界线?
这就是我的图表最终的样子:
最佳答案
您可以在tickFormat
命令中使用 VictoryChart
组件的VictoryAxis属性执行此操作,并根据需要向其添加自己的格式化程序。
<VictoryAxis
tickFormat={(x) => new Date(x).getHours() + ':' + new Date(x).getMinutes()}
/>
对于
y axis
,您可以添加另一个带有指定过滤器的tickFormat作为 <VictoryAxis dependentAxis
tickFormat={(y) => y / 20}
/>