I'm trying creating a Heatmap chart and I am using a DataChart with a CustomSeries.
I overrido the RenderSeriesOverride method, and provided my own rendering for the heatmap. This works great when my rows and columns are all numeric, as with NumericXAxis, I can calculate the value on the canvas by doing:
double scaledXCoord = XAxis.GetScaledValue(myDataPoint.MyIntValue, params);
and plot by heatmap square on the grid at the desired coordinate.
However, my data is not numeric, and I'd like to use Category, where my axis (rows and colums) are textual values. By default, the Axis figure out which labels go where, but the CategoryXAxis doesn't seem to give me a method where I can find out to what coordinate on the grid the label falls, so I can figure out where I should map my squares to.
In other words, what I'd like to do is be able to pass a string, and get the coordinate on the grid based on where the string matches the label on the axisdouble scaledXCoord = XAxis.GetScaledValue(myDataPoint.MyTextValue, params);
How can I do this?
Thanks
Hello,
After some research HeatMap has been determine as a new Product Idea. I have sent your Product Idea directly to our product management team. Our product team chooses new Product Ideas for development based on popular feedback from our customer base. Infragistics continues to monitor application development for all of our products, so as trends appear in requested ideas, we can plan accordingly.
We value your input, and our philosophy is to enhance our toolset based on customer feedback. If your idea is chosen for development, you will be notified at that time. Your reference number for this Product Idea is PI12120052
If you would like to follow up on your Product Idea at a later point, you may contact Developer Support management via email. Please include the reference number of your Product Idea in the subject and body of your email message. You can reach Developer Support management through the following email address: dsmanager@infragistics.com
Also I can suggest you try our XamTreemap control, which can be used as HeatMap. In the Samples Browser under xamTreemap / Data / Heat Treemap section there is a sample showing this functionality.
Thanks Stefan,
I have looked at that sample, but I have some unique requirements, and looks like a chart would do what I'd like it to do. In any case, in a different part of the application, I will be using a chart with a custom series that also has labels, and I am still not clear how to map the values to the label values and get them scaled to grid coordinates inside the RenderSeriesOverride method.
Obviously something in the CategoryXAxis is mapping a coordinate to the string value of the label, and I'd like to know how I can get to that logic.
Thanks!
You can use the CategoryXAxis GetUnscaledValue or GetScaledValue method in in order to ge tteh coordonates of the specified value. Here you can read morea bout these methods:
http://help.infragistics.com/NetAdvantage/WPF/2012.2/CLR4.0/?page=InfragisticsWPF4.Controls.Charts.XamDataChart.v12.2~Infragistics.Controls.Charts.CategoryXAxis~GetUnscaledValue(Double,ScalerParams).html
http://help.infragistics.com/NetAdvantage/WPF/2012.2/CLR4.0/?page=InfragisticsWPF4.Controls.Charts.XamDataChart.v12.2~Infragistics.Controls.Charts.CategoryXAxis~GetScaledValue(Double,ScalerParams).html
Hope this helps you.
Hi Stefan,
The arguments of those functions take a double. This is precisely my problem. Since my data is label based, I don't have a double value. When I set the CategoryXAxis.ItemsSource, the collection contains only string values, and I need to match those string values to my data.
For example:
My chart consists of the following axis:
XAxis : red, yellow, greenYAxis : orange, pear, apple
apple |pear |orange |_______________________
red yellow green
My datapoints are:
{ red, apple }{ yellow, pear }{ green, orange }
The resulting plot should be:
apple | Xpear | Xorange |_________________X_____
Now to plot { red, apple }, I somehow need to resolve red to a coordinate of the grid. When I initially passed in my values to the CategoryXAxis [red, yellow, green], somehow they got plotted on coordinates 0, 1, and 2.
So how do I get the coordinate of where { red, apple } goes? I can't pass in XAxis.GetScaledValue(red, params), as it is not a double.
How did the CategoryXAxis figure out where red should be in the first place? Shouldn't I have some value mapping function that will match my data type to where it belongs? Clearly the other grids can somehow do this.
I have gotten around the above problem by creating a custom mapping of the coordinates based on their index, and providing a custom function to resolve the datapoints based on their property values that match the current labels.
I'd still like to know if there is a better way to do this. How do the bar charts do it?
Also, how can I center my labels like in the bar chart, and not have them appear at the tick marks?
Here is a picture of what I'm trying to do:
I have data points:
[A, 1][B, 2][B, 3][C, 4]
Items source is set to my collection of datapoints, and I'd like the chart to show the following:
I just want to note that I'm evaluating the Free Trial chart to do this. If what I have in the picture above is doable, my team will buy 4 developer licences for it next week. Any additional support you can offer would be great. Thanks!
Thank you for your feedback. I am glad that you resolved your issue and I believe that other community members may benefit from this as well.
Thanks again.
Thank you! That answers my label centering question!
I have created a sample project for you where I centered the horizontal labels using DataTemplate for the Label. I bound its RenderTransform and translate it based on the grid lines. You can follow the same approach for the vertical labels.
This example illustrates centered X axis labels in the first bar chart:
http://es.infragistics.com/products/wpf/sample/data-chart/axis-types
However, with my custom series, when I apply CategoryXAxis and CategoryYAxis, my values still appear at the tick marks, like the NumericXAxis instead of centered. How can I get my labels to be centered like it is shown in the bar chart?
Unfortunately that doesn't help me. Perhaps I shouldn't have said Heatmap, as the "heatmap" I'm trying to create is rather unique, with some unique requirements.
I just need to know how to center the labels between tickmarks on a chart. The chart with a custom series allows me to do what I need, but these minor issues are becoming a limiting factor. I can't see why it wouldn't be possible to center the labels between each tickmark, as the bar chart does it.