Grafieklabels

Voorbeeldbestanden bij dit artikel:
  • Grafieklabels
  • Inleiding

    Op mijn website staan er ondertussen nu al meerdere pagina’s over grafieken, en meer in het bijzonder een aantal tips en methoden om in Excel toch professioneel ogende grafieken te maken. Deze pagina gaat weer een stapje verder, we gaan er wat VBA-code bijhalen.

    Een beeld zegt meer dan 1000 woorden:

    UPDATE: de code is bijgewerkt zodat die ook werkt in Excel 2007. Dat heeft Finch gedaan, sinds midden 2007 als bereidwillige helper actief op het Helpmij forum. Bedankt Finch!

    Top 2000 vergelijking

    Ik heb even in een grafiek de top 100 van de Donna’s top 2000 van de beste songs aller tijden in 2007 vergeleken met 2006. (Zie ook hier). Welke songs gingen erop vooruit, welke achteruit, welke bleven status-quo? Op de horizontale as staat de ranking in 2006 (dus van 1 tot 100), op de verticale as staat de ranking in 2007 (ook van 1 tot 100) uitgezet.

    Het gevolg is dat als je een lijn trekt van punt (1;1) tot punt (100;100), dat je dan alle puntencombinaties hebt waarbij songs status-quo bleven. Punten onder die lijn zijn erop vooruit gegaan, punten boven de lijn hebben terrein verloren. De gestegen songs zet ik in de grafiek in het groen, de gedaalde songs in het rood.

    Elke song wordt dus voorgesteld door 1 punt in de grafiek: ik bekijk de songs die in 2006 in de top-100 stonden, en wat ermee gebeurd is in 2007. Maar echt veel meer informatie kunnen we daar dan niet meer bijzetten in de grafiek, anders wordt de grafiek als het ware opgeblazen door een teveel aan informatie. Door teveel op de grafiek te willen zetten, is op de duur niets meer zichtbaar. Zeker als er veel punten dicht bij mekaar liggen.

    Je zou eventueel een label kunnen zetten bij elk punt. In de versies vóór Excel 2007 kan je 3 mogelijke labels bij een punt zetten (*):

    • de naam van de gegevensreeks
    • de waarde op de X-as
    • de waarde op de Y-as

    VBA-code

    Zoals gezegd, dat gaat ons hier niet helpen, want dan staat de grafiek boordevol tekst die mekaar overlapt. Wat dan? We zouden enkel een label kunnen tonen als de muisaanwijzer zich over een punt beweegt). Er zou dan VBA-code moeten zijn die nagaat wanneer dit gebeurt, en de nodige actie onderneemt. Zoiets kan met een Chart_MouseMove gebeurtenis in VBA. Daar zet je dus code die telkens uitgevoerd wordt wanneer iemand met de muis over die bewuste grafiek beweegt. Bij een Chart_MouseMove gebeurtenis kan je onmiddellijk gebruik maken van 4 parameters:

    • Button: werd er op een muisknop geklikt (neen, linker-, rechter- of middelste knop)?
    • Shift: werden Shift, Control, Alt toetsen ingedrukt?
    • x en y: de x en y-coördinaten van de muis op dat moment

    Volgende stap is dan nagaan in de code wat nu juist geselecteerd werd met de muis. Als het bvb. een punt in een gegevensreeks is, dan willen we het bijhorende label weergeven in de grafiek. Anders niet. Het zou goed kunnen dat de muis over de grafiek beweegt, maar dat het niets selecteert. Dan moet er uiteraard ook verder niets gebeuren.

    Ik heb dit uitgewerkt en de code ervoor geschreven. Als je het bestand downloadt en opent, zal je zien dat er rechts bovenaan in de grafiek een label gevuld wordt met informatie over het punt dat je aanduidt met de muis. Belangrijke beperking: deze manier van werken gaat zeer goed bij grafieken die op een apart tabblad staan. Bij grafieken die gewoon ergens midden op een tabblad staan, is de code een stuk moeilijker. Daarvoor moet je al met klassenmodulen gaan werken. Goede tip: blijf daar af als het ook op een simpelere manier kan.

    Hopelijk kan je hiermee jouw grafieken verfraaien!

    __________

    (*): Zie de zeer degelijke gratis XY Chart labeler utility van Rob Bovey voor meer mogelijkheden op dit vlak.




    Over Wim

    Wim Gielis is Business Intelligence consultant en Excel expert

    Andere links