Condividi:        

grafico excel con assi definiti da utente

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

grafico excel con assi definiti da utente

Postdi wallace&gromit » 22/07/19 17:30

Ciao, spero di riuscire a spiegarmi bene.
in excel creo un grafico a dispersione in base ai miei dati.
I valori sono piuttosto grandi, quindi non voglio che parta dall'origine (0,0) ma da un numero vicino al mio valore minimo, per es. (1040,1052).
Ora vorrei inserire i segni di graduazione. Posso scegliere qual'è l'intervallo tra uno e l'altro ma non riesco a scegliere quello che vorrei, nel mio caso per esempio due rette (orizzontale e verticale) che si incrociano a (1050, 1060).
C'è qualche impostazione di excel che permette di farlo?
Allego un esempio (per quanto possa servire), dove nel primo grafico ho l'origine dove la voglio e nel secondo i segni di graduazione dove li vorrei, ma per farlo mi tocca estendere troppo l'origine.
http://www.filedropper.com/graficoconassiindipendentidaorigine
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Sponsor
 

Re: grafico excel con assi definiti da utente

Postdi Anthony47 » 23/07/19 01:31

Non so se rispecchia le tue esigenze, ma guarda come ho costruito il Grafico 1 nel file scaricabile qui:
https://www.dropbox.com/s/tx3i9odou112l ... .xlsm?dl=0

