• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Tekengebied in grafiek (Y-as en X-as precies gelijk!) + aanpassen as-labels

Status
Niet open voor verdere reacties.

Pieter671

Gebruiker
Lid geworden
26 jun 2015
Berichten
105
Hallo,

Vraag 1

In bijgevoegd voorbeeld heb ik een grafiek opgenomen.
Nu zijn de X-as en de Y-as gelijk (van 0 tot 1,5), maar de grafiek is niet precies een vierkant!!
Ik kan het tekengebied slepen en vergroten, maar dit geen niet een vast eindresultaat.

Ik wil dit tekengebied (de grafiek, zonder as-label) precies gelijk hebben, zodat de 45 graden lijn ook echt een 45 gradenlijn is.

Hoe zet ik dit tekengebied vast?
Of is er een ander oplossing via VBA?

Vraag 2

Hoe geef ik de as-labels de juiste namen. Zie hiervoor de kolommen W t/m Z. De waarden bij 1,1 zijn variabel (zie gele velden).
Of is er een ander oplossing via VBA?

Bekijk bijlage Voorbeeld grafiek.xlsx
 
Jouw grafieknaam is "Grafiek 4". Je moet zelf maar even rotzooien met de maten :)
Wat me opviel, was dat de hoogte en breedte van de gehele grafiek schaalt.

Code:
Sub Grafiek()

With ActiveSheet.ChartObjects("Grafiek 4") 'Verander de naam van de grafiek naar de gegeven naam
    .Height = 525 ' hoogte v.d. grafiek
    .Width = 900  ' breedte v.d. grafiek
    .Top = 200    ' positioneren vanaf top
    .Left = 200   ' positioneren vanaf links
End With
ActiveSheet.ChartObjects("Grafiek 4").Activate 'Verander de naam van de grafiek naar de gegeven naam
ActiveChart.PlotArea.Select
With Selection
    .Height = 300 ' hoogte v.h. tekengebied in de grafiek
    .Width = 500  ' breedte v.h. tekengebied in de grafiek
    .Top = 10   ' positioneren vanaf top in de grafiek
    .Left = 10  ' positioneren vanaf links in de grafiek
End With

End Sub

Je 2e vraag begreep ik niet.
 
Laatst bewerkt:
Bedankt voor het antwoord op vraag 1

M.b.t. vraag 2.

De x-as heeft nu de waarde 0,0 t/m 1,5. Hier moeten de waarden uit de cellen Y8 t/m Y23 komen te staan.
Voor de y-as ( nu ook 0,0, t/m 1,5). Hier moeten de waarden uit de cellen X8 t/m Z23 komen te staan.
 
Ik snap nu wat je bedoeld.

Je grafiek dynamisch maken kan (volgens mij dan) tot op een zekere hoogte. Maar niet de aslabels binnen een spreidingsdiagram. Deze moeten oplopen en volgens 'aslabels opmaken' worden ingesteld.
 
@Ndam90,

M.b.t. tot vraag 1.

Met het aantal gelijke punten voor hoogte en breedte lijkt de grafiek precies vierkant te zijn.
Op het oog lijkt het inderdaad een vierkant, maar als ik het nameet met een liniaal dan zit er toch een halve centimeter verschil tussen.
Dus niet exact een vierkant.

Is dit een bug (een gemis) in Excel of moet toch naar een andere oplossing gezocht worden?
Of ga ik verkeerd met hoogte en breedte om?


M.b.t. tot vraag 2.

Op jouw omschrijving "dynamische grafiek" heb ik verder gezocht. Een klein beetje omdenken is hier van toepassing.

Spreidinggrafiek baseren op tabel (cellen U7 t/m W23). Reeks in grafiek niet laten tonen.
Grafiek is nu opgebouwd op basis van de eenheden 0 t/m 1.5, zowel x-as als y-as.

