Voila grâce à mon code source, on peut afficher un graph qui reste proportionnelle à la taille de l'image souhaité. Du style je choisi une taille de 640 x480 et bein mon graphe gardera les proportions, automatiquement l'echelle se paramétra Ma source est facile à modifier. tout est expliquer normalement. Bon dev
(Merci pour vos sources, j'ai piqué qq sources pour arriver a faire ça)
Source / Exemple :
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
dim base,title
dim imagex As Integer,imagey As Integer
dim rectx As Integer,recty As Integer
dim axeXg As Integer,axeXh As Integer,axeXe As Integer,axeXl As Integer
dim axeYg As Integer,axeYh As Integer,axeYe As Integer,axeYl As Integer
dim Ech,Esp, Ep as long
dim PEYy,PEYx,PEXy,PEXx as integer
dim LX,LY as string
dim taille as integer
'Je recupére le form pour savoir qu'elle est ma taille
' voir plus loin pour comprendre
taille=Request.Form("Ta")
'Grace à une selection prcedente je peux choisir ma base
'base=mabase
base=Request.Form("chbase")
'Taille de L'image (550x480 proportion par defaut)
' 4 choix possible
'Choix1
if taille=1 then
imagex= 480
imagey= 300
end if
'Choix2
if taille=2 then
imagex= 550
imagey= 480
end if
'Choix3
if taille=3 then
imagex= 640
imagey= 480
end if
'Choix4
if taille=4 then
imagex= 800
imagey= 600
end if
'Encadrement
rectx=imagex-1
recty=imagey-1
'Titre
title="Fabrication 2002"
'Axe des absissce & ordonné
'X
'position par rapport à la gauche du cadre (Depart à gauche)
axeXg=10
'position par rapport au haut du cadre (Depart du Haut)
axeXh=imagey-30
' longueur du trait x
axeXl=imagex-30
' epaisseur du trait x
axeXe=2
'Y
'position par rapport à la gauche du cadre (Depart à gauche)
axeYg=10
'position par rapport au haut du cadre (Depart du Haut)
axeYh=50
' Epaisseur du trait y
axeYe=2
' Hauteur du trait y
axeYl=imagey-axeYh-30
'Echelle
Ech= 100000
'position legende axe des Y
PEYy=axeYg+10
PEYx=axeYh
'position legende axe des x
PEXy=axeXl
PEXx=axeXh-20
'nom axe X
LX="Mois"
'Nom axe Y
LY="Nb Planches"
'reglage histogramme
'espace entre les barres (proportionel à la taille)
Esp=imagex*0.072
'largeur des barres (proportionel à la taille)
Ep=imagex*0.018
Dim DBobjConn As OleDBConnection
DBobjConn = New OleDBConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Request.MapPath(base))
DBobjConn.Open()
dim mois(11) as string
Dim a As Integer
mois(0)="janvier"
mois(1)="février"
mois(2)="mars"
mois(3)="avril"
mois(4)="mai"
mois(5)="juin"
mois(6)="juillet"
mois(7)="août"
mois(8)="septembre"
mois(9)="octobre"
mois(10)="novembre"
mois(11)="décembre"
Dim i As Integer
Dim MaBitMap As New Bitmap(imagex,imagey) ' On créé l'image
Dim MonObjGfx As Graphics
Dim MesValeurs(11) As long
Dim MesValeurs2(11) As long
Dim Moyenne,moyenne2 As long
Dim compteur as integer
compteur=0
for a = 0 to 11
'ma requete ici donne le resultat du nombre de planches fabriquée par mois
Dim ODDA_ModifTable As New OleDBCommand("SELECT Sum(fabrications.Planches) AS SommeDePlanches FROM fabrications GROUP BY fabrications.Fmois HAVING (((fabrications.Fmois) like '" & mois(a) & "'));",dbobjconn)
Dim malecture AS OleDbDataReader
malecture=ODDA_ModifTable.ExecuteReader
do until not malecture.read
MesValeurs(a)=malecture("SommeDePlanches")
loop
malecture.Close
next
DBobjConn.Dispose
Dim MesDescriptions(11) As String
MesDescriptions(0)="Jan"
MesDescriptions(1)="fev"
MesDescriptions(2)="Mar"
MesDescriptions(3)="Avr"
MesDescriptions(4)="Mai"
MesDescriptions(5)="Jun"
MesDescriptions(6)="Jui"
MesDescriptions(7)="Aou"
MesDescriptions(8)="Sep"
MesDescriptions(9)="Oct"
MesDescriptions(10)="Nov"
MesDescriptions(11)="Dec"
MonObjGfx = Graphics.FromImage(MaBitMap)
' On met un fond blanc
MonObjGfx.Clear(Color.White)
' On trace un rectangle tout autour de notre image
MonObjGfx.DrawRectangle(Pens.Black, 0, 0, rectx, recty)
' On donne titre à notre graphique
MonObjGfx.DrawString(title, New Font("Verdana", 16, FontStyle.Bold), Brushes.Black, New PointF(5, 5))
' On trace l'axe des absisse et ordonné
MonObjGfx.FillRectangle(New SolidBrush(Color.black), axeYg,axeYh, axeYe,axeYl) 'y
MonObjGfx.FillRectangle(New SolidBrush(Color.black), axeXg,axeXh, axeXl,axeXe) 'x
For i = 0 To 11
'Valeur mise en varible 2
MesValeurs2(i) = formatnumber(MesValeurs(i),0)
'reglage de l'echelle automatique
MesValeurs(i)=formatnumber((MesValeurs(i)*axeYl)/Ech,0)
' On trace le rectangle de couleur Bleu
MonObjGfx.FillRectangle(New SolidBrush(Color.Blue), ((i + 1) * Esp), axeXh - MesValeurs(i), Ep,MesValeurs(i))
' Histoire de rendre un peu plus beau notre histogramme, on met un contour pour chaque barre
MonObjGfx.DrawRectangle(Pens.Black, ((i + 1) * Esp), axeXh - MesValeurs(i), Ep, MesValeurs(i))
' On affiche les valeurs a 10px dessus des barres
MonObjGfx.DrawString(MesValeurs2(i).ToString, New Font("Arial", 8), Brushes.Red, ((i + 1) * Esp), axeXh - MesValeurs(i)-10)
MonObjGfx.DrawString(MesDescriptions(i).ToString, New Font("Arial", 8), Brushes.Green, ((i + 1) * Esp), axeXh)
'mise en varible des valeurs de la moyenne
moyenne=moyenne+MesValeurs(i)
moyenne2=moyenne2+MesValeurs2(i)
if Mesvaleurs2(i) <>0 then
compteur=compteur+1
end if
Next
'calcul de la moyenne 1 et 2
moyenne=moyenne/compteur
moyenne2=moyenne2/compteur
'Tracé le trait de la moyenne
MonObjGfx.FillRectangle(New SolidBrush(Color.red), axeXg,axeXh - moyenne, axeXl,axeXe) 'x
' valeur de la moyenne
MonObjGfx.DrawString(moyenne2.ToString, New Font("Arial", 8), Brushes.red,PEXy-20 , axeXh - moyenne-20)
' Legende Axe des Y
MonObjGfx.DrawString(LY.ToString, New Font("Arial", 8), Brushes.Black, PEYy, PEYx)
' Legende Axe des X
MonObjGfx.DrawString(LX.ToString, New Font("Arial", 8), Brushes.Black, PEXy, PEXx)
' On "balance" le graph au format Gif ou jpeg
MaBitMap.Save(Response.OutputStream, ImageFormat.Gif)
End Sub
Conclusion :
Merci à tous, notre union fait la force, vous pouvez me laisser des messages, pour des questions.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.