Uso de gganimate de CRAN a través de R-script para visualizar un componente animado

Un usuario Pregunto ✅

shizar115

Estimados,

He estado intentando crear paneles animados a través de Power BI y mi preferencia es R-script ya que me da un buen control.
Parece que implementar componentes animados no es tan sencillo como lo sería en un servidor brillante. Creé mi código completo en R-Studio y estoy seguro de que el código es correcto ya que obtengo el resultado correcto. También estoy seguro de que todas las bibliotecas necesarias están incluidas en mi script:

# The following code to create a dataframe and remove duplicated rows is always executed and acts as a preamble for your script: 

# dataset <- data.frame(sumed2, year, weeknumber)
# dataset <- unique(dataset)

# Paste or type your script code here:
library(lubridate)
library(magrittr)
library(dplyr)
library(tidyverse)
library(odbc)
library(DBI)
library(ggplot2)
library(gganimate)
library(transformr)
library(tweenr)
dataset$year<-NULL
dataset$weeknumber<-NULL

ggplot(dataset,aes(x=timed, y=sumed2, group=yeared, colour=yeared)) +
  geom_line() +transition_time(timed) +
  
  geom_segment(aes(xend=max(timed), yend = sumed2), linetype=2, colour="blue") +
  geom_point(size = 3) + 
  geom_text(aes(x = max(timed)+.1, label = sprintf("%5.0f", sumed2)), hjust=0) +
  transition_reveal(timed) + 
  view_follow(fixed_y = TRUE)+
  coord_cartesian(clip = 'off') + 
  labs(title="Active in Jan", y = 'Individual Active') +
  enter_drift(x_mod = -1) + exit_drift(x_mod = 1) +
  theme(panel.border = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        axis.line = element_line(colour = "black"),
        plot.margin = margin(1.5, 40, 5.5, 5.5))

Después de ejecutar esto en Power BI, el sistema operativo Windows intenta abrir la salida por alguna razón como esta:

shizar115_0-1605897046600.png

y Power BI muestra este mensaje:

shizar115_1-1605897081404.pngshizar115_2-1605897094386.png

Aquí están los detalles copiados:

