diff --git a/optuna_dashboard/ts/components/GraphIntermediateValues.tsx b/optuna_dashboard/ts/components/GraphIntermediateValues.tsx
index 3552f64a..eae2c43e 100644
--- a/optuna_dashboard/ts/components/GraphIntermediateValues.tsx
+++ b/optuna_dashboard/ts/components/GraphIntermediateValues.tsx
@@ -1,102 +1,22 @@
-import { Box, Card, CardContent, Typography, useTheme } from "@mui/material"
-import * as plotly from "plotly.js-dist-min"
-import React, { FC, useEffect } from "react"
+import { Card, CardContent } from "@mui/material"
+import { PlotIntermediateValues } from "@optuna/react"
+import React, { FC } from "react"
import { Trial } from "ts/types/optuna"
-import { usePlotlyColorTheme } from "../state"
-
-const plotDomId = "graph-intermediate-values"
export const GraphIntermediateValues: FC<{
trials: Trial[]
includePruned: boolean
logScale: boolean
}> = ({ trials, includePruned, logScale }) => {
- const theme = useTheme()
- const colorTheme = usePlotlyColorTheme(theme.palette.mode)
-
- useEffect(() => {
- plotIntermediateValue(trials, colorTheme, false, !includePruned, logScale)
- }, [trials, colorTheme, includePruned, logScale])
-
return (
-
- Intermediate values
-
-
+
)
}
-
-const plotIntermediateValue = (
- trials: Trial[],
- colorTheme: Partial,
- filterCompleteTrial: boolean,
- filterPrunedTrial: boolean,
- logScale: boolean
-) => {
- if (document.getElementById(plotDomId) === null) {
- return
- }
-
- const layout: Partial = {
- margin: {
- l: 50,
- t: 0,
- r: 50,
- b: 0,
- },
- yaxis: {
- title: "Objective Value",
- type: logScale ? "log" : "linear",
- },
- xaxis: {
- title: "Step",
- type: "linear",
- },
- uirevision: "true",
- template: colorTheme,
- legend: {
- x: 1.0,
- y: 0.95,
- },
- }
- if (trials.length === 0) {
- plotly.react(plotDomId, [], layout)
- return
- }
-
- const filteredTrials = trials.filter(
- (t) =>
- (!filterCompleteTrial && t.state === "Complete") ||
- (!filterPrunedTrial &&
- t.state === "Pruned" &&
- t.values &&
- t.values.length > 0) ||
- t.state === "Running"
- )
- const plotData: Partial[] = filteredTrials.map((trial) => {
- const isFeasible = trial.constraints.every((c) => c <= 0)
- return {
- x: trial.intermediate_values.map((iv) => iv.step),
- y: trial.intermediate_values.map((iv) => iv.value),
- marker: { maxdisplayed: 10 },
- mode: "lines+markers",
- type: "scatter",
- name: `trial #${trial.number} ${
- trial.state === "Running"
- ? "(running)"
- : !isFeasible
- ? "(infeasible)"
- : ""
- }`,
- ...(!isFeasible && { line: { color: "#CCCCCC" } }),
- }
- })
- plotly.react(plotDomId, plotData, layout)
-}