import React from "react"; import { FrontendForecast } from "../platforms"; import * as V from "victory"; import { VictoryBar, VictoryLabel, VictoryTooltip, VictoryLine, VictoryScatter, VictoryChart, VictoryTheme, VictoryAxis, VictoryGroup, VictoryVoronoiContainer, } from "victory"; import ReactMarkdown from "react-markdown"; import { cleanText } from "../utils"; import gfm from "remark-gfm"; interface Props { question: FrontendForecast; history: number[]; } let l = 50; const data = Array.from(Array(l).keys()).map((x) => ({ date: x, probability: Math.abs(Math.sin((5 * x) / l)), })); const data2 = Array.from(Array(l).keys()).map((x) => ({ date: x, probability: 1 - Math.abs(Math.sin((5 * x) / l)), })); let getDate = (x) => { let date = new Date(x); return date.toISOString().slice(5, 10).replaceAll("-", "/"); }; let dataAsXy = (data) => data.map((datum) => ({ x: getDate(datum.date * (1000 * 60 * 60 * 24)), y: datum.probability, })); let colors = [ "royalblue", "crimson", "darkgreen", "dodgerblue", "darkviolet", "limegreen", ]; const getVictoryGroup = (data, i) => { return ( null} labelComponent={} /> { (active ? 3.75 : 3)} labels={() => null} labelComponent={} /> // No idea how to disable labels } ); }; export const HistoryChart: React.FC = ({ question, history }) => { return (

{question.title}

`${datum.x}: ${Math.round(datum.y * 100)}%`} labelComponent={ } voronoiBlacklist={ Array.from(Array(5).keys()).map((x, i) => `line${i}`) // see: https://github.com/FormidableLabs/victory/issues/545 } /> } domain={{ y: [0, 1], }} > {[data, data2] .slice(0, 5) .map((dataset, i) => getVictoryGroup(dataset, i))} datum.x)} // tickFormat={dataAsXy.map((datum) => datum.x)} tickCount={7} style={{ grid: { stroke: null, strokeWidth: 0.5 }, }} tickLabelComponent={ } /> `${x * 100}%`} style={{ grid: { stroke: "#D3D3D3", strokeWidth: 0.5 }, }} tickLabelComponent={ } />
); };