Ho aggiunto in cima alla tua serie di dati (che quindi ora cominciano da riga 7) altri 4 punti, che dovrebbero rappresentare le coordinate iniziali e finali delle due rette perpendicolari al centro del grafico.
Questi punti corrispondono ai Min, Max e Media dei valori X, Y (per semplicita' ho calcolato Min e Max separatamente in E2:F3) piu' un "margine" che imposto in D2

A questo punto, la macro SetGrafico si occupera' di
-impostare Min e Max degli assi replicando i Min e Max che trova in colonna A e B
-visualizzare un segmento di unione tra i punti 1-2 e 3-4 per creare le rette perpendicolari
-diminuire la dimensione dei Dots che delimitano le rette perpendicolari

Il codice della SetGrafico:
Codice: Seleziona tutto
Sub SetGrafico()
Dim ShLine As Boolean, dSmall As Long, dStd As Long, mSize As Long, I As Long
'
dSmall = 3      '<<< La dimensione dei "dots" degli assi centrali
dStd = 5        '<<< La dimensione standard dei dots
'
'Imposta min  e max degli assi:
ActiveSheet.ChartObjects("Grafico 1").Activate        '<<< Il grafico da "lavorare"
ActiveChart.Axes(xlCategory).MinimumScale = Application.WorksheetFunction.Min(Range("A1:A1000"))
ActiveChart.Axes(xlCategory).MaximumScale = Application.WorksheetFunction.Max(Range("A1:A1000"))
ActiveChart.Axes(xlValue).MinimumScale = Application.WorksheetFunction.Min(Range("B1:B1000"))
ActiveChart.Axes(xlValue).MaximumScale = Application.WorksheetFunction.Max(Range("B1:B1000"))
'
'Lascia visibili solo le linee degli "assi centrali":
For I = 1 To ActiveChart.FullSeriesCollection(1).Points.Count
    If I = 2 Or I = 4 Then ShLine = True Else ShLine = False
    ActiveChart.FullSeriesCollection(1).Points(I).Format.Line.Visible = ShLine
    If I <= 4 Then mSize = dSmall Else mSize = dStd
    ActiveChart.FullSeriesCollection(1).Points(I).MarkerSize = mSize
Next I
ActiveWindow.RangeSelection.Select
End Sub

Vedi se ci sono elementi utili...
Avatar utente
Anthony47
Moderatore
 
Post: 19223
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: grafico excel con assi definiti da utente

Postdi wallace&gromit » 23/07/19 10:22

Speravo in qualcosa di più immediato, ora provo a lavorare alla soluzione proposta.
Per esempio la posizione delle linee non deve essere al punto medio ma alla prima cifra tonda.
Quindi avrò la formula per calcolare la prima linea verticale:
Codice: Seleziona tutto
=ARROTONDA.ECCESSO(E2;10)
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: grafico excel con assi definiti da utente

Postdi Anthony47 » 23/07/19 16:02

Per esempio la posizione delle linee non deve essere al punto medio ma alla prima cifra tonda

Va bene allora modificare con la formula Arrotonda le coordinate dei punti.

Mi chiedo pero' se non e' sufficiente usare le impostazioni Formato area del tracciato /Opzione griglia principale dopo aver impostato in Opzioni assi l' unita' principale su 10

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19223
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: grafico excel con assi definiti da utente

Postdi wallace&gromit » 23/07/19 16:45

No perché se il valore dell'origine per x è 1045 metterà la prima riga verticale a 1055, non a 1050.
Per averne una a 1050 dovrei impostare unità principale su 5, ma poi avrei una nuova riga a 1055, che non voglio.
Oppure dovrei estendere il valore minimo a 1040, tenendo unità 10, ampliando però troppo il grafico.
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: grafico excel con assi definiti da utente

Postdi Marius44 » 23/07/19 21:04

Salve a tutti
Ho scaricato l'esempio di Anthony (quello in Filedropper non riesco a scaricarlo) e ho lavorato sul Grafico 2
Ho applicato questo codice
Codice: Seleziona tutto
Sub distanzaY()
  ActiveSheet.ChartObjects("Grafico 2").Activate
  mn1 = Application.WorksheetFunction.Min(Range("A1:A1000"))
  mx1 = Application.WorksheetFunction.Max(Range("A1:A1000"))
  mn2 = Application.WorksheetFunction.Min(Range("B1:B1000"))
  mx2 = Application.WorksheetFunction.Max(Range("B1:B1000"))
'
  mn11 = CDbl(Left(mn1, Len(mn1) - 1) & "0")
  mx11 = CDbl(CDbl(Left(mx1, Len(mx1) - 1) + 1) & "0")
  mn22 = CDbl(Left(mn2, Len(mn2) - 1) & "0")
  mx22 = CDbl(CDbl(Left(mx2, Len(mx2) - 1) + 1) & "0")
 
  ActiveChart.Axes(xlValue).MinimumScale = mn22
  ActiveChart.Axes(xlValue).MaximumScale = mx22
  ActiveChart.Axes(xlValue).MajorUnit = 10
 
  ActiveChart.Axes(xlCategory).MinimumScale = mn11
  ActiveChart.Axes(xlCategory).MaximumScale = mx11
  ActiveChart.Axes(xlCategory).MajorUnit = 10

End Sub


So che Anthony storcerà il naso ( a ragione ) ma volevo sapere se è quello che vuoi fare.
Ciao,
Mario
Marius44
Utente Senior
 
Post: 655
Iscritto il: 07/09/15 22:00

Re: grafico excel con assi definiti da utente

Postdi Anthony47 » 24/07/19 01:20

Marius ha scritto:So che Anthony storcerà il naso ( a ragione ) ma volevo sapere se è quello che vuoi fare
Il mio motto e' "Se funziona allora e' perfetto così"
Pero', indipendentemente dalla risposta di W&G, il naso stavolta lo arriccio perche' la tua tecnica di arrotondare al 10 inferiore non garantisce il risultato, nel caso che i valori Min di X o Y avessero dei decimali.

Basterebbe dimensionare MN1 e MN2 come Long oppure Integer, ma il metodo migliore e' usare la funzione FLOOR (ARROTONDA.DIFETTO); es:
Codice: Seleziona tutto
mn11 = Application.WorksheetFunction.Floor(mn1, 10)

Oppure alternative logiche quali:
Codice: Seleziona tutto
mn11 = Int(mn1/10) * 10



W&G ha scritto:[Non va bene usare l'opzione Griglia principale] perché se il valore dell'origine per x è 1045 metterà la prima riga verticale a 1055, non a 1050.
Per averne una a 1050 dovrei impostare unità principale su 5, ma poi avrei una nuova riga a 1055, che non voglio.
Oppure dovrei estendere il valore minimo a 1040, tenendo unità 10, ampliando però troppo il grafico.
Allora dovrebbe andare bene il tuo modo di calcolare le coordinate della "griglia"; oppure porti tutto nel vba.

Ad esempio, partendo dal tuo file iniziale (quindi senza le celle che calcolano Min, Max e Medie), la seguente macro imposta i limiti degli assi x e y e aggiunge una nuova serie con i punti necessari a creare la "croce centrale" (anzi, al primo "valore tondo" delle X):
Codice: Seleziona tutto
Sub Set2Grafico()
Dim ShLine As Boolean, dSmall As Long, dStd As Long, mSize As Long, I As Long
Dim fFrame As Long, NSColl 'As SeriesCollection
Dim minX As Long, minY As Long, maxX As Long, maxY As Long
'
dSmall = 2      '<<< La dimensione dei "dots" degli assi centrali
dStd = 5        '<<< La dimensione standard dei dots
fFrame = 3      '<<< La "cornice" attorno ai Min e Max
'
'Calcola min  e max degli assi:
minX = Application.WorksheetFunction.Min(Range("A1:A1000")) - fFrame
minY = Application.WorksheetFunction.Min(Range("B1:B1000")) - fFrame
maxX = Application.WorksheetFunction.Max(Range("A1:A1000")) + fFrame
maxY = Application.WorksheetFunction.Max(Range("B1:B1000")) + fFrame
'
ActiveSheet.ChartObjects("Grafico 1").Activate          '<<< Il grafico da "lavorare"
On Error Resume Next                                    'Rimuove la "croce"
    ActiveChart.SeriesCollection("cross").Points(1).Delete
On Error GoTo 0
'Imposta min  e max degli assi:
ActiveChart.Axes(xlCategory).MinimumScale = minX
ActiveChart.Axes(xlCategory).MaximumScale = maxX
ActiveChart.Axes(xlValue).MinimumScale = minY
ActiveChart.Axes(xlValue).MaximumScale = maxY
'
'Aggiunge i punti della "croce centrale":
xval = Array(Int(minX / 10 + 1) * 10, Int(minX / 10 + 1) * 10, minX, maxX)
yval = Array(minY, maxY, Int(minY / 10 + 1) * 10, Int(minY / 10 + 1) * 10)
Set NSColl = ActiveChart.SeriesCollection.NewSeries
With NSColl
    .XValues = xval
    .Values = yval
    .Name = "cross"
    .MarkerSize = dSmall
End With
'Imposta le linee e le opzioni:
ActiveChart.SeriesCollection("cross").Points(2).Format.Line.Visible = True
ActiveChart.SeriesCollection("cross").Points(4).Format.Line.Visible = True
ActiveChart.SeriesCollection("cross").Points(2).Format.Line.Weight = 0.75       'Spessore
ActiveChart.SeriesCollection("cross").Points(4).Format.Line.Weight = 0.75
ActiveChart.SeriesCollection("cross").Points(1).ApplyDataLabels                 'Coordinata
ActiveChart.SeriesCollection("cross").Points(3).ApplyDataLabels
'Prudenziale:
For I = 1 To ActiveChart.FullSeriesCollection(1).Points.Count
    ActiveChart.FullSeriesCollection(1).Points(I).Format.Line.Visible = False
    ActiveChart.FullSeriesCollection(1).Points(I).MarkerSize = dStd
Next I
ActiveWindow.RangeSelection.Select
End Sub



Il tutto e' dimostrato sul file scaricabile qui:
https://www.dropbox.com/s/h9xev4gney71c ... .xlsm?dl=0

Ciao a tutti
Avatar utente
Anthony47
Moderatore
 
Post: 19223
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: grafico excel con assi definiti da utente

Postdi wallace&gromit » 29/07/19 16:47

Scusate il mio silenzio, sono stato impegnato su altri fronti (complice la calura estiva).
I metodi proposti funzionano, ma non sono sicuro che sopravvivano ai test pratici. Penso che mi tengo la variante in cui i limiti degli assi vengono esplicitati, come elaborato dopo la prima proposta di Anthony.
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21


Torna a Applicazioni Office Windows


Topic correlati a "grafico excel con assi definiti da utente":


Chi c’è in linea

Visitano il forum: Nessuno e 46 ospiti