vb.net return actual chart x and y values on mousemove - vb.net

In my simple vb.net chart that displays a particular series, I would like to obtain running values of the actual values in the chart. I can already obtain the x-y coordinates, which is easy (e.x and e.y) - but wondering if there is a available method to convert the coordinates to the values related to the chart itself.
I need to use the mousemove event rather than mousedown.
I wish to transfer these actual values to a textbox on the form.
Thanks - burnt out trying to figure this out on my own.

This is pretty easy, unless the chart control doesn't give you some crucial information, in which case it's pretty hard :)
Your chart control probably shows several elements: the chart itself (bounded by the X and Y axes), the chart title, the axis titles, maybe a legend, etc. What you need to know is the .Left and .Width values of your X-axis. Assuming you can obtain those, the formula you want is
actualX = (mouseX - axis.Left) / axis.Width * (axis.Max - axis.Min) + axis.Min
Without knowing what chart control you're using on which platform, it's hard to tell you how to find all those pieces, but the formula is what you're looking for.

Related

Can you force a label on top of a bar chart in SQL Server Reporting Services?

I would like to ensure the labels of my bar chart are above the bars. Can you force a label on top of a bar chart in SQL Server Reporting Services? If so, how?
The issues are the colors are so dark, it's hard to read them if they are not above the bar in the chart. I could just change the colors, but I'd rather learn how to force the label location if possible.
I'd like all numbers to be above the bar, like over the blue bar below. I have over 100 different charts in my report, so the scale will vary greatly depending on the particular report.
Thank you!
In Visual Studio, design mode, ensure that the properties window is visible, then click on any of the labels on the chart.
At this point, the properties window should show the properties for Chart Series Label.
Find the 'Position' property, which probably is showing the value 'Auto', change this value to 'Top' and this should do the trick.
You have to first make sure the chart type is not stacked.
In my experience the "Position" property doesn't always work.
Sometimes you have to go to the properties of the series, then "Custom Attributes", then "Label Style" then select "Top".
What #niktrs said in the comments of the other answer about setting the AllowOutsidePlotArea property is also true.
Microsoft do not use the label Position property for some of the chart types.
They tell us what they use by default here - in your case "on bar charts labels are placed outside of the bars that represent data points" (they appear to mean "column charts")...but sometimes with a large value it's placed just inside, sometimes partially in-out (and if you try the "Outside" position it just fails to render!).
As #jayvee has mentioned the trick with Column charts is to select the value and change the SmartLabels AllowOutSidePlotArea to True (from Partial).
However if you have a Stacked Bar chart then labels are always in the centre of the particular value.
The hack to get labels on top is to add an extra Stacked Bar value with the Color set to "No Color" and move it to the top of the values (using the Chart Data designer arrows).
The trick is getting a good expression value to use - a constant ends up too big or too small at some point, so I found a percentage of the stacked values works best (remembering to change Nulls to Zeros)...25% to 30% usually works.
Then set the value Label to the value you want to display in the data label.
I just had this issue, I was able to fix it by making sure the chart series "Smart Labels" - "Disabled" property was set to "True"
This is what my properties pane looks like:

Modify chart series tooltip #ValY before displaying in vb.net 2012

Using ToolTip I am displaying data point values on a line chart. The ToolTip display was activated with the following code:
Chart1.Series("Wtr").ToolTip = "#VALY"
This works as it should but I need to perform some math on #VALY" before ToolTip displays it. Basically, I need to divide it by a fixed factor to reduce the value to a percentage (e.g. #VALY / fixed factor.) I've tried assigning #VALY to a variable but I can't get the value of #VALY.
I also tried using the ToolTip Popup event but it doesn't fire when hovering over a chart series. ToolTip Keywords might be the solution but I can't find a way to assign a fixed value to a Keyword.
I've spent several weeks researching and playing with this but haven't hit on a solution as yet. Any help would be greatly appreciated.
This is a Windows 7 / VB.Net 2012 platform.
In case anyone else needs to know, i finally solved the problem myself. I created a dataview on my datatable and used it to databind the columns in the datatable. I was then able to select any column I wanted for my tooltip. In this case I wanted to display "WtrRaw" when hovering over a "Wtr" data point.
prdView = New Dataview(dtProd)
ChartProd.Series("Wtr").Points.DataBind(prdView, "X-Axis", "Wtr", ToolTip = "WtrRaw")

