sul grafico a torta mi viene quella linea , mi sai suggerire qualcosa?
questo il codice:
Public Sub Button3_Click()
Dim graf As New Linegraf
Dim valori As New Float[]
Dim valoriy As New String[]
Dim i As Integer
Dim myconn As New Connection
Dim myset As Result
Dim totale As Float
Dim tp As Float
Dim tg As Float
Dim tc As Float
totale = 0
tp = 0
tg = 0
tc = 0
myconn.Type = "sqlite3"
myconn.Host = Application.Path
myconn.Name = "myZone.db"
myconn.Open
myset = myconn.Exec("Select * from tbPasti") ' where GMA='" & Format$(datebox1.Value, "dd/mm/yy") & "'")
For Each myset
tp = tp + myset!P
tg = tg + myset!G
tc = tc + myset!C
Next
totale = tp + tg + tc
graf.PiePut((tp / totale) * 100, Color.red, "proteine")
graf.PiePut((tg / totale) * 100, Color.Blue, "grassi")
graf.PiePut((tc / totale) * 100, Color.yellow, "carboidrati")
PictureBox1.Picture = graf.MakePie("Composizione intake - " & Settings["host/nome"] & " " & Settings["host/cognome"] & " - " & Format$(datebox1.Value, "dd/mm/yyyy"), PictureBox1.w, PictureBox1.h, Color.White, True, 15)
myconn.Close
End
grazzzie!! :rolleyes: :hard:
Il tag [RISOLTO] :hatecomputer:
prima devo ancora 'risolvere' una cosa :P
A) come faccio a restringere il font delle scritte%? Con l'istruzione di creazione del grafico mi sembra che come ultimo parametro possso settare il font, ma solo del titolo.
B) come faccio ad avvicinare le scritte percentuali? Come vedi quando viene posizionata sopra non si vede del tutto
C) Round(valore): malgrado l'istruzione mi compaiono i decimali... :-\
PictureBox1.Picture = graf.MakePie("Composizione intake - " & Settings["host/nome"] & " " & Settings["host/cognome"] & " - " & datebox1.value, PictureBox1.w, PictureBox1.h, Color.White, True, 9)
Ciao andy,
anchio sto usando la classe creata da fsurfing è ho incontrato i tuoi stessi problemi per quanto riguarda la formatazione dei dati percentuali e il posizionamento degli stessi, comunque se fai una ricerca su linegraf sul forum trovi anche altri suggerimenti che fsurging mi ha dato per effettuare delle modifiche.
Per quanto riguarda la formatazione delle percentuali io ho risolto così alla riga 765:
testo = Format(obj1[i].$valore, "#0.00") & " %" 'Arrotondamento percentuale a due decimali *** nuova modifica
Per il posizionamento degli stessi devi giocare su questi valori alla riga 754
' x2 = (dx / 1.5) * Cos(Rad(- parcov)) ' Codice originale - Lunghezza linee dati su torta
' y2 = (dy / 1.5) * Sin(Rad(- parcov)) ' Codice originale - Lunghezza linee dati su torta
x2 = (dx / 1.7) * Cos(Rad(- parcov)) ' Nuova modifica - Lunghezza linee dati su torta
y2 = (dy / 1.7) * Sin(Rad(- parcov)) ' Nuova modifica - Lunghezza linee dati su torta
vedi un po se ti può aiutare
P.S.: Scusa andy, ma hai risolto il problema della "famigerata" linea sul grafico a torta?
Io per il momento ho dovuto tenermela, non ho risolto neanche con l'aiuto di fsurfing (a lui non appare), ho visto l'ultimo screenshot che hai postato
la linea non c'è, se hai risolto mi puoi dire come. Grazie
dai uno sguardo anche a queste modifiche a partire dalla riga 813
IF x2 >= cx + dx / 2 THEN
' Draw.Line(x2, h - y2, x2 + lt + 5, h - y2) ' Codice originale
Draw.Line(x2, h - y2, x2 + lt + 10, h - y2) ' Codice modificato
' Draw.Text(testo, x2 + 5, h - y2 - Draw.TextHeight(testo) - 3) ' Distanza dati da testata linee - Codice originale
Draw.Text(testo, x2 + 15, h - y2 - Draw.TextHeight(testo) + 6) ' Distanza dati da testata linee - Codice modificato
ELSE
' Draw.Line(x2, h - y2, x2 - lt - 5, h - y2) ' Codice originale
Draw.Line(x2, h - y2, x2 - lt - 10, h - y2) ' Codice modificato
' Draw.Font.Bold = TRUE ' *** nuova modifica
' Draw.Text(testo, x2 - 5 - lt, h - y2 - Draw.TextHeight(testo) - 3) ' Distanza dati da testata linee - Codice originale
Draw.Text(testo, x2 - 60 - lt, h - y2 - Draw.TextHeight(testo) + 6) ' Distanza dati da testata linee - Codice modificato
ENDIF
testo = Format(obj1[i].$valore, "#0.00") & " %" 'Arrotondamento percentuale a due decimali *** nuova modifica
riga su codice originale 801
Draw.Ellipse(cx, cy, dx, dy, Rad(180), fine)
codice da commentare per eliminare la riga orizzontale situata a metà pie
riga su codice originale 828
If x2 >= cx + dx / 2 Then
'Draw.Line(x2, h - y2, x2 + lt + 5, h - y2) 'originale
Draw.Line(x2, h - y2, x2 + lt + 10, h - y2) ' Codice modificato
'Draw.Text(testo, x2 + 5, h - y2 - Draw.TextHeight(testo) - 3) 'Distanza dati da testata linee - originale
Draw.Text(testo, x2 + 15, h - y2 - Draw.TextHeight(testo) + 6) ' Distanza dati da testata linee - Codice modificato
Else
'Draw.Line(x2, h - y2, x2 - lt - 5, h - y2) ' codice originale
Draw.Line(x2, h - y2, x2 - lt - 10, h - y2) ' Codice modificato
'Draw.Text(testo, x2 - 5 - lt, h - y2 - Draw.TextHeight(testo) - 3) 'originale
Draw.Text(testo, x2 - 60 - lt, h - y2 - Draw.TextHeight(testo) + 6) ' Distanza dati da testata linee - Codice modificato
Endif
Osservazione 1: questa modifica produce un miglioramento, pero' se noti, la riga va in certi casi a sovrapporsi alla percentuale, secondo me la lunghezzza della riga (parte adiacente alla percentuale) dovrebbe essere tale da non farlo, quindi inferiore.
Osservazione 2: la parte della riga che parte dalla zona dello spicchio dovrebbe essere meno lunga, in certi casi la % esce dalla zona visibile, nel caso di spicchio localizzato sulla zona sx del pie (allego altra immagine).
Osservazione 3: la grandezza della scritta % deve essere diminuita, è così grande che visivamente da' fastidio.
Ciao andy,
vedo che fai progressi, allora per poter avvicinare le % agli spicchi devi intervenire su questa porzione di codice:
IF x2 >= cx + dx / 2 THEN
' Draw.Line(x2, h - y2, x2 + lt + 5, h - y2) ' Codice originale
Draw.Line(x2, h - y2, x2 + lt + 10, h - y2) ' Codice modificato
' Draw.Text(testo, x2 + 5, h - y2 - Draw.TextHeight(testo) - 3) ' Distanza dati da testata linee - Codice originale
Draw.Text(testo, x2 +15, h - y2 - Draw.TextHeight(testo) +6) ' Distanza dati da testata linee - Codice modificato
ELSE
' Draw.Line(x2, h - y2, x2 - lt - 5, h - y2) ' Codice originale
Draw.Line(x2, h - y2, x2 - lt - 10, h - y2) ' Codice modificato
' Draw.Font.Bold = TRUE ' *** nuova modifica
' Draw.Text(testo, x2 - 5 - lt, h - y2 - Draw.TextHeight(testo) - 3) ' Distanza dati da testata linee - Codice originale
Draw.Text(testo, x2 -60 - lt, h - y2 - Draw.TextHeight(testo) +6) ' Distanza dati da testata linee - Codice modificato
ENDIF
devi agire sui valori che ti ho sottolineato (possono essere positivi ho negativi), ci sono arrivato ha forza di fare prove, non sarà molto ortodosso come metodo (fsurfing mi cazzierà) ma non avendo capito a pieno la logica di questa classe non ho altre strade per apportare le modifiche che mi servono, in attesa di nuove dall'autore.
P.S.: Guarda lo screenshot che ti ho allegato dove ho evidenziato esattamente quali sono i valori su cui devi agire.
@ tornu
ho sfruttato le librerie che Google mette a disposizione, so che i puristi storceranno il naso, sfrutto lavori esterni, ma mi sembra un compromesso accettabile.
Punto di partenza
Si vada all'url http://code.google.com/intl/it-IT/apis/chart/image/index.html. Un esempio di grafico:
http://chart.apis.google.com/chart?chxr=0,0,46&chxt=y&chs=300x225&cht=lc&chco=3D7930&chd=s:Xhiugtqi&chg=14.3,-1,1,1&chls=2,4,0&chm=B,C5D4B5BB,0,0,0 (http://chart.apis.google.com/chart?chxr=0,0,46&chxt=y&chs=300x225&cht=lc&chco=3D7930&chd=s:Xhiugtqi&chg=14.3,-1,1,1&chls=2,4,0&chm=B,C5D4B5BB,0,0,0)
in sostanza con g3 si crea una pagina html del tipo:
<HTML>
<BODY>
<img src='http://chart.apis.google.com/chart?chxr=0,0,46&chxt=y&chs=300x225&cht=lc&chco=3D7930&chd=s:Xhiugtqi&chg=14.3,-1,1,1&chls=2,4,0&chm=B,C5D4B5BB,0,0,0'/>
</BODY>
</HTML>
In alternativa si crea una pagina html con codice javascript (sempre con g3):
<html>
<head>
<title> Example Chart </title>
<script language="javascript" src="http://www.google.com/jsapi"></script>
</head>
<body>
<div id="chart"></div>
<script type="text/javascript">
var queryString = '';
var dataUrl = '';
function onLoadCallback() {
if (dataUrl.length > 0) {
var query = new google.visualization.Query(dataUrl);
query.setQuery(queryString);
query.send(handleQueryResponse);
} else {
var dataTable = new google.visualization.DataTable();
dataTable.addRows(8);
dataTable.addColumn('number');
dataTable.setValue(0, 0, 37.704918032786885);
dataTable.setValue(1, 0, 54.09836065573771);
dataTable.setValue(2, 0, 55.73770491803279);
dataTable.setValue(3, 0, 75.40983606557377);
dataTable.setValue(4, 0, 52.459016393442624);
dataTable.setValue(5, 0, 73.77049180327869);
dataTable.setValue(6, 0, 68.85245901639344);
dataTable.setValue(7, 0, 55.73770491803279);
draw(dataTable);
}
}
function draw(dataTable) {
var vis = new google.visualization.ImageChart(document.getElementById('chart'));
var options = {
chxl: '',
chxp: '',
chxr: '0,0,46',
chxs: '',
chxtc: '',
chxt: 'y',
chs: '300x225',
cht: 'lc',
chco: '3D7930',
chd: 's:Xhiugtqi',
chdl: '',
chg: '14.3,-1,1,1',
chls: '2,4,0',
chm: 'B,C5D4B5BB,0,0,0'
};
vis.draw(dataTable, options);
}
function handleQueryResponse(response) {
if (response.isError()) {
alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
return;
}
draw(response.getDataTable());
}
google.load("visualization", "1", {packages:["imagechart"]});
google.setOnLoadCallback(onLoadCallback);
</script>
</body>
</html>
Sto migliorando una classe che contempla i tag principali x creare la stringa.
In sostanza il grafico pie lo creo cosi':
Dim grafico As New GoogleChart
grafico.arraydati = fDati
grafico.nomefile = "nutrienti.html"
grafico.titolo_linechart = "Nutrienti pasto del " & DateBox1.value
grafico.altezza_linechart = "300"
grafico.larghezza_linechart = "480"
grafico.legendaproteine_piechart = Format$((Round(tp, -2) / totale), "##%")
grafico.legendagrassi_piechart = Format$((Round(tg, -2) / totale), "##%")
grafico.legendacarboidrati_piechart = Format$((Round(tc, -2) / totale), "##%")
grafico.BuildPieChart
webview1.Url = Application.path & "/nutrienti.html"
La classe GoogleChart la allego (è una beta ma funziona, almeno x myZone). Secondo me è un lavoro da sviluppare e migliorare, la qualità dei grafici java e' notevole, dai una guardata agli esempi, e puoi si possono costruire template con i tool di google da utilizzare con g3.