gpt4 book ai didi

重新绘制指针处的值以显示在工具提示中?

转载 作者:行者123 更新时间:2023-12-04 13:12:34 28 4
gpt4 key购买 nike

是否可以在 Recharts 中在用户将鼠标悬停的 Y 位置显示一条水平线并检索该 Y 值,以便我们可以在工具提示上显示它?
https://meridian.a2z.com/components/tooltip/?platform=react-web
我一直在尝试研究如何在鼠标悬停或单击的图形上获得 Y 值,但我无法看到我们甚至可以将其拉出的位置。
关于我们可以用来获取这些数据的属性或组件的任何提示?它甚至是我们可以从图书馆访问的东西吗?
为了澄清起见,我们试图获取用户将光标悬停在图形上的 Y 轴值。
因此,如果图形看起来像这样并且用户将鼠标放在粉红色圆点位置,我将尝试获取 ~7000 的值 - 该图形位置处的 y 值 cursor location

最佳答案

编辑:
关于响应的注意事项:
如果您想让它具有响应性,只需根据您应用于图表组件的填充/边距调整 chartBounds,就可以了。
如果您正在尝试更高级的东西并且需要将高度和宽度传递给图表组件以进行更多计算,以下文章应该会有所帮助:https://www.pluralsight.com/tech-blog/getting-size-and-position-of-an-element-in-react/

注意:这是一个小技巧,可能不是一个完美的解决方案,但它应该足以让您走上正轨
您应该能够使用 onMouseMove 中的 chartX 和 chartY 字段。不幸的是,这只是光标下的像素值,但您应该能够将其转换为您用于图形的范围。
这是一个使用 SimpleLineChart 示例组合在一起的示例 recharts。如果您只想获取用户光标下的 Y 值,并且可以扩展以获取 X 值,这应该可行。

const {LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, Legend} = Recharts;
const data = [
{name: 'Page A', uv: 4000, pv: 2400, amt: 2400},
{name: 'Page B', uv: 3000, pv: 1398, amt: 2210},
{name: 'Page C', uv: 2000, pv: 9800, amt: 2290},
{name: 'Page D', uv: 2780, pv: 3908, amt: 2000},
{name: 'Page E', uv: 1890, pv: 4800, amt: 2181},
{name: 'Page F', uv: 2390, pv: 3800, amt: 2500},
{name: 'Page G', uv: 3490, pv: 4300, amt: 2100},
];


//The pixel bounds for the LineChart, 0,0 is the top left corner
// these were found using the inspector built into the web browser
// these are in pixels but correspond to the values used in your graph
// so 246 is 0 Y on the graph and 5 is 10000 Y on the graph (according to your data)
const chartBoundsY = {min: 246, max: 5}

// The bounds we are using for the chart
const chartMinMaxY = {min: 0, max: 10000}

// Convert the pixel value from the cursor to the scale used in the chart
const remapRange = value => {
let fromAbs = value - chartBoundsY.min
let fromMaxAbs = chartBoundsY.max - chartBoundsY.min

let normal = fromAbs / fromMaxAbs

let toMaxAbs = chartMinMaxY.max - chartMinMaxY.min
let toAbs = toMaxAbs * normal

return Math.ceil(toAbs + chartMinMaxY.min)
}

const SimpleLineChart = React.createClass({
render () {
return (
<LineChart
width={600} height={300} data={data}
margin={{top: 5, right: 30, left: 20, bottom: 5}}
onMouseMove={props => {
// We get the values passed into the onMouseMove event
if(props.isTooltipActive) {
// If the tooltip is active then we display the Y value
// under the mouse using our custom mapping
console.log(remapRange(props.chartY))
}
}}
>
<XAxis dataKey="name"/>
<YAxis/>
<CartesianGrid strokeDasharray="3 3"/>
<Tooltip/>
<Legend />
<Line type="monotone" dataKey="pv" stroke="#8884d8" activeDot={{r: 8}}/>
<Line type="monotone" dataKey="uv" stroke="#82ca9d" />
</LineChart>
)
}
})

ReactDOM.render(
<SimpleLineChart />,
document.getElementById('container')
)
你可以在jsfiddle中打开这个例子,在JS编辑器中粘贴上面的代码,自己试一下。 http://recharts.org/en-US/examples
以下是 LineChart 鼠标事件的文档: http://recharts.org/en-US/api/LineChart

关于重新绘制指针处的值以显示在工具提示中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63585743/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com