Search code examples
vb.netmschartlogarithm

Show mouse's position on a logarithmic axis on a chart in vb.net


I'm working with a MSchart and I'm trying to figure out how to show the x-axis value based on the mouse's position in the graph. It only shows when the mouse is on a datapoint. The y-axis is scaled linearly and works as it should.

The x-axis however doesn't since it is logarithmic and gives me results this:

(0 = 0, 10 = 1, 100 = 2, 1000 = 3)

Where x = 10, it gives me a returned value of 1, where x = 100, it gives me a returned value of 2, and etc.

dim position = e.Location
dim result = myChart.hitTest(position.x, position.y)
etoolTip.active = true
if(result.ChartElementType = DataVisualization.Charting.ChartElementType.datapoint)

    dim x = result.ChartArea.AxisX.PixelPositionToValue(position.x)
    dim y = result.chartarea.axisy.pixelPositionToValue(position.y)
    etoolTip.SetToolTip(phaseNoiseChart, "X:"&x  &"Y:"&y)
else
    etoolTip.active = false
End If

How do I get the x-axis's true position based on the mouse's position for an axis that is logarithmic?


Solution

  • I clearly didn't understand what those numbers meant until I realized what the answer was telling me. The way I turn it back into actual coordinates is by 10^x.

    dim x = result.ChartArea.AxisX.PixelPositionToValue(position.x)
    x = 10^x
    dim y = result.chartarea.axisy.pixelPositionToValue(position.y)
    etoolTip.SetToolTip(phaseNoiseChart, "X:"&x  & "Y:"&y)