Gapminder

library(pacman)
p_load(tidyverse, gapminder)
gapminder
gapminder %>% 
  ggplot(aes(x = gdpPercap, y = lifeExp )) + 
  geom_point()

gapminder %>% 
  ggplot(aes(x = log(gdpPercap), y = log(lifeExp))) + 
  geom_point()

gapminder %>% 
  ggplot(aes(x = log(gdpPercap), y = log(lifeExp), color = continent, size = pop)) + 
  geom_point() +
  geom_text(aes(label=ifelse(country=="United States",as.character(country),'')),hjust=-0.2,vjust=0)

Faceting

gapminder
gapminder %>%  
  ggplot(aes(x = log(gdpPercap), y = log(lifeExp), color = continent, size = pop)) + 
  geom_point() +
  facet_wrap(~year) 

Plot.ly

library(plotly)
p <- gapminder %>%  
  ggplot(aes(x = log(gdpPercap), y = log(lifeExp), color = continent, size = pop)) + 
  geom_point() +
  facet_wrap(~year)
ggplotly(p)

Plot.ly faceting

library(plotly)
p <- gapminder %>%  
  ggplot(aes(x = log(gdpPercap), y = log(lifeExp), color = continent, size = pop)) + 
  geom_point() +
  facet_wrap(~year)
ggplotly(p)

Plot.ly annimation with ggplot.

To learn about Plot.ly R and Plot.ly ggplot.

The plot.ly book is an excellent place to start to learn about use of annimation plot.ly chapter 5.

gg <- gapminder %>% ggplot(aes(log(gdpPercap), log(lifeExp), color = continent)) +
  geom_point(aes(size = pop, frame = year, ids = country)) 
Ignoring unknown aesthetics: frame, ids
ggplotly(gg)
LS0tCnRpdGxlOiAiU3RhdC4gNjUxIFdlbGNvbWUiCmF1dGhvcjogIlByb2YuIEVyaWMgQS4gU3Vlc3MiCmRhdGU6ICIxMC8xMi8yMDIwIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIHBkZl9kb2N1bWVudDogZGVmYXVsdAogIHdvcmRfZG9jdW1lbnQ6IGRlZmF1bHQKLS0tCgojIEdhcG1pbmRlcgoKYGBge3J9CmxpYnJhcnkocGFjbWFuKQpwX2xvYWQodGlkeXZlcnNlLCBnYXBtaW5kZXIpCgpnYXBtaW5kZXIKYGBgCgoKYGBge3J9CmdhcG1pbmRlciAlPiUgCiAgZ2dwbG90KGFlcyh4ID0gZ2RwUGVyY2FwLCB5ID0gbGlmZUV4cCApKSArIAogIGdlb21fcG9pbnQoKQoKYGBgCgoKYGBge3J9CmdhcG1pbmRlciAlPiUgCiAgZ2dwbG90KGFlcyh4ID0gbG9nKGdkcFBlcmNhcCksIHkgPSBsb2cobGlmZUV4cCkpKSArIAogIGdlb21fcG9pbnQoKQoKCmBgYAoKYGBge3J9CmdhcG1pbmRlciAlPiUgCiAgZ2dwbG90KGFlcyh4ID0gbG9nKGdkcFBlcmNhcCksIHkgPSBsb2cobGlmZUV4cCksIGNvbG9yID0gY29udGluZW50LCBzaXplID0gcG9wKSkgKyAKICBnZW9tX3BvaW50KCkgKwogIGdlb21fdGV4dChhZXMobGFiZWw9aWZlbHNlKGNvdW50cnk9PSJVbml0ZWQgU3RhdGVzIixhcy5jaGFyYWN0ZXIoY291bnRyeSksJycpKSxoanVzdD0tMC4yLHZqdXN0PTApCmBgYAoKIyBGYWNldGluZwoKYGBge3J9CmdhcG1pbmRlcgoKZ2FwbWluZGVyICU+JSAgCiAgZ2dwbG90KGFlcyh4ID0gbG9nKGdkcFBlcmNhcCksIHkgPSBsb2cobGlmZUV4cCksIGNvbG9yID0gY29udGluZW50LCBzaXplID0gcG9wKSkgKyAKICBnZW9tX3BvaW50KCkgKwogIGZhY2V0X3dyYXAofnllYXIpIApgYGAKCiMgUGxvdC5seQoKYGBge3J9CmxpYnJhcnkocGxvdGx5KQoKcCA8LSBnYXBtaW5kZXIgJT4lICAKICBnZ3Bsb3QoYWVzKHggPSBsb2coZ2RwUGVyY2FwKSwgeSA9IGxvZyhsaWZlRXhwKSwgY29sb3IgPSBjb250aW5lbnQsIHNpemUgPSBwb3ApKSArIAogIGdlb21fcG9pbnQoKSArCiAgZmFjZXRfd3JhcCh+eWVhcikKCmdncGxvdGx5KHApCmBgYAoKIyBQbG90Lmx5IGZhY2V0aW5nCgpgYGB7cn0KbGlicmFyeShwbG90bHkpCgpwIDwtIGdhcG1pbmRlciAlPiUgIAogIGdncGxvdChhZXMoeCA9IGxvZyhnZHBQZXJjYXApLCB5ID0gbG9nKGxpZmVFeHApLCBjb2xvciA9IGNvbnRpbmVudCwgc2l6ZSA9IHBvcCkpICsgCiAgZ2VvbV9wb2ludCgpICsKICBmYWNldF93cmFwKH55ZWFyKQoKZ2dwbG90bHkocCkKYGBgCgojIFBsb3QubHkgYW5uaW1hdGlvbiB3aXRoIGdncGxvdC4KClRvIGxlYXJuIGFib3V0IFtQbG90Lmx5IFJdKGh0dHBzOi8vcGxvdC5seS9yLykgYW5kIFtQbG90Lmx5IGdncGxvdF0oaHR0cHM6Ly9wbG90Lmx5L2dncGxvdDIvKS4KClRoZSBbcGxvdC5seSBib29rXShodHRwczovL3Bsb3RseS1ib29rLmNwc2lldmVydC5tZS8pIGlzIGFuIGV4Y2VsbGVudCBwbGFjZSB0byBzdGFydCB0byBsZWFybiBhYm91dCB1c2Ugb2YgYW5uaW1hdGlvbiBbcGxvdC5seSBjaGFwdGVyIDVdKGh0dHBzOi8vcGxvdGx5LWJvb2suY3BzaWV2ZXJ0Lm1lL2tleS1mcmFtZS1hbmltYXRpb25zLmh0bWwpLgoKYGBge3J9CmdnIDwtIGdhcG1pbmRlciAlPiUgZ2dwbG90KGFlcyhsb2coZ2RwUGVyY2FwKSwgbG9nKGxpZmVFeHApLCBjb2xvciA9IGNvbnRpbmVudCkpICsKICBnZW9tX3BvaW50KGFlcyhzaXplID0gcG9wLCBmcmFtZSA9IHllYXIsIGlkcyA9IGNvdW50cnkpKSAKZ2dwbG90bHkoZ2cpCmBgYAoK