Feedback Type: Frown (Error) Timestamp: 2020-11-20T18:21:04.9231924Z Local Time: 2020-11-20T10:21:04.9231924-08:00 Session ID: 9fb6827a-32d2-48f6-aa96-b418c3687ca3 Release: November 2020 Product Version: 2.87.762.0 (20.11) (x64) Error Message: No image was created. The R code didn't result in creation of any visuals. Make sure your R script results in a plot to the R default device. Stack Trace: Microsoft.PowerBI.ExploreServiceCommon.ScriptHandlerException: No image was created. The R code didn't result in creation of any visuals. Make sure your R script results in a plot to the R default device. at Microsoft.PowerBI.Client.Windows.R.RScriptHandler.GenerateVisual(ScriptHandlerOptions options) at Microsoft.PowerBI.ExploreServiceCommon.ScriptVisualCommandFlow.RunInternal(Stream dataShapeResultStream, QueryBindingDescriptor& bindingDescriptor) at Microsoft.PowerBI.ExploreServiceCommon.ScriptVisualCommandFlow.Run(Stream dataShapeResultStream, QueryBindingDescriptor& bindingDescriptor) at Microsoft.PowerBI.ExploreHost.SemanticQuery.ExecuteSemanticQueryFlow.TransformDataShapeResult(QueryCommand transformCommand, SemanticQueryDataShapeCommand command, Stream dataShapeResultStream, QueryBindingDescriptor& bindingDescriptor) at Microsoft.PowerBI.ExploreHost.SemanticQuery.ExecuteSemanticQueryFlow.ExecuteDataQuery(IQueryResultDataWriter queryResultDataWriter, EngineDataModel engineDataModel, DataQuery query, Int32 queryId, ServiceErrorStatusCode& serviceErrorStatusCode, CancellationToken cancelToken) at Microsoft.PowerBI.ExploreHost.SemanticQuery.ExecuteSemanticQueryFlow.ProcessAndWriteSemanticQueryCommands(IQueryResultsWriter queryResultsWriter, IList`1 queries, HashSet`1 pendingQueriesToCancel, EngineDataModel engineDataModel) Invocation Stack Trace: at Microsoft.Mashup.Host.Document.ExceptionExtensions.GetCurrentInvocationStackTrace() at Microsoft.Mashup.Client.UI.Shared.StackTraceInfo..ctor(String exceptionStackTrace, String invocationStackTrace, String exceptionMessage) at Microsoft.PowerBI.Client.Windows.ErrorHostService.GetErrorDetails(ShowErrorDialogArgs args) at Microsoft.PowerBI.Client.Windows.ErrorHostService.<>c__DisplayClass3_1.b__1() at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) at System.Delegate.DynamicInvokeImpl(Object[] args) at System.Windows.Forms.Control.InvokeMarshaledCallbackDo(ThreadMethodEntry tme) at System.Windows.Forms.Control.InvokeMarshaledCallbackHelper(Object obj) at System.Windows.Forms.Control.InvokeMarshaledCallback(ThreadMethodEntry tme) at System.Windows.Forms.Control.InvokeMarshaledCallbacks() at System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous) at System.Windows.Forms.Control.Invoke(Delegate method, Object[] args) at System.Windows.Forms.WindowsFormsSynchronizationContext.Send(SendOrPostCallback d, Object state) at Microsoft.PowerBI.Client.Windows.Services.UIBlockingService.AllowModalDialogs(Action action) at Microsoft.PowerBI.Client.Windows.ErrorHostService.<>c__DisplayClass3_0.<b__0>d.MoveNext() at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start[TStateMachine](TStateMachine& stateMachine) at Microsoft.PowerBI.Client.Windows.ErrorHostService.<>c__DisplayClass3_0.b__0() at Microsoft.Mashup.Host.Document.SynchronizationContextExtensions.<>c__DisplayClass1_0`1.b__0() at Microsoft.Mashup.Host.Document.SynchronizationContextExtensions.<>c__DisplayClass0_1.b__0(Object null) at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) at System.Delegate.DynamicInvokeImpl(Object[] args) at System.Windows.Forms.Control.InvokeMarshaledCallbackDo(ThreadMethodEntry tme) at System.Windows.Forms.Control.InvokeMarshaledCallbackHelper(Object obj) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Windows.Forms.Control.InvokeMarshaledCallback(ThreadMethodEntry tme) at System.Windows.Forms.Control.InvokeMarshaledCallbacks() at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) at System.Windows.Forms.Form.ShowDialog(IWin32Window owner) at Microsoft.Mashup.Client.UI.Shared.WindowManager.ShowModal[T](T dialog, Func`1 showModalFunction) at Microsoft.PowerBI.Client.Program.<>c__DisplayClass4_0.b__1() at Microsoft.PowerBI.Client.Windows.IExceptionHandlerExtensions.<>c__DisplayClass3_0.b__0() at Microsoft.Mashup.Host.Document.ExceptionHandlerExtensions.HandleExceptions(IExceptionHandler exceptionHandler, Action action) at Microsoft.PowerBI.Client.Program.Main(String[] args)

Agradecería que alguien me ayude con esto.
La muestra de mis datos se ve así:

shizar115_0-1605897475824.png

Saludos,
Shizar

mahoneypat

En respuesta a shizar115

No estoy seguro de lo que está pasando. La imagen que veo es estática y sospecho que inició su navegador cuando estaba devolviendo html. Para ver el objeto visual animado en su página de informe de Power BI, sospecho que necesitará crear un objeto visual personalizado siguiendo los pasos que se describen aquí.

https://towardsdatascience.com/custom-html-visuals-in-power-bi-using-r-2b0494894ff

Aquí está el gráfico estático que veo con sus datos de ejemplo.

mahoneypat_0-1605986978197.png

Se adjunta el pbix, por si te resulta de utilidad.

Saludos,

Palmadita

shizar115

Hola @mahoneypat,

Finalmente tuve tiempo de seguir las instrucciones que me indicó.
En primer lugar, gracias por proporcionarnos eso, no estoy seguro de cómo lo supiste.
En segundo lugar, eso solo funciona para tramadamente gráficos, por lo que no gganimate. cuando cambié ggplotly al final del código a animate (), el error en Power BI decía que Power BI no es compatible con los elementos animados de gganimate. Ahí lo tenemos entonces, Power BI no admite animaciones hechas con R. No pude hacer lo mismo con Python ya que requiere una licencia Pro.

El problema no se resuelve, pero supongo que el tema se puede cerrar 🙂

Saludos cordiales,
Shizar

shizar115

Hola @mahoneypat,

Sí, absolutamente extraño. Funciona para un gráfico normal y aquí incluí una imagen para el mismo conjunto de datos y gráfico, pero sin transición:

shizar115_0-1605990774625.png

Saludos,
Shizar

shizar115

Hola @mahoneypat,

