c# - una - DotNet.Highcharts: el costo no se grafica con la fecha correcta
tipos de grafica highcharts (1)
Sus valores Y están completamente desconectados de los valores X. Para lograr lo que desea, necesita reestructurar sus datos de la siguiente manera:
DateTime dt = new DateTime(2016, 2, 27);
Highcharts chart = new Highcharts("graph")
.SetTitle(new Title { Text = "Incoming Stats" })
.SetXAxis(new XAxis { Type = AxisTypes.Datetime })
.SetYAxis(new YAxis { Title = new YAxisTitle { Text = "Amount Incoming" } })
.SetSeries(new[]
{
new Series { Name = "inc", Data = new Data(new object[,] {
{dt , 23 },
{dt.AddDays(1) , 223 },
{dt.AddDays(2) , 51 },
{dt.AddDays(11) , 200 }, }) },
new Series { Name = "exp", Data = new Data(new object[,] {
{dt.AddDays(5) , 100 },
{dt.AddDays(6) , 23 },
{dt.AddDays(11) , 23 },
{dt.AddDays(19) , 35 },
{dt.AddDays(35) , 288 }, }) }
});
EDITAR: Cómo hacerlo de forma dinámica:
object[,] data1 = new object[Dt.Rows.Count, 2];
for (int i = 0; i < Dt.Rows.Count; i++)
{
data1[i, 0] = Dt.Rows[i]["IncDate"];
data1[i, 1] = Dt.Rows[i]["IncCost"];
}
object[,] data2 = new object[Dt2.Rows.Count, 2];
for (int i = 0; i < Dt2.Rows.Count; i++)
{
data2[i, 0] = Dt2.Rows[i]["ExpDate"];
data2[i, 1] = Dt2.Rows[i]["ExpCost"];
}
Highcharts chart = new Highcharts("graph")
.SetTitle(new Title { Text = "Incoming Stats" })
.SetXAxis(new XAxis { Type = AxisTypes.Datetime })
.SetYAxis(new YAxis { Title = new YAxisTitle { Text = "Amount Incoming" } })
.SetSeries(new[]
{
new Series { Name = "inc", Data = new Data(data1) },
new Series { Name = "exp", Data = new Data(data2) }
});
Datos recuperados de la base de datos:
Estoy creando un gráfico DotNet.Highcharts que usa datos de dos tablas: Gastos e Incomiones. Estoy usando una declaración de SQL para crear una DataTable
para cada uno. El primero (para Incomings) llamado Dt
contiene IncCost
e IncDate
. El segundo (para Gastos) llamado Dt2
contiene ExpCost
y ExpDate
.
Puedo trazar IncCost
contra IncDate
y ExpCost
contra ExpDate
. El problema surge cuando trato de concatenar IncDate
y ExpDate
(final) ya que el costo de IncCost
y ExpCost
está trazando contra la posición de la fecha en (final), y no la fecha real con la que está relacionado.
Estas son las llamadas que uso para crear cada DataTable:
SqlDataAdapter Adp = new SqlDataAdapter("select CONVERT(DATETIME, IncDate, 103) AS IncDate, SUM(IncCost) AS IncCost from Incomings GROUP BY CONVERT(DATETIME, IncDate, 103) ORDER BY CONVERT(DATETIME, IncDate, 103)", con);
SqlDataAdapter Adp2 = new SqlDataAdapter("select CONVERT(DATETIME, ExpDate, 103) AS ExpDate, SUM(ExpCost) AS ExpCost from Expenditures GROUP BY CONVERT(DATETIME, ExpDate, 103) ORDER BY CONVERT(DATETIME, ExpDate, 103)", con);
Aquí está el código para llamar a cada uno de estos de la tabla de datos
var dateArr = Dt.AsEnumerable().Select(r => r.Field<DateTime>("IncDate")).ToArray();
var objectArr = Dt.AsEnumerable().Select(r => r.Field<object>("IncCost")).ToArray();
var dateArr2 = Dt2.AsEnumerable().Select(r => r.Field<DateTime>("ExpDate")).ToArray();
var objectArr2 = Dt2.AsEnumerable().Select(r => r.Field<object>("ExpCost")).ToArray();
var res = dateArr.Concat(dateArr2).ToArray();
var final = res.Select(d => d.ToString(@"dd//MM//yyyy")).ToArray();
Y aquí está el código que uso para crear mi Highchart:
Highcharts chart = new Highcharts("graph")
.SetTitle(new Title { Text = "Incoming Stats" })
.SetXAxis(new[] { new XAxis { Categories = final } })
.SetYAxis(new YAxis { Title = new YAxisTitle { Text = "Amount Incoming" } })
.SetSeries(new[]
{
new Series { Name = "inc", Data = new Data(objectArr)},
new Series { Name = "exp", Data = new Data(objectArr2) }
});
Como puede ver, las series se están creando pero se trazan contra el número en la matriz, y no contra la fecha a la que se debe vincular.
No estoy seguro de cuán cerca o lejos estoy de una solución, pero cualquier ayuda es apreciada. Aquí está mi tabla de datos entrantes
Aquí está mi tabla de datos de gasto
Genuinamente no sé cómo hacer esto. cualquier información es muy apreciada