THCHARTS: HISTOGRAMME AVEC PLUSIEURS SERIES

tmcuh Messages postés 458 Date d'inscription dimanche 22 décembre 2002 Statut Membre Dernière intervention 18 avril 2009 - 9 mars 2005 à 12:37
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
29 janv. 2009 à 17:09
super beau j en ai saigné du nez !!!!!!!!!!!!!! xD
The Red Man Messages postés 111 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 13 juin 2010 2
25 mai 2008 à 19:32
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
10 janv. 2006 à 22:37
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
3 janv. 2006 à 16:20
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
3 janv. 2006 à 15:56
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
15 déc. 2005 à 17:23
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
15 déc. 2005 à 17:00
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
15 déc. 2005 à 16:56
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
15 déc. 2005 à 15:44
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
15 déc. 2005 à 14:36
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
13 nov. 2005 à 22:05
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
13 nov. 2005 à 00:50
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
8 juin 2005 à 12:17
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
1 juin 2005 à 21:56
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
18 avril 2005 à 17:23
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
18 avril 2005 à 10:04
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
16 avril 2005 à 12:06
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
16 avril 2005 à 11:23
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
15 avril 2005 à 10:24
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
14 avril 2005 à 20:02
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
14 avril 2005 à 10:18
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
11 avril 2005 à 18:28
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
10 mars 2005 à 09:10
Merci beaucoup tmcuh.
tmcuh Messages postés 458 Date d'inscription dimanche 22 décembre 2002 Statut Membre Dernière intervention 18 avril 2009
9 mars 2005 à 12:37
très propre le graphisme, bravo,bonne prog
10
Rejoignez-nous