¿Puede compartir el conjunto de datos que está utilizando para generar el objeto visual?
Editar: vi el conjunto de datos en su archivo .pbix:

shizar115_1-1605987445416.png

También ejecuté el archivo .pbix y esto es lo que veo:

shizar115_0-1605987318884.png

¿Tiene algo que ver con no tener una licencia PRO?

Saludos,
Shizar

mahoneypat

En respuesta a shizar115

No se necesita licencia profesional, ya que todo está disponible con Power BI Desktop. ¿El visual R funciona para usted con R más simple?

parcela (1,1)

Si no, es algo con su configuración de R. Si es así, no estoy seguro de qué está pasando.

Saludos,

Palmadita

shizar115

Hola pat

Gracias por responderme.
En R-Studio, esto es lo que obtengo con el mismo conjunto de datos y código:

https://gph.is/g/4DeMxdO

Revisé Power BI y no hay agregación activa (verifiqué los tres parámetros):

resume.PNG

La razón de esas dos declaraciones NULL se debe al hecho de que mi conjunto de datos en realidad tiene esas dos columnas adicionales y las guardé en el conjunto de datos para comparar los valores procesados ​​con los sin procesar (utilicé as.numeric () ya que ggaimate requiere valores numéricos pero el las columnas sin procesar eran en realidad una cadena). Así que quería limpiarlos. Después de eliminar esas declaraciones NULL, el problema sigue ahí.

Deseo señalar que el conjunto de datos en sí se generó utilizando una función agregada con un script R. Así que agregué ungroup () al final y eso tampoco lo solucionó.
Presté más atención y vi los símbolos SIGMA junto a los nombres de los campos y, después de 20 minutos, descubrí que el resumen está activo de forma predeterminada. Los tutoriales no fueron útiles para ubicar la pestaña correcta para deshabilitar eso, finalmente lo encontré aquí:

disable.PNG

Después de eso, el problema persiste.

También probé una llamada explícita a la animación como esta:

animate(p, height = 800, width =800,fps=10)

Sigo sin suerte …

mahoneypat

En respuesta a shizar115

No estoy seguro de lo que está pasando. La imagen que veo es estática y sospecho que inició su navegador cuando estaba devolviendo html. Para ver el objeto visual animado en su página de informe de Power BI, sospecho que necesitará crear un objeto visual personalizado siguiendo los pasos que se describen aquí.

https://towardsdatascience.com/custom-html-visuals-in-power-bi-using-r-2b0494894ff

Aquí está el gráfico estático que veo con sus datos de ejemplo.

mahoneypat_0-1605986978197.png

Se adjunta el pbix, por si te resulta de utilidad.

Saludos,

Palmadita

shizar115

Hola @mahoneypat,

Gracias por responderme.
En R-Studio, esto es lo que obtengo con el mismo conjunto de datos y código:

https://gph.is/g/4DeMxdO

Revisé Power BI y no hay agregación activa (verifiqué los tres parámetros):

resume.PNG

La razón de esas dos declaraciones NULL se debe al hecho de que mi conjunto de datos en realidad tiene esas dos columnas adicionales y las guardé en el conjunto de datos para comparar los valores procesados ​​con los sin procesar (utilicé as.numeric () ya que ggaimate requiere valores numéricos pero el las columnas sin procesar eran en realidad una cadena). Así que quería limpiarlos. Después de eliminar esas declaraciones NULL, el problema sigue ahí.

Deseo señalar que el conjunto de datos en sí se generó utilizando una función agregada con un script R. Así que agregué ungroup () al final y eso tampoco lo solucionó.
Presté más atención y vi los símbolos SIGMA junto a los nombres de los campos y, después de 20 minutos, descubrí que el resumen está activo de forma predeterminada. Los tutoriales no fueron útiles para ubicar la pestaña correcta para deshabilitar eso, finalmente lo encontré aquí:

disable.PNG

Después de eso, el problema persiste.

También probé una llamada explícita a la animación como esta:

animate(p, height = 800, width =800,fps=10)

Sigo sin suerte …

mahoneypat

Su código resultó en un gráfico para mí (una vez que cargué todos los paquetes enumerados). Asegúrese de que para cada columna del objeto visual no se aplique ninguna agregación predeterminada. No vi ninguna animación, pero parece que aún no has usado ninguna función gganimate. ¿Está bien? Tengo curiosidad por saber si funciona en Power BI. Además, ¿por qué tiene los pasos <- NULL en lugar de simplemente no incluir esas columnas en el visual R?

mahoneypat_0-1605974318097.png

Saludos,

Palmadita

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *