I am using StackedColumnRenderableSeries and I have a problem when a data is displayed as it shows the incomplete graph as the second attached image.
Thank you
var xAxis = new DateAxis(this)
{
GrowBy = new DoubleRange(0.1, 0.1),
AxisTitle = “”,
AutoRange = AutoRange.Always,
TextFormatting = “MMM yyyy”,
DrawMajorGridLines = false,
DrawMinorGridLines = false,
AxisBandsStyle = new SolidBrushStyle(0xfff9f9f9),
};
- Benigno Ranilla asked 7 years ago
-
Hi Benigno. Can you post a project or code which will help us to reproduce the case from the second picture (data set with points from the picture, chart configuration etc)? Thanks in advance.
- You must login to post comments
The code is:
What is shown are monthly data so I send it 15/08/2917, 09/15/2017, 10/15/2017 so it stays in the middle.
public class HistPrec_G : AppCompatActivity
{
DrawerLayout drawerLayout;
NavigationView navigationView;
string _usuarioInterno, filtro;
Android.App.ProgressDialog progress;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.graf3);
var toolbar = FindViewById<V7Toolbar>(Resource.Id.toolbar);
SetSupportActionBar(toolbar);
SupportActionBar.SetDisplayHomeAsUpEnabled(true);
SupportActionBar.SetHomeAsUpIndicator(GetDrawable(Resource.Drawable.backButton));
TextView ToolOff = FindViewById<TextView>(Resource.Id.modooff);
//var chart = FindViewById<SciChartSurface>(Resource.Id.Chart);
var chart = new SciChartSurface(this);
var linearLayoutC = FindViewById<LinearLayout>(Resource.Id.linearLayout1);
var linearLayoutL = FindViewById<LinearLayout>(Resource.Id.linearLayout2);
int themeid = Resource.Style.SciChart_Bright_Spark;
chart.Theme = themeid;
_usuarioInterno = Intent.GetStringExtra("_usuarioInterno") ?? "Data not available";
filtro = Intent.GetStringExtra("filtro") ?? "Data not available";
string _codCliente = Intent.GetStringExtra("_codCliente") ?? "Data not available";
string _codPuntoF = Intent.GetStringExtra("_codPuntoF") ?? "Data not available";
string _moneda = Intent.GetStringExtra("_moneda") ?? "Data not available";
string _fechaD = Intent.GetStringExtra("_fechaD") ?? "Data not available";
string _fechaH = Intent.GetStringExtra("_fechaH") ?? "Data not available";
string _modooff = Intent.GetStringExtra("_modooff") ?? "0";
ModoOff();
Inicializar();
void ModoOff()
{
if (_modooff == "0")
{
ToolOff.Visibility = ViewStates.Gone;
}
else if (_modooff == "1")
{
ToolOff.Visibility = ViewStates.Gone;
}
else if (_modooff == "2")
{
ToolOff.Visibility = ViewStates.Visible;
}
}
void Inicializar()
{
progress = ProgressDialog.Show(this, "", "Obteniendo datos...", true, false);
progress.SetProgressStyle(ProgressDialogStyle.Spinner);
new Thread(new ThreadStart(delegate
{
RunOnUiThread(async () => await CargarGrafico());
})).Start();
}
async Task CargarGrafico()
{
List<BEGraficosFacturacion> resultado;
List<TBLHistoricoPrecio> resultado1;
DAReporte_Facturacion conexion = new DAReporte_Facturacion();
BLTBLHistoricoPrecio conexion1 = new BLTBLHistoricoPrecio();
TBLHistoricoPrecio data = new TBLHistoricoPrecio();
string mhp;
string MensajeErrorHP;
if (_moneda == "USD") { mhp = "$ "; } else if (_moneda == "PEN") { mhp = "S/ "; } else { mhp = ""; }
if (_modooff == "1")
{
resultado = await conexion.Reporte_HistoricoPrecio(_fechaD, _fechaH, _codCliente, _codPuntoF, _moneda);
MensajeErrorHP = conexion.ResultadoFinalRHP;
if (resultado == null)
{
progress.Dismiss();
Toast.MakeText(this, MensajeErrorHP, ToastLength.Short).Show();
}
else if (resultado.Count == 0)
{
progress.Dismiss();
Android.App.AlertDialog.Builder alert = new Android.App.AlertDialog.Builder(this);
alert.SetMessage("No hay datos");
alert.SetCancelable(false);
alert.SetPositiveButton("OK", (senderAlert, args) =>
{
Finish();
});
alert.Show();
}
else
{
var Fecha = resultado.Select(x => x.Fecha).Distinct().ToArray();
var Potencia = resultado.Where(x => x.Concepto == "Potencia").Select(x => (Convert.ToDouble(x.Consumo))).ToArray();
var EnergiaHoraPunta = resultado.Where(x => x.Concepto == "EnergiaHoraPunta").Select(x => (Convert.ToDouble(x.Consumo))).ToArray();
var EnergiaHoraFueraPunta = resultado.Where(x => x.Concepto == "EnergiaHoraFueraPunta").Select(x => (Convert.ToDouble(x.Consumo))).ToArray();
var PrecioMedio = resultado.Where(x => x.Concepto == "Monomico").Select(x => (Convert.ToDouble(x.Consumo))).ToArray();
var PCSPT = resultado.Where(x => x.Concepto == "PCSPT").Select(x => (Convert.ToDouble(x.Consumo))).ToArray();
var SST = resultado.Where(x => x.Concepto == "SST").Select(x => (Convert.ToDouble(x.Consumo))).ToArray();
var cont = (Convert.ToDouble(resultado.Count) / Convert.ToDouble(6));
GraficarColumn(Fecha, Potencia, EnergiaHoraPunta, EnergiaHoraFueraPunta, PrecioMedio, PCSPT, SST, cont);
}
}
else if(_modooff=="2")
{
DateTime desde = DateTime.ParseExact(_fechaD, "dd/MM/yyyy", CultureInfo.InvariantCulture);
DateTime _desde = new DateTime(desde.Year, desde.Month, 1);
DateTime hasta = DateTime.ParseExact(_fechaH, "dd/MM/yyyy", CultureInfo.InvariantCulture);
DateTime _hasta = new DateTime(hasta.Year, hasta.Month, 20);
data.CodCliente = _codCliente;
data.CodPuntoFacturacion = _codPuntoF;
data.Moneda = _moneda;
resultado1 = await conexion1.Reporte_HistoricoPrecio(data, _desde, _hasta);
MensajeErrorHP = "Error al momento de leer los datos guardados";
if (resultado1 == null)
{
progress.Dismiss();
Android.App.AlertDialog.Builder alert = new Android.App.AlertDialog.Builder(this);
alert.SetMessage("No hay datos sincronizados");
alert.SetCancelable(false);
alert.SetPositiveButton("OK", (senderAlert, args) =>
{
Finish();
});
alert.Show();
}
else if (resultado1.Count == 0)
{
progress.Dismiss();
Android.App.AlertDialog.Builder alert = new Android.App.AlertDialog.Builder(this);
alert.SetMessage("No hay datos");
alert.SetCancelable(false);
alert.SetPositiveButton("OK", (senderAlert, args) =>
{
Finish();
});
alert.Show();
}
else
{
var Fecha = resultado1.Select(x => x.Fecha).Distinct().ToArray();
var Potencia = resultado1.Where(x => x.Concepto == "Potencia").Select(x => (Convert.ToDouble(x.Consumo))).ToArray();
var EnergiaHoraPunta = resultado1.Where(x => x.Concepto == "EnergiaHoraPunta").Select(x => (Convert.ToDouble(x.Consumo))).ToArray();
var EnergiaHoraFueraPunta = resultado1.Where(x => x.Concepto == "EnergiaHoraFueraPunta").Select(x => (Convert.ToDouble(x.Consumo))).ToArray();
var PrecioMedio = resultado1.Where(x => x.Concepto == "Monomico").Select(x => (Convert.ToDouble(x.Consumo))).ToArray();
var PCSPT = resultado1.Where(x => x.Concepto == "PCSPT").Select(x => (Convert.ToDouble(x.Consumo))).ToArray();
var SST = resultado1.Where(x => x.Concepto == "SST").Select(x => (Convert.ToDouble(x.Consumo))).ToArray();
var cont = (Convert.ToDouble(resultado1.Count) / Convert.ToDouble(6));
GraficarColumn(Fecha, Potencia, EnergiaHoraPunta, EnergiaHoraFueraPunta, PrecioMedio, PCSPT, SST, cont);
}
}
void GraficarColumn(DateTime[] Fecha, double[] Potencia, double[] EnergiaHoraPunta, double[] EnergiaHoraFueraPunta, double[] PrecioMedio, double[] PCSPT, double[] SST, double cont)
{
try
{
var xAxis = new DateAxis(this);
if (Fecha.Count() == 1)
{
var title = Fecha[0].ToString("MMM yyyy");
xAxis = new DateAxis(this)
{
GrowBy = new DoubleRange(0, 1),
AutoRange = AutoRange.Always,
//TextFormatting = title,
AxisTitle = title,
DrawMajorGridLines = false,
DrawMinorGridLines = false,
//LabelProvider = new MonthYearLabelProvider(),
AxisBandsStyle = new SolidBrushStyle(0xfff9f9f9),
};
}
else if (Fecha.Count() > 1)
{
xAxis = new DateAxis(this)
{
GrowBy = new DoubleRange(-0.0175, -0.0175),
AutoRange = AutoRange.Always,
TextFormatting = "MMM yyyy",
AxisTitle = "",
DrawMajorGridLines = false,
DrawMinorGridLines = false,
//LabelProvider = new MonthYearLabelProvider(),
AxisBandsStyle = new SolidBrushStyle(0xfff9f9f9),
};
}
var yAxis = new NumericAxis(this)
{
AxisTitle = "Consumo" + " (" + _moneda + ")",
GrowBy = new DoubleRange(0, 0.1d),
CursorTextFormatting = mhp + "##,##0.00",
DrawMajorGridLines = false,
DrawMinorGridLines = false,
AxisBandsStyle = new SolidBrushStyle(0xfff9f9f9),
AxisAlignment = AxisAlignment.Left,
};
var PotenciaDataSeries = new XyDataSeries<DateTime, double> { SeriesName = "Potencia" };
var EnergiaHoraPuntaDataSeries = new XyDataSeries<DateTime, double> { SeriesName = "Energia Hora Punta" };
var EnergiaHoraFueraPuntaDataSeries = new XyDataSeries<DateTime, double> { SeriesName = "Energia Hora Fuera Punta" };
var PrecioMedioDataSeries = new XyDataSeries<DateTime, double> { SeriesName = "Precio Medio" };
var PCSPTDataSeries = new XyDataSeries<DateTime, double> { SeriesName = "PCSPT" };
var SSTDataSeries = new XyDataSeries<DateTime, double> { SeriesName = "SST" };
var totalDataSeries = new XyDataSeries<DateTime, double> { SeriesName = "Total" };
for (var i = 0; i < cont; i++)
{
PotenciaDataSeries.Append(Fecha[i], Potencia[i]);
EnergiaHoraPuntaDataSeries.Append(Fecha[i], EnergiaHoraPunta[i]);
EnergiaHoraFueraPuntaDataSeries.Append(Fecha[i], EnergiaHoraFueraPunta[i]);
PrecioMedioDataSeries.Append(Fecha[i], PrecioMedio[i]);
PCSPTDataSeries.Append(Fecha[i], PCSPT[i]);
SSTDataSeries.Append(Fecha[i], SST[i]);
totalDataSeries.Append(Fecha[i], Potencia[i] + EnergiaHoraPunta[i] + EnergiaHoraFueraPunta[i] + PrecioMedio[i] + PCSPT[i] + SST[i]);
}
var columnsCollection = new HorizontallyStackedColumnsCollection();
columnsCollection.Add(GetRenderableSeries(PotenciaDataSeries, 0xff7cb5ec, 0xff7cb5ec));
columnsCollection.Add(GetRenderableSeries(EnergiaHoraPuntaDataSeries, 0xFF434348, 0xFF434348));
columnsCollection.Add(GetRenderableSeries(EnergiaHoraFueraPuntaDataSeries, 0xFF90ed7d, 0xFF90ed7d));
columnsCollection.Add(GetRenderableSeries(PrecioMedioDataSeries, 0xFFf7a35c, 0xFFf7a35c));
columnsCollection.Add(GetRenderableSeries(PCSPTDataSeries, 0xFF8085e9, 0xFF8085e9));
columnsCollection.Add(GetRenderableSeries(SSTDataSeries, 0xfff15c80, 0xfff15c80));
var legend = new SciChartLegend(this);
var legendModifier = new LegendModifier(legend);
legendModifier.SetOrientation(SciChart.Core.Framework.Orientation.Vertical);
legendModifier.SetLegendPosition(GravityFlags.Top | GravityFlags.Start, 0);
legendModifier.SetSourceMode(SourceMode.AllVisibleSeries);
legendModifier.SetShowSeriesMarkers(true);
legendModifier.SetShowCheckboxes(true);
legendModifier.SetReceiveHandledEvents(true);
var modifierGroup = new ModifierGroup(legendModifier);
chart.ChartModifiers.Add(modifierGroup);
if (legend.Parent != null)
{
(legend.Parent as ViewGroup).RemoveView(legend);
}
chart.XAxes.Add(xAxis);
chart.YAxes.Add(yAxis);
chart.RenderableSeries.Add(columnsCollection);
//
chart.ChartModifiers.Add(new TooltipModifier());
//chart.ChartModifiers.Add(new ZoomExtentsModifier());
//chart.ChartModifiers.Add(new PinchZoomModifier());
//
linearLayoutC.Orientation = Orientation.Vertical;
linearLayoutL.Orientation = Orientation.Vertical;
linearLayoutC.AddView(chart);
linearLayoutL.AddView(legend);
progress.Dismiss();
}
catch (Exception ex)
{
progress.Dismiss();
Toast.MakeText(this, ex.Message, ToastLength.Short).Show();
}
}
}
}
private StackedColumnRenderableSeries GetRenderableSeries(IDataSeries dataSeries, uint fillColor, uint strokeColor)
{
return new StackedColumnRenderableSeries
{
DataSeries = dataSeries,
StrokeStyle = new SolidPenStyle(this, strokeColor),
FillBrushStyle = new SolidBrushStyle(fillColor)
};
}
//BackButton
public override bool OnOptionsItemSelected(IMenuItem item)
{
if (item.ItemId == Android.Resource.Id.Home) ;
{
Finish();
}
return base.OnOptionsItemSelected(item);
}
}
- Melani Osorio Camara answered 7 years ago
-
Unfortunately your code contains some missing types so I couldn’t use it to create a project and debug it on my PC. Can you try to simplify it so I could compile it or attach entire project? Maybe you can modify one of our examples and reproduce this issue there? The only thing which I noticed without compilation is that for some reasons you apply negative GrowBy for your xAxis (0.0175, -0.0175) when there are more than 1 point which leads to reducing of VisibleRange and as result columns at the edges could be drawn outside viewport. Please can you recheck this code?
- You must login to post comments
Te envío el código editado donde replique el error. La idea es que los datos sean mensuales.
In the FOR tests with:
//ERROR
for (var i = 0; i < 1; i++)
{
Fecha= date.AddMonths(i);
PotenciaDataSeries.Append(Fecha, Potencia[i]);
EnergiaHoraPuntaDataSeries.Append(Fecha, EnergiaHoraPunta[i]);
EnergiaHoraFueraPuntaDataSeries.Append(Fecha, EnergiaHoraFueraPunta[i]);
PrecioMedioDataSeries.Append(Fecha, PrecioMedio[i]);
PCSPTDataSeries.Append(Fecha, PCSPT[i]);
SSTDataSeries.Append(Fecha, SST[i]);
}
//CORRECT
for (var i = 0; i < 4; i++)
{
Fecha= date.AddMonths(i);
PotenciaDataSeries.Append(Fecha, Potencia[i]);
EnergiaHoraPuntaDataSeries.Append(Fecha, EnergiaHoraPunta[i]);
EnergiaHoraFueraPuntaDataSeries.Append(Fecha, EnergiaHoraFueraPunta[i]);
PrecioMedioDataSeries.Append(Fecha, PrecioMedio[i]);
PCSPTDataSeries.Append(Fecha, PCSPT[i]);
SSTDataSeries.Append(Fecha, SST[i]);
}
using Android.Views;
using Java.Lang;
using SciChart.Charting.Model.DataSeries;
using SciChart.Charting.Modifiers;
using SciChart.Charting.Numerics.LabelProviders;
using SciChart.Charting.Visuals;
using SciChart.Charting.Visuals.Axes;
using SciChart.Charting.Visuals.RenderableSeries;
using SciChart.Core.Utility;
using SciChart.Data.Model;
using SciChart.Drawing.Common;
using SciChart.Examples.Demo.Fragments.Base;
using System;
using Xamarin.Examples.Demo.Droid.Fragments.Base;
namespace Xamarin.Examples.Demo.Droid.Fragments.Examples
{
[ExampleDefinition(“Stacked Column Side By Side Chart”, description: “A Stacked Column chart with columns grouped side by side”, icon: ExampleIcon.StackedColumn)]
public class StackedColumnSideBySideFragment : ExampleBaseFragment
{
public SciChartSurface Surface => View.FindViewById(Resource.Id.chart);
public override int ExampleLayoutId => Resource.Layout.Example_Single_Chart_Fragment;
protected override void InitExample()
{
var xAxis = new DateAxis(Activity)
{
};
var yAxis = new NumericAxis(Activity)
{
AutoRange = AutoRange.Always,
AxisTitle = "billions of People",
GrowBy = new DoubleRange(0, 0.1),
DrawMajorBands = true,
};
var EnergiaHoraFueraPunta = new[] { 1.269, 1.330, 1.356, 1.304 };
var EnergiaHoraPunta = new[] { 1.004, 1.173, 1.236, 1.656 };
var PrecioMedio = new[] { 0.282, 0.310, 0.319, 0.439 };
var PCSPT = new[] { 0.214, 0.243, 0.254, 0.313 };
var Potencia = new[] { 0.176, 0.201, 0.203, 0.261 };
var SST = new[] { 0.176, 0.201, 0.203, 0.261 };
var PotenciaDataSeries = new XyDataSeries<DateTime, double> { SeriesName = "Potencia" };
var EnergiaHoraPuntaDataSeries = new XyDataSeries<DateTime, double> { SeriesName = "Energia Hora Punta" };
var EnergiaHoraFueraPuntaDataSeries = new XyDataSeries<DateTime, double> { SeriesName = "Energia Hora Fuera Punta" };
var PrecioMedioDataSeries = new XyDataSeries<DateTime, double> { SeriesName = "Precio Medio" };
var PCSPTDataSeries = new XyDataSeries<DateTime, double> { SeriesName = "PCSPT" };
var SSTDataSeries = new XyDataSeries<DateTime, double> { SeriesName = "SST" };
DateTime date = DateTime.Now;
DateTime Fecha;
//Probar
//for (var i = 0; i < 4; i++)
for (var i = 0; i < 1; i++)
{
Fecha= date.AddMonths(i);
PotenciaDataSeries.Append(Fecha, Potencia[i]);
EnergiaHoraPuntaDataSeries.Append(Fecha, EnergiaHoraPunta[i]);
EnergiaHoraFueraPuntaDataSeries.Append(Fecha, EnergiaHoraFueraPunta[i]);
PrecioMedioDataSeries.Append(Fecha, PrecioMedio[i]);
PCSPTDataSeries.Append(Fecha, PCSPT[i]);
SSTDataSeries.Append(Fecha, SST[i]);
}
//
var columnsCollection = new HorizontallyStackedColumnsCollection();
columnsCollection.Add(GetRenderableSeries(PotenciaDataSeries, 0xff7cb5ec, 0xff7cb5ec));
columnsCollection.Add(GetRenderableSeries(EnergiaHoraPuntaDataSeries, 0xFF434348, 0xFF434348));
columnsCollection.Add(GetRenderableSeries(EnergiaHoraFueraPuntaDataSeries, 0xFF90ed7d, 0xFF90ed7d));
columnsCollection.Add(GetRenderableSeries(PrecioMedioDataSeries, 0xFFf7a35c, 0xFFf7a35c));
columnsCollection.Add(GetRenderableSeries(PCSPTDataSeries, 0xFF8085e9, 0xFF8085e9));
columnsCollection.Add(GetRenderableSeries(SSTDataSeries, 0xfff15c80, 0xfff15c80));
var legendModifier = new LegendModifier(Activity);
legendModifier.SetLegendPosition(GravityFlags.Top | GravityFlags.Left, 10);
using (Surface.SuspendUpdates())
{
Surface.XAxes.Add(xAxis);
Surface.YAxes.Add(yAxis);
Surface.RenderableSeries.Add(columnsCollection);
Surface.ChartModifiers.Add(legendModifier);
Surface.ChartModifiers.Add(new TooltipModifier());
}
}
private StackedColumnRenderableSeries GetRenderableSeries(IDataSeries dataSeries, uint fillColor, uint strokeColor)
{
return new StackedColumnRenderableSeries
{
DataSeries = dataSeries,
StrokeStyle = new SolidPenStyle(Activity, strokeColor),
FillBrushStyle = new SolidBrushStyle(fillColor)
};
}
}
}
Thank You.
- Melani Osorio Camara answered 7 years ago
-
Thanks for your code. I could reproduce this issue on my PC. I’ve created a task in our bugtracker (https://abtsoftware.myjetbrains.com/youtrack/issue/SC_DROID-487) and will try to fix ASAP.
- You must login to post comments
Please login first to submit.