
Usando Excel 365
Aquí hay un ejemplo en el que he estado trabajando y que se acerca bastante a lo que quiero:https://docs.google.com/spreadsheets/d/1zZiFDaUhuZAhyHm3HZkcZrUl9KEoV97N/edit?usp=sharing&ouid=108210493177158563166&rtpof=true&sd=true
Básicamente, tengo los datos A, B y C, y para cada A único con más de una entrada en la tabla, quiero trazar B frente a C en un gráfico de dispersión con una línea. Estoy diseñando una plantilla y deberá funcionar con todas las permutaciones de datos.
Lo que tengo es bastante parecido a eso con algunos problemas que no he podido solucionar:
Necesito asignar suficiente espacio para todos los valores posibles de A y B en las tablas. Este no es un gran problema, los conjuntos de datos con los que estoy trabajando en este momento son bastante pequeños, pero sería bueno si fuera completamente dinámico, capaz de manejar cualquier cantidad de valores.
La leyenda muestra entradas en blanco para todas las columnas no utilizadas de la tabla. Solo quiero que muestre las entradas para las que tengo datos.
La línea no está conectada para valores no adyacentes de B (consulte la línea 3 para ver un ejemplo). Me gustaría que estuviera conectado dentro de cada serie.
Espero que esto tenga sentido, no dudes en hacer cualquier pregunta aclaratoria.
Gracias de antemano.
Respuesta1
Esto es lo que debe hacer, hacer que todo sea dinámico (consulte la animación):
- En primer lugar, en lugar de utilizar rangos en blanco para iterar, utilice
Structured References
también conocido comoTables
--> Tabla denominada comoTable1
- Fórmulas utilizadas para Columnas
F3:G16
yJ2:O8
que se irán ampliando paulatinamente.
• Fórmula utilizada en la celdaF3
=LET(
_Data, Table1,
_A, TAKE(_Data,,1),
_Uniq, UNIQUE(_A),
HSTACK(_Uniq, COUNTIF(_A,_Uniq)))
• Fórmula utilizada en la celdaJ2
=LET(
_Data, Table1,
_A, TAKE(_Data,,1),
_B, INDEX(_Data,,2),
_C, TAKE(_Data,,-1),
_UniqA, TOROW(UNIQUE(_A)),
_UniqB, UNIQUE(_B),
_ArrayB, VSTACK("",_UniqB),
_DataBody, VSTACK(_UniqA&"A", MAKEARRAY(ROWS(_UniqB), COLUMNS(_UniqA), LAMBDA(r,c,
FILTER(_C, (INDEX(_UniqA,1,c)=_A)*(INDEX(_UniqB,r)=_B),NA())))),
HSTACK(_ArrayB, _DataBody))
La fórmula anterior también se puede definir usando LAMBDA()
--> Entonces, lo que debe hacer es envolver la fórmula anterior dentro de LAMBDA()
-->parameter_or_calculation
as array
y reemplace el Table1
as array
. Así se convierte y debe ser ingresado enrefers to
al definir el nombre como
=LAMBDA(array, LET(_Data, array, the rest continues as is)
En Excel
la hoja ingrese como:
=SCATTER_PLOT(Table1)
- Tenga en cuenta que he usado
MAKEARRAY()
unaLAMBDA()
función auxiliar en lugar de usarREDUCE()
, que también se puede usarREDUCE()
, pero es una función de recursos pesados y no será tan eficiente comoMAKEARRAY()
cuando se apilan datos.
- Al insertar el,
Scatter with smooth lines and markers
asegúrese de seleccionar el rango de datosJ2:O8
y recuerdeConnect data points with line
seleccionar elHidden and
cuadro Celdas vacías. - También lo he usado
Conditional Formatting
para las fronteras. aquí está elSobresalir.
Respuesta2
Posibles modificaciones:
Para dejar espacio para más datos:
F3
:=UNIQUE(FILTER(B:B,ISNUMBER(B:B)))
G3
:=COUNTIF(B:B,F3#)
K3
:=TRANSPOSE(F3#)
K4
:=K3# & " A"
J5
:=UNIQUE(FILTER(C:C,ISNUMBER(C:C)))
K5
:=FILTER($D:$D,($B:$B=K$3)*($C:$C=$J5),#N/A)
copiar a la región necesaria.
Es mejor usar aquí los rangos realmente necesarios, por ejemplo
=FILTER($D$1:$D$100,($B$1:$B$100=K$3)*($C$1:$C$100=$J5),#N/A)
Depende de
Chart data range
. No conozco un método para hacerlo dinámico (sin VBA). Podemos definir una fórmula que defina este rango de datos dinámicamente; sin embargo, si la usamos aquí, se calculará de inmediato y se guardará como una dirección estática.Para establecer una conexión entre puntos, debe cambiar una opción del gráfico:
Select Data Source > Hidden and Empty Cells > Connect data points with line