Gráficos Interactivos de Producción en R con Plotly

A short description of the post.

Author
Published

March 31, 2025

📌 Gráficos Interactivos de Producción en R con Plotly 📊🔥

🔥 Plotly es una poderosa librería de visualización interactiva que permite explorar datos de producción petrolera de manera dinámica.

📌 En esta publicación aprenderás a:

✅ Cargar datos de producción y manipularlos en R.

✅ Crear gráficos interactivos en Plotly para visualizar producción de pozos.

✅ Implementar botones personalizados para cambiar entre distintas visualizaciones.

🟢 Instalación y Carga de Librerías

Ver código
# Instalamos y cargamos las librerías necesarias.
#install.packages("plotly")
#install.packages("dplyr")
#install.packages("lubridate")
#install.packages("DT")
#install.packages("readr")

library(plotly)
library(dplyr)
library(lubridate)
library(DT)
library(readr)

🟢 Cargamos los Datos de Producción de un archivo CSV

Ver código
# Cargamos los datos del archivo Production_Data.csv.
file_path <- "Production_Data.csv"
prod_data <- read.csv(file_path)

# Convertimos la columna de fecha al formato adecuado
prod_data$Date <- as.Date(prod_data$Date, format = "%d/%m/%Y")

# Exploramos los datos disponibles
datatable(prod_data)

🟢 Primer Ejemplo: Filtrar Producción por Pozo

🚀 Características del Gráfico Interactivo

✅ Selección de pozos: Un menú desplegable permite cambiar entre pozos sin necesidad de generar múltiples gráficos.

✅ Interactividad: Se pueden explorar los datos de producción en distintos momentos con plotly.

✅ Visualización clara: Uso de add_markers() para representar los valores de producción de forma más precisa.

Este enfoque proporciona una herramienta eficiente para analizar la evolución de la producción de diferentes pozos dentro de un mismo campo petrolero. 📈🔥

Ver código
wells <- list()
for(i in 1:length(unique(prod_data$Well))){
  
  wells[[i]] <- list(method = "restyle",
               args = list("transforms[0].value", unique(prod_data$Well)[i]),
               label = unique(prod_data$Well)[i])
  
}

prod_data$Well <- as.factor(prod_data$Well)

fig <- prod_data  %>%
    filter(Fluid == "Qo") %>%
    plot_ly(transforms = list(
      list(
        type = 'filter',
        target = ~Well,
        operation = '=',
        value = unique(prod_data$Well)[1]
      )
  )) %>%  
  add_markers(
    x = ~Date, 
    y = ~Rate ) %>% 
  layout(
    updatemenus = list(
      list(
        type = 'dropdown',
        active = 0,
        buttons = wells
      )
    )
  )

fig

📌 Explicación:

✔ Cómo funciona:

  • Se extrae la lista de pozos únicos desde prod_data$Well.

  • Para cada pozo, se genera un botón con la acción “restyle”, que actualizará el filtro del gráfico.

  • Se filtran los datos para visualizar únicamente la producción de petróleo (Fluid == “Qo”).

  • Se crea un plotly con la transformación “filter” que permite seleccionar pozos.

  • Se añaden puntos (add_markers) para representar la producción diaria.

  • Se configura un menú desplegable (updatemenus) para cambiar entre distintos pozos.

🟢 Segundo Ejemplo: Uso de Botones Personalizados

Vamos a crear botones personalizados para alternar entre producción de petróleo (Qo) y gas (Qg).

Ver código
# Agrupar datos por fecha y sumar tasas de producción
df_campo <- prod_data %>%
  group_by(Date, Fluid) %>%
  summarise(Total_Rate = sum(Rate, na.rm = TRUE), .groups = "drop")

# Crear el gráfico de líneas con botones interactivos
plot_buttons <- plot_ly(data = df_campo, x = ~Date, y = ~Total_Rate, type = 'scatter', mode = 'lines',
                        color = ~Fluid, text = ~paste("<br>Tipo:", Fluid)) %>%
  layout(
    title = "Comparación de Producción de Petróleo y Gas",
    xaxis = list(title = "Fecha"),
    yaxis = list(title = "Producción (bbl/d o Mcf/d)"),
    updatemenus = list(
      list(
        type = "buttons",
         x = 1.15,  # Ajusta la posición horizontal (más a la derecha del gráfico)
        y = 1,  # Posición superior
        xanchor = "left",  # Ancla desde la izquierda
        yanchor = "bottom",  # Ancla en la parte superior
        buttons = list(
          list(method = "update",
               args = list(list(visible = list(df_campo$Fluid == "Qo", FALSE, FALSE))),
               label = "Petróleo"),
          list(method = "update",
               args = list(list(visible = list(FALSE, df_campo$Fluid == "Qg", FALSE))),
               label = "Gas"),
          list(method = "update",
               args = list(list(visible = TRUE)),
               label = "Todos")
        )
      )
    )
  )

# Mostrar el gráfico
plot_buttons

📌 Explicación:

🔹 updatemenus con type = “buttons” → Agrega botones para alternar entre petróleo y gas.

🔹 args = list(list(visible = prod_data$Fluid == “Qo”)) → Filtra solo producción de petróleo.

🔹 args = list(list(visible = prod_data$Fluid == “Qg”)) → Filtra solo producción de gas.

🟢 Conclusión 🎯

🔹 Plotly permite crear gráficos interactivos de producción petrolera de forma sencilla.

🔹 Los menús desplegables y botones personalizados mejoran la exploración de datos.

🔹 Es una herramienta ideal para análisis de producción en la industria petrolera.

🟢 Recursos Adicionales 📚

📌 Documentación Oficial: https://plotly.com/r/

📌 Ejemplos de Plotly en R: https://rpubs.com/