THCHARTS: HISTOGRAMME AVEC PLUSIEURS SERIES

Messages postés
463
Date d'inscription
dimanche 22 décembre 2002
Statut
Membre
Dernière intervention
18 avril 2009
- - Dernière réponse : nicsoFR
Messages postés
7
Date d'inscription
jeudi 26 février 2004
Statut
Membre
Dernière intervention
20 janvier 2009
- 29 janv. 2009 à 17:09
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/29922-thcharts-histogramme-avec-plusieurs-series

nicsoFR
Messages postés
7
Date d'inscription
jeudi 26 février 2004
Statut
Membre
Dernière intervention
20 janvier 2009
-
super beau j en ai saigné du nez !!!!!!!!!!!!!! xD
The Red Man
Messages postés
112
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
13 juin 2010
2 -
Trop fort le graphique ! Meme sur photoshop jamais j'y arriverai faire ce que tu as fait !
Respect !
TUHABITES
Messages postés
41
Date d'inscription
mardi 30 septembre 2003
Statut
Membre
Dernière intervention
21 avril 2011
-
Salut,
je viens de tester "Save" et cela fonctionne. Voici le code utilisé:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ import Namespace="ThCharts" %>
<%@ import Namespace="System.Data" %>
<script runat="server">

private void Page_Load(object sender, System.EventArgs e)
{

float[] graduation={250f,500f,750f,1000.0f};
DataSet ds=new DataSet();
ds.ReadXml(Server.MapPath("data1.xml"));

Histogram hist=new Histogram(ds.Tables[0],graduation);
if (!hist.Save(Server.MapPath("img.jpg"))) Label1.Text = "Y a un problème";


}

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>

<form id="form1" runat="server">




</form>

</html>
cs_Loneloup
Messages postés
9
Date d'inscription
mardi 25 février 2003
Statut
Membre
Dernière intervention
1 février 2008
-
Salut,
Cela me permettrai de ne pas avoir à créer 1 page spécifique pour le graphique. Merci
TUHABITES
Messages postés
41
Date d'inscription
mardi 30 septembre 2003
Statut
Membre
Dernière intervention
21 avril 2011
-
Je te remercie LoneLoup pour le code en VB car d'aucuns m'ont demandé comment faire pour utiliser ThChart en VB et j'étais bien incapable de leur répondre.
Pour ce qui de la fonction Save, je l'avais complètement oubliée. En fait, ce code est une petite partie d'un autre code, c'est pourquoi le code n'est pas très propre et c'est aussi pourquoi il reste cette fonction Save qui apparemment ne fonctionne pas correctement. Si tu penses qu'elle peut être utile je peux me pencher sur le sujet et la rendre fonctionnelle. Je peux également ajouter d'autres fonctionnalités (si tu as des idées intéressantes).
Tuhabites
cs_Loneloup
Messages postés
9
Date d'inscription
mardi 25 février 2003
Statut
Membre
Dernière intervention
1 février 2008
-
Une petite derniere astuce : Calcul automatique des paliers
On part du principe que TotHits sera toujours notre valeur la plus forte, la variable Palier permet de regler le degre de graduation (ex: pour un TotHits a 4000 le degre de graduation correct est 500) :
Dim Palier As Integer = 500
Dim Countgrad As Integer = 0
Dim TempGrad As Integer = 0
'Premiere boucle pour dimenssioner le tableau
Do While TempGrad < tothits
TempGrad = TempGrad + Palier
Countgrad = Countgrad + 1
Loop
'Seconde boucle pour renseigner le tableau graduation
Dim graduation(Countgrad + 2) As Single
TempGrad = 0
graduation(0) = Palier
Countgrad = 0
Do While TempGrad < TotHits
Countgrad = Countgrad + 1
TempGrad = TempGrad + Palier
graduation(Countgrad) = TempGrad
Loop
cs_Loneloup
Messages postés
9
Date d'inscription
mardi 25 février 2003
Statut
Membre
Dernière intervention
1 février 2008
-
Je me permet de completer aussi le code en VB, vous gagnerez une bonne demi journée de brainstorming :
Thcharts doit être ajouter en tant qu'objet com et pas assembly.net car il y a bug d access deny une fois de temps en temps.
Dim graduation(5) As Single
Dim hist As ThCharts.Histogram
graduation(0) = 250.0F
graduation(1) = 500.0F
graduation(2) = 750.0F
graduation(3) = 1000.0F

hist = New ThCharts.Histogram(Dtable, graduation)

Dim Couleur(3) As Color
Couleur(0) = Color.Orange
Couleur(1) = Color.Yellow
Couleur(2) = Color.MediumBlue
Couleur(3) = Color.MediumSeaGreen

Dim fontt As Font = New Font("Arial", 12)

hist.colorSeries = Couleur
hist.quality = 95
hist.AddTitle("Résumé des accès", fontt, Color.Black)

Dim Titre(3) As String
Titre(0) = "Sites"
Titre(1) = "Visites"
Titre(2) = "Pages"
Titre(3) = "Hits"
hist.titlesSeries = Titre
hist.titlesSeriesX = 250
hist.titlesSeriesY = 80
hist.Render(System.Web.HttpContext.Current)

