Generar gráficos dinámicamente

Gracias a este truco de asp.net podrás generar gráficos dinámicos de forma rápida y sencilla.
Este gráfico está basado en un array de valores. En este array se almacenan los valores y las fechas, para poder sacar un gráfico en condiciones en 2D parecido al siguiente:


El código fuente para generar el gráfico es el siguiente:

Imports System.Drawing
System.Drawing
Imports System.Drawing.Imaging
System.Drawing.Imaging
Public Class graph
Class graph
Inherits System.Web.UI.Page
Region " Código generado por el Diseñador de Web Forms "
'El Diseñador de Web Forms requiere esta llamada.
<;System.Diagnostics.DebuggerStepThrough()>; Private Sub InitializeComponent()
Private Sub InitializeComponent()
End Sub
'NOTA: el Diseñador de Web Forms necesita la siguiente declaración del marcador de posición.
'No se debe eliminar o mover.
Private designerPlaceholderDeclaration As System.Object
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: el Diseñador de Web Forms requiere esta llamada de método
'No la modifique con el editor de código.
InitializeComponent()

End Sub
End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim objBitmap As New Bitmap(700, 200)
Dim objGraphic As Graphics = Graphics.FromImage(objBitmap)
Dim orange As New SolidBrush(Color.Orange)
Dim whiteBrush As New SolidBrush(Color.White)
Dim lineColor As New Pen(Color.Blue, 2)
objGraphic.FillRectangle(whiteBrush, 0, 0, 700, 200)

objGraphic.DrawLine(lineColor, New Point(0, 190), New Point(700, 190))
New Point(0, 190), New Point(700, 190))
objGraphic.DrawLine(lineColor, New Point(5, 5), New Point(5, 195))
New Point(5, 5), New Point(5, 195))
Dim l_arr As New ArrayList
'inserción en el array de valores para el ejemplo
l_arr.Add("800")
l_arr.Add("01/01/07")
l_arr.Add("500")
l_arr.Add("02/01/07")
l_arr.Add("1000")
l_arr.Add("03/01/07")
l_arr.Add("200")
l_arr.Add("03/01/07")
l_arr.Add("1000")
l_arr.Add("03/01/07")
l_arr.Add("1300")
l_arr.Add("03/01/07")
l_arr.Add("1000")
l_arr.Add("03/01/07")
l_arr.Add("1000")
l_arr.Add("03/01/07")
l_arr.Add("1000")
l_arr.Add("03/01/07")
l_arr.Add("1000")
l_arr.Add("03/01/07")
Dim i As Int32 = 0
Dim pos As Int32 = 0
Dim PointValue As New PointF(-30, 0)
Dim PointDate As New PointF(-30, 190)
Dim objFont As New Font("Verdana", 10)
Dim FontDate As New Font("Verdana", 7)
Dim wb2 As New SolidBrush(Color.Black)
Dim x As Int32 = -50
Dim maxValue As Int32 = 0
'calculo del máximo valor de la gráfica
i = 0

While i <; l_arr.Count
If l_arr(i) >; maxValue Then
maxValue = l_arr(i)

End If
i += 2

End While
'creación de todos los rectángulos de la gráfica
i = 0

While i <; l_arr.Count
x += 70

Dim aux As Int32
aux = (l_arr(i) * 189) / (maxValue + 200)

objGraphic.FillRectangle(orange, x, 189 - aux, 40, aux)

PointValue.X = x

PointDate.X = x - 10

objGraphic.DrawString(l_arr(i).ToString, objFont, wb2, PointValue)

objGraphic.DrawString(l_arr(i + 1).ToString, FontDate, wb2, PointDate)

i += 2
End While
Response.ContentType = "image/gif"
objBitmap.Save(Response.OutputStream, ImageFormat.Gif)
End Sub
End Class

Puedes descargarte todo el ejemplo desde aquí

Compartir

Comentarios

Richard Karl

01/3/2007
Muy interesante, algo parecido usaba pero con imagenes, mi pregunta es: como asignar un nombre a la pagina? Es decir dado que la imagen se genera en una pagina page.aspx, para usarla desde otra pagina se hace con el tag IMG SRC=page.aspx, y al momento de descargar la imagen se llama page.aspx, hay un metodo de poner un nombre especifico segun el grafico?

obynet

01/3/2007
regular, pq?
pq no se puede asignar mas valores de los que estan contemplados en el arreglo, por que simplemente no se ven es decir,no se reajusta las barras a la cantidad de datos

Damian

18/8/2009
Muy bueno
Baje el codigo y lo converti al framework 2.0 y funciono correctamente. Era justo lo que necesitaba. Muchas Gracias

fabian

28/11/2010
doble grafica
hola amigo ke tal estube leiendo tu aporte y me fue muy util solamente tengo una pregunta como puevo visualizar o crear 2 graficas o mas en una sola hoja es decir ke me muestre 3 graficos a la ves o 2 si se puede?? de ser asi como hacerlo, de antemano agradesco tu ayuda y muchas gracias por tu publicacion