Los gráficos de áreas son gráficos de líneas con el área bajo la línea rellena. En pandas se crean con plot.area y, a diferencia de los gráficos de líneas, las columnas se apilan por defecto.
plot.area apila las columnas del data frame unas sobre otras, de modo que la línea superior representa el total.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
rng = np.random.default_rng(3)
df = pd.DataFrame(rng.uniform(1, 5, (12, 3)).cumsum(axis = 0),
columns = ["A", "B", "C"],
index = pd.date_range("2025-01-01", periods = 12, freq = "MS"))
df.plot.area()
# plt.show()

Establece stacked = False para dibujar cada área desde cero. Utiliza alpha para establecer cierta transparencia y que todas las áreas sean visibles.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
rng = np.random.default_rng(3)
df = pd.DataFrame(rng.uniform(1, 5, (12, 3)).cumsum(axis = 0),
columns = ["A", "B", "C"],
index = pd.date_range("2025-01-01", periods = 12, freq = "MS"))
df.plot.area(stacked = False, alpha = 0.4)
# plt.show()

Divide cada fila entre su total para representar la proporción de cada columna a lo largo del tiempo.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
rng = np.random.default_rng(3)
df = pd.DataFrame(rng.uniform(1, 5, (12, 3)).cumsum(axis = 0),
columns = ["A", "B", "C"],
index = pd.date_range("2025-01-01", periods = 12, freq = "MS"))
share = df.div(df.sum(axis = 1), axis = 0)
ax = share.plot.area(ylim = (0, 1))
ax.yaxis.set_major_formatter("{x:.0%}")
# plt.show()

Elige los colores con una lista o con un colormap.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
rng = np.random.default_rng(3)
df = pd.DataFrame(rng.uniform(1, 5, (12, 3)).cumsum(axis = 0),
columns = ["A", "B", "C"],
index = pd.date_range("2025-01-01", periods = 12, freq = "MS"))
df.plot.area(colormap = "Set2", linewidth = 0)
# plt.show()

Consulta también cómo crear un gráfico de áreas en matplotlib o un gráfico de áreas apiladas en matplotlib.
También te puede interesar