Skapa diagram med Python
Hur smidigt hade det inte varit att kunna skapa professionella diagram utan att behöva använda program som Excel eller LibreOffice Spreadsheet? Det kan vi faktiskt. Python har ett mycket användbart bibliotek för just detta, nämligen Matplotlib.
Matplotlib är ett bibliotek för Python för att kunna skapa just diagram och grafer för både tryck och visning på skärmen. Matplotlib kan användas både i Pythonskript och interaktivt via Python- eller IPython-skalet så att man får en miljö som liknar t.ex. MATLAB.
Först av allt måste vi visa hur man installerar de paket som krävs för att det ska fungera. Därefter visar vi några exempel på olika typer av diagram. Här kommer vi endast att gå igenom den mest grundläggande (men kanske viktigaste) användningen för Matplotlib. Ofta använder man Matplotlib tillsammans med NumPy och Pandas för att sammanställa stora datamängder. Matplotlib tillsammans med NumPy och Pandas gör att man får en nästan komplett MATLAB-liknande miljö – dessutom helt gratis. Men här kommer vi idag bara att gå igenom själva skapandet av diagrammen.
Installera Python3 och Matplotlib
Hur du installerar de olika biblioteken skiljer sig åt från system till system. Enklast är det under de stora Linux distributionerna så vi börjar med dessa. Hoppa över Python3 i stegen nedan ifall du redan har installerat det sedan tidigare.
Debian / Ubuntu / Mint
Ta fram en terminal och skriv följande kommandon som antingen root eller med hjälp av sudo. I Debian kan du oftast bli root genom att skriva su och skriva in root-lösenordet. Under Ubuntu och Mint skriver du sudo -i och anger ditt egna lösenord.
apt-get update
apt-get install python3 python3-matplotlib python3-pyside
Windows
Det enklast sättet att installera Python3 och Matplotlib under Windows är att använda den färdigpaketerade utgåvan Anaconda som innehåller både Python, Matplotlib, NumPy och en lång rad andra bra verktyg och bibliotek. Anaconda kan laddas ner från Anaconda.com. Det är ett grafiskt installationsprogram som installerar allting åt dig.
Om du använder Windows så kan du inte starta Pythonskripten med
./mitt-script.py
så som man gör i t.ex. Linux. Istället kan man köra scripten
genom att spara dem någonstans på hårddisken, t.ex. i Dokument-mappen och sedan
starta IPython-tolkaren. Väl inne i IPython-tolkaren kan du köra scriptet
genom att förflytta dig till rätt plats, t.ex. cd Documents
och sedan skriva
run mitt-script.py
.
Några enkla diagram
Låt oss anta att vi har färdig data som vi vill representera med hjälp av olika grafer eller diagram. Som exempeldata kan vi ta befolkningen i några av Skånes största städer.
Stad | Befolkning |
---|---|
Malmö | 321 970 |
Helsingborg | 137 556 |
Lund | 116 682 |
Kristianstad | 82 372 |
Ängelholm | 40 655 |
Nu när vi har denna exempeldata kan vi enkelt skapa olika former av diagram och
grafer. Vi börjar med ett enkelt pajdiagram. Spara koden i en fil, till exempel
befolkning.py och gör den körbar med chmod +x befolkning.py
om du använder
Linux eller macOS.
#!/usr/bin/env python3
# Vi börjar med att importera de bibliotek vi behöver samt specificera att
# ska vi använda oss "Qt4Agg" (PySide) för att visa graferna.
import matplotlib
matplotlib.use("Qt4Agg")
import matplotlib.pyplot as plt
# Vår befolkningsdata
stader = 'Malmö', 'Helsingborg', 'Lund', 'Kristianstad', 'Ängelholm'
befolkning = [321970, 137556, 116682, 82372, 40655]
# Skapa diagramet
plt.pie(befolkning, labels=stader,
autopct='%1.1f%%') # Noggrannheten i procent
# Sätt axlarna till lika, så att cirkeln verkligen blir rund
plt.axis('equal')
# Och till sist, visa diagrammet
plt.show()
Om vi nu exekverar denna koden med med ./befolkning.py
(eller med run
befolkning.py
inifrån IPython) får vi upp ett fönster på skärmen som visas
här nedanför med ett pajdiagram. Härifrån kan vi spara vårt diagram i valfritt
bildformat.
Det var ju både enklare och snabbare än att starta upp Excel eller LibreOffice. Däremot kanske du inte tycker att diagrammet ser särskilt snyggt ut. Det går faktiskt att finjustera och anpassa utseendet på diagrammet precis så som vi vill ha det. Vi återanvänder samma kod som ovan men lägger till lite saker som gör att det hela blir lite snyggare.
#!/usr/bin/env python3
# Vi börjar med att importera de bibliotek vi behöver samt att vi ska
# använda oss "Qt4Agg" (PySide) för att visa graferna.
import matplotlib
matplotlib.use("Qt4Agg")
import matplotlib.pyplot as plt
# Vår befolkningsdata
stader = 'Malmö', 'Helsingborg', 'Lund', 'Kristianstad', 'Ängelholm'
befolkning = [321970, 137556, 116682, 82372, 40655]
farger = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral', 'olive']
explode = (0, 0, 0, 0, 0.07) # 'dra ut' den sista tårtbiten
# Skapa diagramet
plt.pie(befolkning, labels=stader, colors=farger, explode=explode,
shadow=True,
autopct='%1.1f%%') # Noggrannheten i procent
# Sätt axlarna till lika, så att cirkeln verkligen blir rund
plt.axis('equal')
# Och till sist, visa diagrammet
plt.show()
Om vi nu kör den nya koden igen med t.ex. ./befolkning.py
så får vi ett
vackrare diagram med lite mjukare färger, skuggeffekt och med den sista
tårtbiten “utdragen” en bit från diagrammet. Bilden nedan visar det nya
diagrammet sparat som en PNG-bild.
Andra typer av diagram
Men om vi istället vill skapa ett stapeldiagram, hur gör vi då? Detta är lika enkelt som när vi skapade vårt pajdiagram, det är dock några andra saker vi måste ange. Istället för procentsatser och axelns start måste vi nu istället tala om hur x och y axeln ska se ut.
Vi fortsätter med befolkningsexemplet och gör ett nytt program som ser ut som
nedanstående kod. Spara koden och kör den med t.ex. ./befolkning_v2.py
(eller
run befolkning_v2.py
inifrån IPython).
#!/usr/bin/env python3
# Vi börjar med att importera de bibliotek vi behöver samt att vi ska
# använda oss "Qt4Agg" (PySide) för att visa graferna.
import matplotlib
matplotlib.use("Qt4Agg")
import matplotlib.pyplot as plt
# Vår befolkningsdata, samma som tidigare
stader = 'Malmö', 'Helsingborg', 'Lund', 'Kristianstad', 'Ängelholm'
befolkning = [321970, 137556, 116682, 82372, 40655]
# Nu måste vi skapa en lista innehållande "0 1 2 3 4" som kommer att
# användas för x-axelns positioner & namn. Det skapar i princip en
# plats åt varje stapel. Det gör vi genom att köra range på längden
# listan med städerna.
x_pos = range(len(stader))
# Skapa diagramet. align="center" för att namnet ska hamna i mitten
# av stapeln. alpha=0.5 för att få en mjukare färgton/transparens,
# alltså alpha-channel.
plt.bar(x_pos, befolkning, align="center", alpha=0.5)
plt.xticks(x_pos, stader)
plt.ylabel("Befolkningsmängd")
plt.title("Befolkning i Skånska städer")
# Och till sist, visa diagrammet
plt.show()
Resultatet av detta program blir nedanstående stapeldiagram.
Om vi vill kan vi snabbt och enkelt ändra diagrammet till ett horisontellt
stapeldiagram. Då ändrar vi bara plt.bar
till plt.barh
samt plt.xticks
till plt.yticks
(vi vrider ju axlarna nu). Resultatet av dessa två ändringar
visas här nedanför.
Nyhetsbrev
Nyhetsuppdateringar från tidningen direkt till din inkorg, helt kostnadsfritt. Avsluta när du vill.
Kommentarer
Kommentarsfältet är modererat. Det innebär att alla kommentarer granskas av ansvarig utgivare före publicering.
Du väljer själv om du vill ange ditt riktiga namn, en pseudonym eller vara helt anonym. Ingen registrering behövs.
Relaterade artiklar
-
Skapa fristående binärer av Python-skript
Docker har blivit det nya sättet att paketera och köra Python-skript, även när skripten körs från exempelvis ett cronjob. Men ibland behöver vi inte en hel Docker-miljö med den overhead det innebär för väldigt små skript. Då är det smidigare att göra om skriptet till en körbar binärfil. Då kan vi även enkelt flytta filen mellan olika Linuxsystem.
-
Hämta data från API:er med cURL och jq
Med cURL och jq går det att extrahera data från API:er direkt från kommandoraden. Jq är en JSON-tolkare och beskrivs av utvecklarna som sed och awk för JSON.
-
Pythonmiljö i Docker
Ett vanligt användningsområde för Docker är att skapa och köra virtuella Pythonmiljöer. Med en Dockerfile och Docker Compose kan vi automatisera hela processen, från skapandet av miljön till exekveringen.
-
Python och trigonometri
Lite uppfräschning av trigonometri och Python är aldrig fel. Här får vi lära oss hur man kan rita upp rätvinkliga trianglar – direkt i Python – om vi känner till två av sidorna. För detta kommer vi att använda modulerna turtle och math.
-
Python i Windows utan installation
Det går att använda Python i Windows, även utan att installera det. Detta är användbart om du har en dator där du inte har rättigheter att installera program. Det kan till exempel vara en skoldator eller arbetsdator.
Senaste nyheterna och inläggen
-
Avlyssna trafik på servern med Wireshark och TShark
Wireshark är ett ovärderligt verktyg för att felsöka nätverkskonfigurationer, applikationer, API:er, demoner och mycket annat. I kombination med
tshark
kan vi dessutom avlyssna trafiken på en server i realtid. -
Mysig stämning på sommarens första demoparty
I helgen var det Reunion 2024 i Kvidinge Folkets hus, sommarens första skånska demoparty. Partyt organiserades av Jesper “Skuggan” Klingvall. På plats fanns ett 30-tal besökare.
-
Sommarens skånska demopartyn
Årets sommar bjuder på två skånska demopartyn. Först ut är Reunion i Kvidinge den 28–30 juni. Därefter är det Pågadata i Örtofta den 9–11 augusti.
-
Riskerna med BankID som ingen pratar om
BankID är ett säkert och smidigt sätt att identifiera sig online. Men i takt med dess ökade popularitet och användning har det blivit en svag länk – en single point of failure – på mer än ett sätt.
-
Polisernas fängelsedomar står fast
Efter tre år är målet mot de två poliser som olovligen tog sig in i en berusad mans bostad i Landskrona och misshandlade honom klart. Högsta domstolen beslutade den sjätte mars att avvisa överklagan. Fängelsedomarna för poliserna står därmed fast.
Utvalda artiklar
-
Mysig stämning på sommarens första demoparty
I helgen var det Reunion 2024 i Kvidinge Folkets hus, sommarens första skånska demoparty. Partyt organiserades av Jesper “Skuggan” Klingvall. På plats fanns ett 30-tal besökare.
-
Datorparty i Landskrona
I helgen höll Syntax Society sitt årliga sommarparty. Platsen var en källarlokal i Landskrona där ett femtontal personer medverkade.
-
Det första Pågadata har ägt rum
I helgen ägde det första Pågadata rum – uppföljaren till Gubbdata. Platsen var Folkets Hus i Kvidinge. Organisatör av partyt var Johan “z-nexx” Osvaldsson med hjälp från Jesper “Skuggan” Klingvall. Partyt hade över 100 anmälda deltagare.
-
Även hovrätten fäller poliserna för att ha satt dit oskyldig
Hovrätten fastställer straffet för de två poliser som förra året dömdes till vardera ett års fängelse av Lunds tingsrätt för att ha misshandlat och satt dit en oskyldig man. De båda poliserna ska även betala skadestånd till mannen.
-
Retroloppis i Påarp
Idag var det retroloppis hos Andreas Nilsson i Påarp. På baksidan av huset fanns hundratals spel uppradade på långa bord. Trots friska vindar och sval temperatur var loppisen välbesökt.
CyberInfo Sverige är ett it- och medieföretag i nordvästra Skåne som tillhandahåller böcker, utbildningar, nyheter och konsulttjänster inom Linux, säkerhet och programmering.
CyberInfo Sverige är godkänd för F-skatt, är momsregistrerat och innehar
utgivningsbevis för webbplatsen www.cyberinfo.se.