Voor automatisch aanpassen van y-as en x-as met behoud van strakke indeling 0 t/m 1,5 is en hulpmiddel nodig.
Anders verspringen de verhoudingen van de assen.
Zie namen "MijnGrenzen", "PrimaireEenheidX" en "PrimaireEenheidY" en bijbehorende VBA.

In tabblad "Blad 1"

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Range("V4"), Target) Is Nothing Then
Call Grafiek
Range("V4").Select

End If

If Not Intersect(Range("W4"), Target) Is Nothing Then
Call Grafiek
Range("W4").Select

End If

End Sub


MACRO GRAFIEK

Sub Grafiek()

Dim sn, pey, pex
sn = Range("mijnGrenzen")
pey = Range("PrimairEenheidY")
pex = Range("PrimairEenheidX")

With ActiveSheet.ChartObjects("Grafiek 1") 'Verander de naam van de grafiek naar de gegeven naam
.Height = 550 ' hoogte v.d. grafiek
.Width = 550 ' breedte v.d. grafiek
'.Top = 100 ' positioneren vanaf top
'.Left = 100 ' positioneren vanaf links
End With

ActiveSheet.ChartObjects("Grafiek 1").Activate 'Verander de naam van de grafiek naar de gegeven naam
ActiveChart.PlotArea.Select
With Selection
.Height = 500 ' hoogte v.h. tekengebied in de grafiek
.Width = 500 ' breedte v.h. tekengebied in de grafiek
.Top = 10 ' positioneren vanaf top in de grafiek
.Left = 10 ' positioneren vanaf links in de grafiek
End With



With Sheets("Blad1").ChartObjects("Grafiek 1").Chart
.Axes(xlCategory).MinimumScale = IIf(IsEmpty(sn(1, 1)), 0, sn(1, 1))
.Axes(xlCategory).MaximumScale = IIf(IsEmpty(sn(2, 1)), 100, sn(2, 1))
.Axes(xlValue).MinimumScale = IIf(IsEmpty(sn(1, 2)), -50, sn(1, 2))
.Axes(xlValue).MaximumScale = IIf(IsEmpty(sn(2, 2)), 500, sn(2, 2))
End With

ActiveSheet.ChartObjects("Grafiek 1").Activate
ActiveChart.Axes(xlValue).Select
ActiveChart.Axes(xlValue).MajorUnit = pey
ActiveChart.Axes(xlCategory).Select
ActiveChart.Axes(xlCategory).MajorUnit = pex


End Sub



Zie ook bijgevoegd bestand:
Bekijk bijlage Voorbeeld grafiek 2.xlsm

Bij wijziging van de velden V4 en W4 wordt de grafiek automatisch aangepast.

Nu nog zorgen dat het precies een vierkant wordt!
 
Vraag 2 is daarmee dus volgens mij opgelost.

Vraag 1 ben ik nog even mee wezen rotzooien. Het bereik wat je opgeeft is incl. de x-as en y-as. Ik heb hier geen vaste formule voor kunnen maken, dus je zal even moeten rotzooien met de hoogte en breedte. Het verschil is ongeveer 21 volgens mij.

Als je de breedte wilt weten van de y-as en x-as kan je onderstaande gebruiken.
Code:
Sub Assen()
Dim beneden As Double
Dim links As Double

ActiveSheet.ChartObjects("Grafiek 1").Activate
ActiveChart.Axes(xlCategory).Select
beneden = ActiveChart.Axes(xlCategory).Height

ActiveSheet.ChartObjects("Grafiek 1").Activate
ActiveChart.Axes(xlValue).Select
links = ActiveChart.Axes(xlValue).Width


    Range("U36").Value = beneden
    Range("V36").Value = links

End Sub

De range cel locaties zal je eventueel moeten wijzigen, dat is waar de waarden komen.
 
Het is inderdaad een beetje passen en meten.

Met de extra waarden van "beneden" en "links" kan ik nu wel het tekengebied dynamisch opzetten en nagenoeg vierkant krijgen.

Voor mijn te ontwerpen spreadsheet, een oplossing waar ik goed mee uit de voeten kan.

@Ndam90, dank je wel. :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan