library(ggplot2)
library(tidyr)
library(quantmod)
## Loading required package: xts
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Loading required package: TTR
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(plotly)
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
Iniciamos generando los datos
set.seed(123)
arr_1 <- matrix(rnorm(200), nrow = 50, ncol = 4)
colnames(arr_1) <- c('A', 'B', 'C', 'D')
df_1 <- as.data.frame(arr_1)
head(df_1)
## A B C D
## 1 -0.56047565 0.25331851 -0.71040656 0.7877388
## 2 -0.23017749 -0.02854676 0.25688371 0.7690422
## 3 1.55870831 -0.04287046 -0.24669188 0.3322026
## 4 0.07050839 1.36860228 -0.34754260 -1.0083766
## 5 0.12928774 -0.22577099 -0.95161857 -0.1194526
## 6 1.71506499 1.51647060 -0.04502772 -0.2803953
df_1_long <- pivot_longer(df_1, cols = c('A', 'B', 'C', 'D'), names_to = "Variable", values_to = "Valor")
df_1_long$Index <- rep(1:nrow(df_1), times = 4)
ggplot(data = df_1_long, aes(x = Index, y = Valor, color = Variable)) +
geom_line() +
theme_minimal() +
labs(x = "indice de fila", y = "Valor", title = "grafico de lineas") +
scale_color_manual(values = c("A" = "red", "B" = "blue", "C" = "green", "D" = "purple"))
Todas las variables muestran cambios significativos a lo largo del gráfico, lo que sugiere alta volatilidad o variabilidad en los datos.Además, las variables se mueven entre valores aproximados de -2 a 2. Las líneas se cruzan entre sí en varios puntos, lo que indica que el valor de las variables cambia con respecto a las demás en diferentes momentos.Por útlimo, no se observa una tendencia clara para ninguna de las variables que sugiera un comportamiento constante o predecible a lo largo del tiempo.
Ahora, carguemos unos datos de varias acciones.
library(readr)
stocks <- read_csv("C:/Users/USUARIO/Downloads/stocks.csv")
## Rows: 105 Columns: 7
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## dbl (6): GOOG, AAPL, AMZN, FB, NFLX, MSFT
## date (1): date
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
head(stocks)
## # A tibble: 6 × 7
## date GOOG AAPL AMZN FB NFLX MSFT
## <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2018-01-01 1 1 1 1 1 1
## 2 2018-01-08 1.02 1.01 1.06 0.960 1.05 1.02
## 3 2018-01-15 1.03 1.02 1.05 0.970 1.05 1.02
## 4 2018-01-22 1.07 0.980 1.14 1.02 1.31 1.07
## 5 2018-01-29 1.01 0.917 1.16 1.02 1.27 1.04
## 6 2018-02-05 0.942 0.894 1.09 0.943 1.19 1.00
library(plotly)
p <- plot_ly(data = stocks, x = ~date, y = ~AMZN, type = 'scatter', mode = 'lines',
line = list(color = 'blue')) %>%
layout(title = 'Amazon Stock Prices Over Time',
xaxis = list(title = 'Date'),
yaxis = list(title = 'Price'))
p
El gráfico muestra fluctuaciones significativas en el precio de la acción de Amazon. Se observa un pico notable donde el precio alcanza su máximo en agosto 2018 antes de una caída aguda. Por otro lado, note que después de caídas pronunciadas, el gráfico muestra recuperaciones.
fig2 <- plot_ly(data = stocks) %>%
add_trace(x = ~date, y = ~AAPL, mode = 'lines', name = 'Apple') %>%
add_trace(x = ~date, y = ~AMZN, mode = 'lines+markers', name = 'Amazon') %>%
add_trace(x = ~date, y = ~FB, mode = 'lines+markers', name = 'Facebook') %>%
add_trace(x = ~date, y = ~GOOG, mode = 'lines+markers', name = 'Google',
line = list(color = 'firebrick', width = 2, dash = 'dashdot')) %>%
layout(title = 'Stock Price data',
xaxis = list(title = 'Date'),
yaxis = list(title = 'Price'))
fig2
## No trace type specified:
## Based on info supplied, a 'scatter' trace seems appropriate.
## Read more about this trace type -> https://plotly.com/r/reference/#scatter
## No trace type specified:
## Based on info supplied, a 'scatter' trace seems appropriate.
## Read more about this trace type -> https://plotly.com/r/reference/#scatter
## No trace type specified:
## Based on info supplied, a 'scatter' trace seems appropriate.
## Read more about this trace type -> https://plotly.com/r/reference/#scatter
## No trace type specified:
## Based on info supplied, a 'scatter' trace seems appropriate.
## Read more about this trace type -> https://plotly.com/r/reference/#scatter
Todas las empresas muestran volatilidad en sus precios de acciones, con varios picos y caídas. Apple y Amazon muestran un aumento significativo en los precios de sus acciones hacia el final del gráfico, mientras que Google y Facebook muestran un crecimiento más estable o moderado.En varios puntos, las líneas se cruzan, lo que indica cambios en el desempeño relativo de las acciones. Por ejemplo, hay momentos en los que Facebook supera a Google o viceversa.
fig2 <- plot_ly(data = stocks) %>%
add_trace(x = ~date, y = ~AAPL, mode = 'lines', name = 'Apple') %>%
add_trace(x = ~date, y = ~AMZN, mode = 'lines+markers', name = 'Amazon') %>%
add_trace(x = ~date, y = ~FB, mode = 'lines+markers', name = 'Facebook') %>%
add_trace(x = ~date, y = ~GOOG, mode = 'lines+markers', name = 'Google',
line = list(color = 'firebrick', width = 2, dash = 'dashdot')) %>%
layout(
title = 'Stock Price data',
xaxis = list(
showline = TRUE,
showgrid = FALSE,
showticklabels = TRUE,
linecolor = 'rgb(204, 204, 204)',
linewidth = 2,
ticks = 'outside',
tickfont = list(family = 'Arial', size = 12, color = 'rgb(82, 82, 82)')
),
yaxis = list(
showgrid = FALSE,
zeroline = FALSE,
showline = FALSE,
showticklabels = FALSE
),
autosize = FALSE,
margin = list(
autoexpand = FALSE,
l = 100,
r = 100,
t = 100
),
showlegend = FALSE,
plot_bgcolor = 'white'
)
fig2
## No trace type specified:
## Based on info supplied, a 'scatter' trace seems appropriate.
## Read more about this trace type -> https://plotly.com/r/reference/#scatter
## No trace type specified:
## Based on info supplied, a 'scatter' trace seems appropriate.
## Read more about this trace type -> https://plotly.com/r/reference/#scatter
## No trace type specified:
## Based on info supplied, a 'scatter' trace seems appropriate.
## Read more about this trace type -> https://plotly.com/r/reference/#scatter
## No trace type specified:
## Based on info supplied, a 'scatter' trace seems appropriate.
## Read more about this trace type -> https://plotly.com/r/reference/#scatter
Este gráfico es similar anterior, en este se cambia el estilo del fondo del gráfico y los ejes.
library(gapminder)
df_us <- gapminder[gapminder$country == 'Pakistan',]
fig <- plot_ly(data = df_us, x = ~year, y = ~pop, type = 'bar',
marker = list(color = 'blue')) %>%
layout(title = 'Population of Pakistan Over Time',
xaxis = list(title = 'Year'),
yaxis = list(title = 'Population'))
# Mostrar el gráfico
fig
El gráfico de barras muestra el crecimiento de la población de Pakistán a lo largo del tiempo.Se observa un aumento constante de la población a medida que pasan los años. La población crece desde 41 millones a más de 160 millones. Este patrón de crecimiento sugiere una tasa de crecimiento poblacional significativa.
df_tips <- read_csv("C:/Users/USUARIO/Downloads/tips.csv")
## Rows: 244 Columns: 7
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (4): sex, smoker, day, time
## dbl (3): total_bill, tip, size
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
fig <- plot_ly(data = df_tips, x = ~day, y = ~tip, type = 'bar', color = ~sex,
colors = c('pink', 'lightblue')) %>%
layout(title = list(text = 'Tips by Sex on Each Day'),
xaxis = list(title = 'Day of the Week'),
yaxis = list(title = 'Tip Amount'))
fig
En cada día mostrado, los hombres parecen dar más propinas que las mujeres. Además, el domingo es el día con las propinas más altas por parte de los hombres, mientras que el sábado lo es para las mujeres. El jueves y el viernes tienen las cantidades más bajas de propinas tanto para hombres como para mujeres.Sin embargo, se observa un notable aumento en las propinas el domingo, especialmente de los hombres, en comparación con otros días.
fig <- plot_ly(data = df_tips, x = ~sex, y = ~total_bill, color = ~smoker, type = 'bar',
colors = c('blue', 'orange')) %>%
layout(title = 'Total Bill by Sex and Smoker Status',
xaxis = list(title = 'Sex'),
yaxis = list(title = 'Total Bill'),
barmode = 'group')
fig
La cantidad total de la cuenta acumulada es significativamente más alta para los hombres que para las mujeres en ambos grupos de respuesta (Sí y No). Tanto para los hombres como para las mujeres, la cuenta total es menor para los fumadores.Existe una clara disparidad en el total de la cuenta entre hombres y mujeres.
library(dplyr)
##
## ######################### Warning from 'xts' package ##########################
## # #
## # The dplyr lag() function breaks how base R's lag() function is supposed to #
## # work, which breaks lag(my_xts). Calls to lag(my_xts) that you type or #
## # source() into this session won't work correctly. #
## # #
## # Use stats::lag() to make sure you're not using dplyr::lag(), or you can add #
## # conflictRules('dplyr', exclude = 'lag') to your .Rprofile to stop #
## # dplyr from breaking base R's lag() function. #
## # #
## # Code in packages is not affected. It's protected by R's namespace mechanism #
## # Set `options(xts.warn_dplyr_breaks_lag = FALSE)` to suppress this warning. #
## # #
## ###############################################################################
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:xts':
##
## first, last
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(RColorBrewer)
df_asia <- gapminder %>%
filter(continent == "Asia", year == 2007, pop > 2e6) %>%
arrange(desc(pop))
fig <- plot_ly(df_asia, x = ~country, y = ~pop, type = 'bar',
color = ~country,
colors = RColorBrewer::brewer.pal(nlevels(df_asia$country), "Paired")) %>%
layout(title = "Population of Asian Countries in 2007",
xaxis = list(title = "Country"),
yaxis = list(title = "Population"),
showlegend = FALSE)
fig
Las barras más altas corresponden a China e India, indicando que sus poblaciones son las más altas entre los países listados, superando ampliamente los mil millones de personas. Otros países tienen poblaciones significativamente menores, como se muestra en las barras mucho más cortas.
fig <- plot_ly(df_asia, x = ~country, y = ~pop, type = 'bar',
color = ~country,
colors = RColorBrewer::brewer.pal(nlevels(df_asia$country), "Paired")) %>%
layout(title = "Population of Asian Countries in 2007",
xaxis = list(title = "Country", tickangle = -45),
yaxis = list(title = "Population"),
showlegend = FALSE)
fig <- fig %>% layout(uniformtext = list(minsize = 8))
fig
Este gráfico es similar al anterior, lo que cambia es la orientación de los nombres de los países.
data(iris)
head(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
fig <- plot_ly(data = iris, x = ~Sepal.Width, y = ~Sepal.Length,
type = 'scatter', mode = 'markers',
color = ~Species, size = ~Petal.Length,
hoverinfo = 'text',
text = ~paste('Petal Width:', Petal.Width))
fig
Iris setosa (en azul) tiende a tener una anchura de sépalo mayor con una longitud de sépalo más corta comparada con las otras dos especies. Iris versicolor (en naranja) está distribuido más centralmente en el gráfico, indicando un rango intermedio tanto en la anchura como en la longitud del sépalo. Iris virginica (en verde) tiende a tener una longitud de sépalo mayor, y se distribuye más hacia la derecha del gráfico, indicando una anchura de sépalo generalmente más estrecha en comparación con setosa pero similar o ligeramente mayor que versicolor.
fig <- plot_ly(data = iris, x = ~Sepal.Width, y = ~Sepal.Length,
type = 'scatter', mode = 'markers',
marker = list(color = ~Sepal.Width,
size = 10,
line = list(color = 'black', width = 2),
showscale = TRUE),
text = ~Species)
fig
No se observa una relación lineal entre el ancho y el largo del sépalo.
set.seed(123)
x <- rnorm(100000)
y <- rnorm(100000)
color <- rnorm(100000)
fig <- plot_ly(x = x, y = y, type = 'scattergl', mode = 'markers',
marker = list(color = color,
colorscale = 'Viridis',
line = list(width = 1)))
fig