Laat me beginnen met het tonen van de volgende grafiek:
Het ziet er bekend uit, is het niet? Dit wordt een staafdiagram genoemd. We tekenen ze normaal gesproken met verschillende applicaties zoals Microsoft Excel en Microsoft Word.
Als we meer controle willen hebben over het proces van het maken van grafieken, zou het programmeren van dergelijke grafieken de beste keuze zijn.
In deze tutorial zal ik je laten zien hoe we bargraphs kunnen maken met behulp van Python. Klaar?
Als je geïnteresseerd bent in dieper in Python duiken en leren hoe je de kracht van Python kunt gebruiken om data te verwerken, kijk dan eens naar deze twee cursussen:
Om een staafdiagram te tekenen, hebben we hoofdzakelijk twee modules nodig: de Afbeeldingsmodule en de ImageDraw-module, die beide zullen worden geïmporteerd uit de Python Imaging Library (PIL). De Beeld
module zal worden gebruikt om een afbeelding te laden, terwijl de ImageDraw
module wordt gebruikt om de 2D-afbeeldingen te maken (d.w.z. een lijn te tekenen).
Ik noem PIL, laat me je laten zien hoe we het kunnen installeren. Maar ik zal je laten zien hoe je Pillow moet installeren. De reden hiervoor is de meest recente versie voor PIL, PIL 1.1.7, werd uitgebracht in 2009 en ondersteunt alleen Python 1.5.2-2.7. Het heeft dus geen ondersteuning voor Python 3.X en ik ben bang dat de ontwikkeling ervan is stopgezet sinds de laatste commit voor het PIL-project in 2011 was.
Pillow komt hier te hulp omdat het de PIL-repository heeft gevorkt en Python 3.X-ondersteuning heeft toegevoegd. Dus ik zal Pillow gebruiken voor de lezers die Python 3.X gebruiken. Maar het doet geen kwaad om met Pillow te werken als u eerdere Python-versies gebruikt.
De stappen in dit gedeelte over het installeren van Pillow zijn voor Mac OS X-gebruikers, aangezien ik deze tutorial momenteel aan het schrijven ben op een Mac OS X El Capitan-systeem, maar je kunt de instructies in de documentatie voor andere besturingssystemen volgen.
Een eenvoudige manier om Pillow op uw Mac te installeren is via pip, die u kunt installeren door de volgende eenvoudige opdracht op uw terminal in te voeren:
$ sudo easy_install pip
Kussen op dit punt kan eenvoudig worden geïnstalleerd door te typen:
$ sudo pip installeer kussen
Laten we nu stap voor stap door de bouwstenen van het programma lopen. Het eerste dat we nodig hebben is een lege afbeelding waarop we onze staafgrafiek zullen tekenen. U kunt de lege afbeelding downloaden.
Laten we nu deze lege afbeelding lezen en tekenen. We kunnen dit als volgt doen:
van PIL import Image, ImageDraw img = Image.open ('blank.png') draw_img = ImageDraw.Draw (img)
Omdat we een staafdiagram willen tekenen, hebben we wat gegevens nodig. Hiervoor kunnen we lijsten gebruiken. Onze gegevens (lijst) kunnen dus er als volgt uitzien:
data = ['4', '5', '87', '1', '44', '83', '93', '2', '54', '84', '100', '64' ]
Op dit moment is alles wat we moeten doen de staafgrafiek tekenen. We behandelen de balken die we in de grafiek zien als lijnen. Dus we zullen gebruik maken van de lijn()
methode van de ImageDraw
module.
Ik zal je de code tonen die de taak zal uitvoeren om een staafdiagram te tekenen, en ik zal het achteraf uitleggen:
voor i in data: x = x + 30 y = 200 - int (i) draw_img.line ((x, 200, x, y), width = 10, fill = (255,0,0,255))
Zoals je ziet, doorlopen we onze lijst en tekenen we een staafdiagram met behulp van de gegevens in de lijst. x = x + 30
geeft ons de benodigde ruimte tussen elk gegevenspunt in de lijst op de x-as. Voordat ik verder ga, wil ik u eraan herinneren dat de (0,0)
punt op de afbeelding is de linksboven punt van de as. Het zou dus zijn om de lijnen ondersteboven te tekenen op de normale manier die we gewend zijn bij het markeren van de puntcoördinaten in een grafiek.
Als we naar de laatste regel van het vorige scriptgedeelte gaan, kunnen we dit gedeelte lezen draw_img.line ((x, 200, x, y)
als volgt: trek een lijn vanaf het punt (X, 200)
ter zake (X, y)
. Dus, als we beginnen met het eerste gegevenspunt 4
, de lijn zou worden getrokken (34.200)
naar (34.196)
. Dus als ik je de uitvoer een tijdje laat zien, zal de x-as verschijnen alsof het was waar we normaal aan gewend zijn (vanaf de linker onderkant voor het punt (0,0)
). De truc hier was om te gebruiken y = 200
. Zoals je zult zien, zullen we altijd een lijn laten tekenen waar y = 200
voor alle gegevenspunten, en dit geeft ons de indruk van de manier waarop we punten in een grafiek hebben getrokken bij het bekijken van ons resultaat.
De breedte
staat voor de breedte (dikte) van de lijn, en vult = (255,0,0,255)
vertegenwoordigt de kleur van de lijn. Dat is de RGBA
kleur (een uitbreiding van de RGB-kleur met een alfakanaal dat de dekking weergeeft).
Ten slotte kunnen we de afbeelding bekijken met behulp van de instructie: img.show ()
.
Nu we de bouwstenen van ons programma hebben behandeld, laten we alles bij elkaar voegen en zien hoe ons script er uitziet:
van PIL import Image, ImageDraw img = Image.open ('blank.png') draw_img = ImageDraw.Draw (img) data = ['4', '5', '87', '1', '44', ' 83 ',' 93 ',' 2 ',' 54 ',' 84 ',' 100 ',' 64 '] x = 0 voor i in gegevens: x = x + 30 y = 200 - int (i) draw_img. regel ((x, 200, x, y), width = 10, fill = (255,0,0,255)) img.show ()
Nu komt het interessante deel, het resultaat van het bovenstaande script. Als u het programma uitvoert, zou u iets moeten hebben dat lijkt op het volgende:
Ik heb het bovenste gedeelte van de afbeelding bijgesneden in deze momentopname; het zou groter moeten lijken in de originele uitvoer.
Zoals we in deze zelfstudie hebben gezien, zou het gebruik van een programmeertaal (zoals Python) de manier zijn om meer controle te krijgen over een aantal reguliere taken, zoals het tekenen van een grafiek voor bepaalde gegevens..
We hoeven deze taken echter nooit helemaal opnieuw uit te voeren; we kunnen in plaats daarvan profiteren van door de gebruiker gedefinieerde bibliotheken zoals Pillow in onze tutorial. Het gebruik van zo'n bibliotheek maakte het ons gemakkelijk om de staafgrafiek te tekenen, en het gebruik van Python gaf ons de controle en flexibiliteit van het gebruik van enkele trucjes om de grafiek uit te voeren op de manier die we wilden.