It should render a vertical heat map that examples the configured palette.
The code for palette creation is attached too.
THE BUG: You can see in the exported bitmap that there are 2 stripes from top to bottom that rendered with the wrong color!!!
If I set the value of all the chart to that value, all the chart will be red instead of light blue!!
If I use the default palette THERE IS NO ISSUE, but i must use my palette, and I double checked it without finding any problem.
ANOTHER MINOR BUG: There is a small gap above and below the chart that I couldn't remove
The result:
The Code:
Code: Select all
using Arction.Wpf.Charting;
using Arction.Wpf.Charting.SeriesXY;
using Arction.Wpf.Charting.Titles;
using System;
using System.Windows.Media;
namespace LCExample
{
public class Class1
{
public Class1()
{
int MinY = 0 + (int) TimeSpan.FromHours(1).TotalSeconds;
int MaxY = 6600 + (int) TimeSpan.FromHours(1).TotalSeconds;
double MinX = 0.5;
double MaxX = 63.5;
int _rows = 662;
int _columns = 119;
var _chart = new LightningChartUltimate();
_chart.BeginUpdate();
var view = _chart.ViewXY;
_chart.ChartBackground.Color = Colors.White;
_chart.ChartBackground.GradientFill = GradientFill.Solid;
view.GraphBordersOverSeries = false;
view.GraphBorderColor = Colors.Transparent;
view.GraphBackground = new Fill
{
Style = RectFillStyle.None
};
_chart.Title.Visible = false;
_chart.ChartRenderOptions.HeadlessMode = true;
_chart.Width = _columns;
_chart.Height = _rows;
view.LegendBoxes[0].Visible = false;
var axisX = view.XAxes[0];
var axisY = view.YAxes[0];
axisX.SetRange(MinX, MaxX);
axisY.SetRange(MinY, MaxY);
var _heatMap = new IntensityGridSeries(view, axisX, axisY)
{
MouseInteraction = false,
Fill = IntensityFillStyle.Paletted,
PixelRendering = true,
WireframeType = SurfaceWireframeType.None,
ContourLineType = ContourLineTypeXY.None,
RangeMinX = MinX,
RangeMaxX = MaxX,
RangeMinY = MinY,
RangeMaxY = MaxY,
SizeX = _columns,
SizeY = _rows
};
_heatMap.ValueRangePalette?.Dispose(); // THOSE TWO LINES CAUSES THE BUG - IF REMOVED, IT WORKS BUT I NEED THOSE COLORS
_heatMap.ValueRangePalette = CreatePalette(_heatMap);
view.IntensityGridSeries.Add(_heatMap);
view.AxisLayout.YAxesLayout = YAxesLayout.Stacked;
view.AxisLayout.XAxisAutoPlacement = XAxisAutoPlacement.AllTop;
axisX.Visible = false;
axisX.Title = new AxisXTitle {Visible = false};
axisX.ValueType = AxisValueType.Number;
axisX.MouseInteraction = false;
axisY.Visible = false;
axisY.Title = new AxisYTitle {Visible = false};
axisY.ValueType = AxisValueType.Time;
axisY.MouseInteraction = false;
axisY.Reversed = true;
double[][] data = new double[_columns][];
var points = new IntensityPoint[_columns, _rows];
for (int i = 0; i < _columns; i++)
{
data[i] = new double[_rows];
for (int j = 0; j < _rows; j++)
{
points[i, j].Value = (double) i / _columns * 63.5;
}
}
_heatMap.Data = points;
_chart.EndUpdate();
Console.WriteLine(_chart.SaveToFile("TEST.png") ? "Saved" : "Error");
}
private static ValueRangePalette CreatePalette(IntensityGridSeries series)
{
ValueRangePalette palette = new ValueRangePalette(series)
{
MinValue = 0,
Type = PaletteType.Uniform
};
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(0, 0, 143), 1.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(0, 0, 159), 2.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(0, 0, 175), 3.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(0, 0, 191), 4.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(0, 0, 207), 5.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(0, 0, 223), 6.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(0, 0, 239), 7.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(0, 0, 255), 8.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(0, 15, 255), 9.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(0, 31, 255), 10.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(0, 47, 255), 11.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(0, 63, 255), 12.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(0, 79, 255), 13.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(0, 95, 255), 14.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(0, 111, 255), 15.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(0, 127, 255), 16.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(0, 143, 255), 17.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(0, 159, 255), 18.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(0, 175, 255), 19.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(0, 191, 255), 20.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(0, 207, 255), 21.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(0, 223, 255), 22.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(0, 239, 255), 23.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(0, 255, 255), 24.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(15, 255, 255), 25.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(31, 255, 239), 26.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(47, 255, 223), 27.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(63, 255, 207), 28.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(79, 255, 191), 29.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(95, 255, 175), 30.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(111, 255, 159), 31.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(127, 255, 143), 32.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(143, 255, 127), 33.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(159, 255, 111), 34.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(175, 255, 95), 35.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(191, 255, 79), 36.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(207, 255, 63), 37.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(223, 255, 47), 38.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(239, 255, 31), 39.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(255, 255, 15), 40.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(255, 255, 0), 41.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(255, 239, 0), 42.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(255, 223, 0), 43.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(255, 207, 0), 44.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(255, 191, 0), 45.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(255, 175, 0), 46.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(255, 159, 0), 47.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(255, 143, 0), 48.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(255, 127, 0), 49.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(255, 111, 0), 50.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(255, 95, 0), 51.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(255, 79, 0), 52.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(255, 63, 0), 53.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(255, 47, 0), 54.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(255, 31, 0), 55.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(255, 15, 0), 56.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(255, 0, 0), 57.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(239, 0, 0), 58.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(223, 0, 0), 59.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(207, 0, 0), 60.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(191, 0, 0), 61.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(175, 0, 0), 62.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(159, 0, 0), 63.5));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(143, 0, 0), 0x7ffe - 1));
palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(0, 0, 0),
0x7ffe)); // Above the max
return palette;
}
}
}