Gráfico de barras

Hola,
te molesto con una nueva consulta. Necesito mostrar un gráfico de barras de acuerdo a un informe de estadísticas. ¿Podrías orientarme como podría hacerlo? ¿O qué clases usar?
Desde ya muchas gracias.
Viviana

1 Respuesta

Respuesta
1
Pues mira, como lo es casi todo en la programación, existen muchas formas de lograr lo que tu quieres. Depende mucho de que tan sofisticado quieras hacer tu gráfico, si es algo simple, yo te recomendaría que lo hagas con etiquetas (Labels) o con imágenes previamente creadas, claro que tendrías que pensar bien en las fórmulas para crear las barras según los datos de tu estadística y también sería limitado a un número específico de barras. Te muestro un simple ejemplo:
Suponiendo que tienes una tabla con 4 registros y cada uno de ellos tiene una puntuación, tu quieres mostrar gráficamente es puntuación, para ellos tienes un formulario (Form1) y cuatro controles imagen (imgUno, imgDos, imgTres, imgCuatro) con la propiedad <Picture> establecida al archivo de imagen que quieres que se muestre como barra, incluso pueden ser todos diferentes. También hay un botón (btnGrafica) para sacar la gráfica.
** Evento Click de btnGrafica
** Se crea el Cursor cada vez que das Click y los datos cambian
CREATE CURSOR Tabla1 (No n(1), Puntos n(2))
FOR nCont = 1 TO 4
    APPEND BLANK
    REPLACE No WITH nCont, Puntos WITH INT(99 * RAND())
ENDFOR
nAltura = ThisForm.Height - 24
GO 1
ThisForm.imgUno.Height = Tabla1.Puntos * 2
ThisForm.imgUno.Top = nAltura - ThisForm.imgUno.Height
GO 2
ThisForm.imgDos.Height = Tabla1.Puntos * 2
ThisForm.imgDos.Top = nAltura - ThisForm.imgDos.Height
GO 3
ThisForm.imgTres.Height = Tabla1.Puntos * 2
ThisForm.imgTres.Top = nAltura - ThisForm.imgTres.Height
GO 4
ThisForm.imgCuatro.Height = Tabla1.Puntos * 2
ThisForm.imgCuatro.Top = nAltura - ThisForm.imgCuatro.Height
Otra forma de hacerlo, una más profesional, es usar un clase para manejar gráficas, pero creo que Visual FoxPro no tiene una integrada, tendrías que usar clases externas, como las de Excel, con la desventaja de que en cada computadora en la que quieres ejecutar el programa tendría que tener las librerías de excel instaladas.
Una forma de hacer esto es usando un control <OleBoundControl> y un campo
de tipo "General". Checa estos ejemplos que vienen en la carpeta de Visual Fox, estas son las rutas:
\Samples\Solution\Ole\OleGraph.scx
\Samples\Solution\Ole\Stock.scx
Por otro lado, exite una aplicación de ejemplo que muestra muchos ejemplos de las características de cada versión de Visual Fox, ejecútalo, hay cosas muy interesantes. Esta es la ruta:
\Samples\Solution\Solution.app
Espero que te sirvan de algo, si te surgen nuevas dudas con los ejemplos, dime para tratar de resolverlos (que yo tampoco he usado estas clases). Suerte.
Muchas gracias por la ayuda. Lo implementé utilizando un tipo de gráfico de excel. Ahora tengo una duda... mi gráfico es charttype = -4100, mi duda es como asignar la escala de valores, ya que genera una escala por defecto de 10000 como unidad.
Pues yo también estuve haciendo unas pruebas y me parece que la escala de valores la asigna automáticamente según el valor más alto que tengan tus datos. Existe una propiedad que indica si la escala se genera automáticamente, [AutoScaling], por predeterminado esta en verdadero (.T.).
Lamentablemente no he encontrado como modificar la escala por medio de código, checando el código generado por una macro de Excel encontré que la propiedad para eso se llama [MaximumScale], pero no se como accederla..
En tu caso en particular, me parece que no es normal que por defecto empiece en 10,000 a menos que uno de los valores de las columnas sea esa cantidad. ¿Cómo lo estas programando?
Yo seguiré investigando cuando tenga chance, y si encuentro la forma te lo diré..
Si, está bien que sea 10000 entonces, porque mi valor más alto es 30000 y solo son dos columnas. No me gusta mucho, pero lo voy a dejar así.
Otra cosa que quiero sacar del gráfico es la referencia que se encuentra a la derecha del gráfico. Es un cuadradito de color (del color de las columnas) y una referencia. Pero no quiero que salga nada de eso. Intenté poner valor vacío o no poner estas líneas pero me apareció por defecto la palabra "Este".
thisform.objeto.object.application.datasheet.range("00").value = ""
thisform.objeto.object.application.datasheet.range("01").value = ""
¿Has podido sacarlo de alguna manera?
Si, me parece que puedes utilizar las Propiedades [HasLegend] y [HasTitle] para el titulo y la leyenda, si es que ha eso te refieres, ambas son lógicas y si quieres que no aparezcan solo establecelas como falso (.F.).
ThisForm.Objeto.HasLegend = .F.
Encontré otra forma de realizar gráficas por medio de un control Ole (ocx), si quieres checarlo solo agrega un [Activex Control (Ole Control)] desde la barra de Controles de Formularios (Form Controls), en la ventana de "Insert Object" selecciona la opción "Insert Control" y busca uno que se llama "Microsoft Chart Control ...". Necesitas tener registrado el archivo "mschrt20.ocx" y debe estar en la carpeta de sistema de windows.
Solo por si lo quieres checar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas