Kategorier
datavisualisering epidemiologi mikrobiologi plotly python

Stapeldiagram och histogram

Genom att minska mellanrummet mellan staplarna i ett stapeldiagram har man till slut skapat ett histogram. Det tänkte jag vi skulle göra här och nu med Plotly Express.

Histogram in reds of total TBE cases in Sweden
Histogram med staplar i olika nyanser av rött beroende på incidens. Klicka på bilden för att komma till html-versionen.

Vi fortsätter med TBE-statistiken. Du kan läsa mycket mer om TBE i det här inlägget. Hur ska man tänka för att det här ska gå så smidigt som möjligt? Vi stolpar upp vad vi behöver:

  • Importera paket
  • Importera data
  • Skapa en figur med staplar (bars)
  • Välja färgskala
  • Minska mellanrummet mellan staplarna
  • Snygga till och skapa titlar
  • Visa figuren

Importera paket

import pandas as pd
import plotly.express as px

Vi behöver alltså Pandas för att kunna importera datan från vårt Excelblad. Dessutom behöver vi förstås Plotly Express. Som vanligt importerar vi det och kallar det för px så det inte blir så långt att skriva.

Importera data

df = pd.read_excel("TBE_SVE.xlsx")

Det här har vi gjort förr 🙂 Vi skapar en variabel (df) som läser in Excelfilen med Pandas (pd). Filen är densamma som den vi använde i det förra inlägget om Plotly Graph Objects. Du kan ladda ner den där om du vill hänga med!

Skapa figuren

fig = px.bar(df, x="year", y="f_sve", color="i_sve",
    color_continuous_scale='Reds'
    labels={"i_sve": "Incidens"}
    )

Är det redan dags att skapa själva figuren? Det gick ju snabbt. Med px.bar skapar vi ett stapeldiagram. Datan ska komma från det vi läst in i variabeln df. På x-axeln vill vi visa informationen från kolumnen ”year” och på y-axeln ”f_sve” vilket står för antalet totala fall i hela Sverige.

Välja färgskala

Som du ser så är färgskalan glidande (continuous) från vitt till mörkrött. Färgerna är proportionerliga till incidensen. Till höger finns en graderad skala. Det ordnar vi genom att ange att ”color” ska vara lika med ”i_sve” som är kolumnen i Excelbladet för hela Sveriges incidens av TBE (fall per 100 000 invånare). Inte helt överraskande heter färgskalan jag valt ”Reds”. Det finns många andra att välja bland här. Du kan läsa mer i inlägget om Heatmaps.

Minska gapet

För att det ska bli ett histogram och inte ett vanligt stapeldiagram tar vi bort mellanrummet mellan staplarna. Det åstadkoms genom en uppdatering av figurens layout så att mellanrummet är 0,0.

fig.update_layout(bargap=0.0)

Snygga till

Vi ändrar några saker till i layouten för att det ska bli helt perfekt.

fig.layout.plot_bgcolor = "#FFFFFF"
fig.update_yaxes(title_text="Antal fall")
fig.update_xaxes(title_text="År")
fig.update_layout(title="Totalt antal TBE-fall per år i Sverige 2004 – 2021")

Först ställer vi in bakgrundsfärgen till vit. Grundinställningen är en gråblå nyans som inte helt lirar med det röda tycker jag 😉 Sedan får y- och x-axeln rubriker och sist en rubrik till hela diagrammet.

Visa figuren

Som vanligt avslutar vi med att faktiskt visa figuren:

fig.show()

Koden i sin helhet

#imports
import pandas as pd
import plotly.express as px

#dataframe
df = pd.read_excel("TBE_SVE.xlsx")

#figure
fig = px.bar(df, x="year", y="f_sve", color="i_sve",
    color_continuous_scale='Reds'
    labels={"i_sve": "Incidens"}
    )

#snygg.com
fig.update_layout(bargap=0.0)
fig.layout.plot_bgcolor = "#FFFFFF"
fig.update_yaxes(title_text="Antal fall")
fig.update_xaxes(title_text="År")
fig.update_layout(title=
    "Totalt antal TBE-fall per år i Sverige 2004 – 2021")

#show
fig.show()

Lycka till och prova gärna med andra siffror. Vad vill du illustrera? Berätta och visa gärna i kommentarerna!

1

Lämna ett svar

Din e-postadress kommer inte publiceras.