How to program the Distance Between Axis Intervals (Charts)

I am creating a custom bar chart using VB.NET, I am wondering if there is a way to program the distance between intervals in the y axis. For example if I wanted the distance between points 1 and 2 in the axis to be of a certain length e.g 2cm long and the next interval to be of a certain length e.g 5cm long, is there a way to achieve this. Any help would be appreciated.
You can set the ChartArea to be a specific size and then configure the Axis.Interval property
No (at least, not easily). The Axis.Interval property sets all intervals to be the same size. You would need to subclass Chart and override the OnPaint method to draw the ticks (and/or grid lines) with different spacings. Not sure offhand if there are ways to have it paint parts of the chart as it normally would, while doing custom painting on other parts...
ETA: It may become slightly easier if you only have 2 intervals to worry about (e.g., the axis line itself, then one line 2 cm up, then another line 5 cm up from that, and no more lines after that). You could probably use the Axis.Interval and Axis.MinorGrid.Interval properties in that case.
ETA again, since it didn't show up nice in the comments: One thing you could try is to hide all of the ticks and grid lines, and then handle the OnPaint event (not override) to just draw lines on top of the chart where needed. Something like this psuedocode
private void ChartPaint(object sender, Args e) {
e.Graphics.DrawLine(figure_out_2cm_above_axis, Color.Black, etc);
e.Graphics.DrawLine(figure_out_5cm_above_line, Color.Black, etc);
}

rdlc: Display percentage on pie chart

I'm using Visual Studio 2010 reporting to generate a report which has a table and a pie chart. Both work just fine except that for the pie chart, I'm to put the % value on each pie chart slice.
1. Is this even possible?
2. If it is, how do I do it?
Thanks
To put the % value on each pie chart slice do this (as shown here):
On the design surface, right-click on the pie and select Show Data Labels. The data labels should appear within each slice on the pie chart.
On the design surface, right-click on the labels and select Series Label Properties. The Series Label Properties dialog box appears.
Type #PERCENT for the Label data option.
Beware: If you use multiple data fields like this:
you need to move every field to first position and perform above steps as shown here otherwise you end up with only one pie chart slice showing the percentage and the others are blank...

Reporting Services Pie Chart

The pie chart is driving me nuts...Excuse me if I sound ignorant but I have figured out the other RS charts with relative ease, and this is the first time I have had to use the Reporting Services pie chart.
I have a dataset:
Columns:
ChildId int
AssessmentType varchar
Score int
All I want is to have a pie chart that displays the percent of the whole for each assessment type. So if I had 10 records returned with the following:
2 "THIS" Assessment Types
5 "THAT" Assessment Types
3 "THEOTHER" Assessment Types
I would want the pie chart to show that the "THIS" Assessment peice of the pie is 20%, the "THAT" is 50%, "THEOTHER" as 30%, but I cannot figure out how to set it up. Can any one help me out on this, or refer me somewhere. I have been looking for some time and can't find any pages that have helped me with this control.
I figured this out...To show the percentage:
Right click on the chart and click on properties.
Go the the Data table, select your "[Value]" and click edit.
Go to the Point Labels tab and check "Show point labels".
In the format code enter P
Edit the expression and calculate your percentage. In my example I would use the code below.
=Count(Fields!ChildId.Value) / Count(Fields!Childid.Value, "MyDataset")
The problem I was having is that I was filtering the data set at the chart level with a filter expression. So when I was trying to calculate the percentage using the code below my numbers were getting thrown off. The filter is not applied the dataset count when retrieved like I was doing it.
Count(Fields!Childid.Value, "MyDataset")