Relleno de áreas con color en gráficos XY-Dispersión

29/12/2003 - 12:26 por manuel | Informe spam
Saludos al grupo y felices.

Tengo una lista de pares de puntos (x, y) que represento en un gráfico tipo
XY-Dispersión.
La figura resultante es una línea poligonal cerrada. (No la he suavizado).
Quisiera rellenar su interior con algún colorido sólido, (rojo, azul, u
otros).
¿Es posible hacer esto?

Imaginad una lista de cinco pares de puntos (X, Y):
(1, 1), (5, 1), (5, 5), (1, 5), (1, 1)
Define un cuadrado de lado 4 apoyado en (1, 1).
Bueno, pues ¿Cómo puedo rellenar su interior de azul?
¿Y si es un triángulo o un pentágono?

Saludos, y gracias.
Manuel.
 

Leer las respuestas

#1 Héctor Miguel
03/01/2004 - 10:26 | Informe spam
hola, manuel !

... pares de puntos (x, y) que represento en un grafico tipo XY ... linea poligonal cerrada. (No la he suavizado).
... rellenar su interior con algun colorido solido, (rojo, azul, u otros). ¿Es posible ...?
... una lista de cinco pares de puntos (X, Y): (1, 1), (5, 1), (5, 5), (1, 5), (1, 1)
... un cuadrado de lado 4 apoyado en (1, 1) ... ¿Y si es un triangulo o un pentagono? [...]



=> ¡ NO la 'suavices' !!! => no 'funcionaria' lo siguiente :))
la pagina de Jon Peltier es una magistral 'galeria de graficas', incluye una combinacion de XY-Disp + Area
la puedes consultar en: http://peltiertech.com/Excel/Charts...Chart.html
'aunque'... la 'combinacion' [simulacion] del grafico de areas 'llega' hasta la base del eje 'X' [no creo que 'te sirva'] :((
'sin embargo'... el mismo desarrollo el siguiente algoritmo para 'cubrir' un poligono_XY-Disp con una figura 'poli-linea'
=> es lo 'mas cercano' a la situacion que necesitas 'resolver'
[yo solo le 'agregue' una 'semi-inversion' a los colores de la figura con los colores del area de trazado del grafico] :))

saludos,
hector.

=> selecciona el grafico 'en cuestion'... y ejecuta la siguiente rutina.
en un modulo de codigo 'normal' ==Sub FiguraEnPoligonoXY()
Dim Graf As Chart, Ser As Series, Pts_N As Integer, Pts_L As Integer, Fig As Shape, _
Nodo_X As Double, Min_X As Double, Max_X As Double, Izq_X As Double, Ancho_X As Double, _
Nodo_Y As Double, Min_Y As Double, Max_Y As Double, Arr_Y As Double, Alto_Y As Double
Set Graf = ActiveChart: On Error Resume Next: Graf.Shapes(1).Delete
Izq_X = Graf.PlotArea.InsideLeft: Arr_Y = Graf.PlotArea.InsideTop
Ancho_X = Graf.PlotArea.InsideWidth: Alto_Y = Graf.PlotArea.InsideHeight
Min_X = Graf.Axes(1).MinimumScale: Max_X = Graf.Axes(1).MaximumScale
Min_Y = Graf.Axes(2).MinimumScale: Max_Y = Graf.Axes(2).MaximumScale
Set Ser = Graf.SeriesCollection(1): Pts_N = Ser.Points.Count
Nodo_X = Izq_X: Nodo_Y = Arr_Y + (Max_Y - Ser.Values(Pts_N)) * Alto_Y / (Max_Y - Min_Y)
With Graf.Shapes.BuildFreeform(msoEditingAuto, Nodo_X, Nodo_Y)
For Pts_L = 1 To Pts_N
Nodo_X = Izq_X + (Ser.XValues(Pts_L) - Min_X) * Ancho_X / (Max_X - Min_X)
Nodo_Y = Arr_Y + (Max_Y - Ser.Values(Pts_L)) * Alto_Y / (Max_Y - Min_Y)
.AddNodes msoSegmentLine, msoEditingAuto, Nodo_X, Nodo_Y
Next
Nodo_X = Izq_X - Min_X: Nodo_Y = Arr_Y + (Max_Y - Ser.Values(Pts_N)) * Alto_Y / (Max_Y - Min_Y)
.AddNodes msoSegmentLine, msoEditingAuto, Nodo_X, Nodo_Y
Nodo_X = Izq_X: Nodo_Y = Arr_Y + (Max_Y - Ser.Values(1)) * Alto_Y / (Max_Y - Min_Y)
.AddNodes msoSegmentLine, msoEditingAuto, Nodo_X, Nodo_Y
Set Fig = .ConvertToShape
End With
With Fig
.Fill.ForeColor.SchemeColor = Graf.PlotArea.Fill.ForeColor.SchemeColor + 9
.Line.ForeColor.SchemeColor = Ser.Fill.ForeColor.SchemeColor + 10
End With: Set Fig = Nothing: Set Ser = Nothing: Set Graf = Nothing: SendKeys "{Esc}"
End Sub

Preguntas similares