Comment fonctionne DTable :
Dim Dtable As New DataTable("Annee")

Initialisationd es propriétés :
Dtable.MinimumCapacity = 12
Dtable.CaseSensitive = False
Dtable.Columns.Add("Janvier", GetType(Integer))
Dtable.Columns.Add("Février", GetType(Integer))
Dtable.Columns.Add("Mars", GetType(Integer))
Dtable.Columns.Add("Avril", GetType(Integer))
Dtable.Columns.Add("Mai", GetType(Integer))
Dtable.Columns.Add("Juin", GetType(Integer))
Dtable.Columns.Add("Juillet", GetType(Integer))
Dtable.Columns.Add("Août", GetType(Integer))
Dtable.Columns.Add("Septembre", GetType(Integer))
Dtable.Columns.Add("Octobre", GetType(Integer))
Dtable.Columns.Add("Novembre", GetType(Integer))
Dtable.Columns.Add("Décembre", GetType(Integer))

Ajout d'une ligne :
Dim dr0 As DataRow = Dtable.NewRow
dr0("Janvier") = TabSites(0)
dr0("Février") = TabSites(1)
dr0("Mars") = TabSites(2)
dr0("Avril") = TabSites(3)
dr0("Mai") = TabSites(4)
dr0("Juin") = TabSites(5)
dr0("Juillet") = TabSites(6)
dr0("Août") = TabSites(7)
dr0("Septembre") = TabSites(8)
dr0("Octobre") = TabSites(9)
dr0("Novembre") = TabSites(10)
dr0("Décembre") = TabSites(11)
Dtable.Rows.Add(dr0)
cs_Loneloup
Messages postés
9
Date d'inscription
mardi 25 février 2003
Statut
Membre
Dernière intervention
1 février 2008
-
Ok j ai trouve un moyen dérivé qui ne me satisfait pas entirement à cause de l'optimisation du code mais voila la soluce pour ceux qui pourrait avoir le meme problème:

1°) Dans la page ou doit s afficher le graphique (index.aspx), insérer une balise de cette maniere : (DynImageAnnee.aspx étant dans le même répertoire que votre page principale)

2°) Coder la page DynImageAnnee.aspx avec le calcul du graphique das le formload

Exécuter, le tour est joué.

Merci encore pour ce fabuleux code

PS: marche comment la fonction save?
toujours pas reussi
cs_Loneloup
Messages postés
9
Date d'inscription
mardi 25 février 2003
Statut
Membre
Dernière intervention
1 février 2008
-
Trouvé pour le titre et la couleur.
Mais toujours pas pour l'affichage : j'ai remarqué que tu avais une methode save, fonctionne t elle, si oui comment?
hist.Save(Server.MapPath("\Image\Statannee.jpg"))
me renvois toujours false
cs_Loneloup
Messages postés
9
Date d'inscription
mardi 25 février 2003
Statut
Membre
Dernière intervention
1 février 2008
-
Sublime, 3 petites questions :
Sachant que je programme en Vb.net et que les données proviennent d'un Datatable :
- Comment ajouter le titre des colonnes comme dans le screenshoot "le commercial","ses homologues")?
- j'utilise
hist = New ThCharts.Histogram(Dtable, graduation)
hist.Render(HttpContext.Current)
Le graphique efface completement les autres données de la page. comment y remédier et le placer à l'endroit voulu?
- Est il possible de modifier les couleurs sans modifier la dll thcharts?
leroitony
Messages postés
22
Date d'inscription
jeudi 28 août 2003
Statut
Membre
Dernière intervention
5 avril 2007
-
Désole pour le dérangement j'ai trouver l'erreur qui résidais dans mon datatable

Et encore bravo pour le code
leroitony
Messages postés
22
Date d'inscription
jeudi 28 août 2003
Statut
Membre
Dernière intervention
5 avril 2007
-
Salut je te remercie pour ta source très bien faite.

Je me permets de te demander après quelque test une petite info

Quand je charge Histogram hist=new Histogram(dt,graduation); ou dt est un DataTable qui contient une liste de nombre (via requête)

Le résultat est un graph. vue de profile

Qu'elle est la variable pour avoirs une vue de face comme lors de l'utilisation des fichier xml
aurelien2003
Messages postés
14
Date d'inscription
dimanche 22 juin 2003
Statut
Membre
Dernière intervention
28 mai 2008
-
c'est sans contexte une excelente source qui merite d'etre encouragé. Merci beaucoup !
cs_elibou
Messages postés
1
Date d'inscription
jeudi 24 juin 2004
Statut
Membre
Dernière intervention
1 juin 2005
-
Excellent composant, trés facile d'utilisation et effet de Tonnerre.
Félicitations
soficplus
Messages postés
1
Date d'inscription
mercredi 28 janvier 2004
Statut
Membre
Dernière intervention
18 avril 2005
-
Génial, génial génial, félicitations !!! Bon maintenant faut que j'fasse des camemberts hihih
c'est trés beau le résultat, moi qui pensait générer des histogrammes en deux coups de cuillères à pot !!!
jujubaud
Messages postés
4
Date d'inscription
jeudi 18 novembre 2004
Statut
Membre
Dernière intervention
18 avril 2005
-
merci pour ce complément je vais tester
c'est sympas d'avoir pris le temp
Merci encore
TUHABITES
Messages postés
41
Date d'inscription
mardi 30 septembre 2003
Statut
Membre
Dernière intervention
21 avril 2011
-
L'explication ci-dessus m'a semblé peu claire donc j'ai modifié le source du zip de manière à ce qu'elle soit utilisable dans un winform.
(Bien que cela n'ai pas trop de rapport avec l'ASP)
TUHABITES
Messages postés
41
Date d'inscription
mardi 30 septembre 2003
Statut
Membre
Dernière intervention
21 avril 2011
-
On ne peut pas, sans transformation, utiliser la dll dans un winform il faudra pour cela faire les manipulations suivantes.

1- Dans le fichier histogram.cs (dans les sources du Zip) :
- ajouter la ligne: using System.IO;
- ajouter la surcharge suivante:
public Stream Render()
{
Stream stream=new MemoryStream();
System.Drawing.Image img;
Initialisation(tabl.GetLength(0));
y=h+y;

img=Building(tabl,graduation,intitule);
if (err) img=Erreur();
Quality();
img.Save(stream,ici,eps);
return stream;
}
2- compiler.

3- Créer un Form comme suit en ajoutant bien ThCharts parmis les références.

using System;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
using System.Data;
using ThCharts;

public class MainForm : System.Windows.Forms.Form
{
public MainForm()
{

InitializeComponent();


}

[STAThread]
public static void Main(string[] args)
{
Application.Run(new MainForm());
}

#region Windows Forms Designer generated code

private void InitializeComponent() {
//
// MainForm
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(608, 502);
this.Name = "MainForm";
this.Text = "MainForm";
this.Paint += new System.Windows.Forms.PaintEventHandler(this.MainFormPaint);
}
#endregion
void MainFormPaint(object sender, System.Windows.Forms.PaintEventArgs e)
{
float[] graduation={2.5f,5.0f,7.5f,10.0f};
DataSet ds=new DataSet();
ds.ReadXml("data1.xml");

Histogram hist=new Histogram(ds.Tables[0],graduation);
hist.width=400;
hist.height=500;
hist.unit="Kg";
string[] intitule={"Banane","Orange","Citron","Fraise"};
hist.titlesSeries=intitule;

Image image=Image.FromStream(hist.Render());
Graphics g=e.Graphics;
g.DrawImage(image,10,10);


}

}
4- compiler et executer. (penser à placer le fichier data1.xml dans le même répertoire.)

5- ça devrait marcher.
jujubaud
Messages postés
4
Date d'inscription
jeudi 18 novembre 2004
Statut
Membre
Dernière intervention
18 avril 2005
-
peut on faire la meme chose en winform??
TUHABITES
Messages postés
41
Date d'inscription
mardi 30 septembre 2003
Statut
Membre
Dernière intervention
21 avril 2011
-
hbgz74, voilà une transcription du code en VB, je ne garantis pas qu'il va fonctionner étant donné mes maigres connaissances dans ce langage.

jujubaud, le code qui est dans le zip est commenté (pas beaucoup mais un peu quand même) et la page Exemple.aspx présente l'ensemble des propriétés sur lesquelles on peut aisément agir.
Pour ce qui est des variables passées dans le constructeur: le premier argument est un DataTable contenant l'ensemble des données chiffrées (entiers ou decimaux) et le deuxieme argument correspond au graduations que l'on souhaite voir sur l'axe des ordonnées.

<%@ Page Language="VB" %>
<%@ import Namespace="ThCharts" %>
<%@ import Namespace="System.Data" %>
<script runat="server">

Sub Page_Load(sender As Object, e As EventArgs)


Dim graduation(5) As Single={250f,500f,750f,1000.0f}
Dim ds As DataSet
ds=New DataSet()
ds.ReadXml("data.xml")
Dim hist As Histogram
hist=New Histogram(ds.Tables[0],graduation)
hist.Render(this.Context)
End Sub

</script>


J'espère que celà vous aidera.
jujubaud
Messages postés
4
Date d'inscription
jeudi 18 novembre 2004
Statut
Membre
Dernière intervention
18 avril 2005
-
ton code est tres interessant pourrai tu le comenter d'avantage je sais que c'est pénible mais cela m'aiderai à le comprendre
Pourrai tu par exemple présisé l'utilité des différente varianble de ta classe histogramme.

Je te remercie par avance
hbgz74
Messages postés
1
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
11 avril 2005
-
peux tu mettre le code de l'exemple en VB stp
je débute encore en C#

Merci d'avance
TUHABITES
Messages postés
41
Date d'inscription
mardi 30 septembre 2003
Statut
Membre
Dernière intervention
21 avril 2011
-
Merci beaucoup tmcuh.
tmcuh
Messages postés
463
Date d'inscription
dimanche 22 décembre 2002
Statut
Membre
Dernière intervention
18 avril 2009
-
très propre le graphisme, bravo,bonne prog
10