Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Построение графика


Автор: HelgaZaharova 7.2.2009, 01:59
ВОт такая задачка... Необходимо открыть файл с данными, и на основании этих данных построить график. С файлом-то проблем не возникает, но вот как график построить не знаю. smile 

Автор: NightmareZ 7.2.2009, 02:37
Что конкретно непонятно в рисовании графиков?

Автор: source777 7.2.2009, 21:53
Helga, для начала поставь http://www.microsoft.com/downloads/details.aspx?FamilyId=130F7986-BF49-4FE5-9CA8-910AE6EA442C&displaylang=ru  smile 

Автор: RLZ 19.2.2009, 20:26
А для второго фреймворка есть что-либо подобное?

Автор: source777 19.2.2009, 23:01
Цитата(RLZ @  19.2.2009,  20:26 Найти цитируемый пост)
А для второго фреймворка есть что-либо подобное? 
http://zedgraph.org/wiki/index.php?title=Sample_Graphs, http://www.steema.com/products/teechart/gallery.html demo.

Автор: RLZ 25.2.2009, 20:22
Юзаю ZedGraph! Рисует только один раз, при следующем вызове рисует поверх старого графика, не очищая область. Как сделать так, чтобы каждый раз перед рисованием область графика очищалась, если нет ни Clear, ни Reset? Кто юзает, подскажите! Заранее благодарен!

Автор: source777 25.2.2009, 21:14
Цитата(RLZ @  25.2.2009,  20:22 Найти цитируемый пост)
Как сделать так, чтобы каждый раз перед рисованием область графика очищалась, если нет ни Clear, ни Reset? 
Это что по принципу "словарный запас кончился - не знаю что теперь делать"? документация для кого существует, а?

P.S. Всё зависит от того, как именно ты хочешь очистить область графика... удалить все панели рисования(MasterPane.PaneList.Clear), удалить все кривые с конкретной панели рисования(myPane.CurveList.Clear) или удалить все точки одной из кривых на конкретной панели рисования(myPane.CurveList[0].Clear)... все эти случаи описаны в документации!

Автор: HelgaZaharova 6.4.2009, 18:23
Компоненты-то были... Но мне нужно построить с помощью FusionCart.Вообщем, работа такая - у меня есть БД в MS SQL Server, в ней данные... на основании данных нужно построить графк и вывести на экран. smile  smile 

Автор: source777 6.4.2009, 23:16
В таком случае, just do it!

Автор: HelgaZaharova 7.4.2009, 00:02
А как по данным из Grid построить график. Изначально именно это и интересовало ))

Автор: HelgaZaharova 9.4.2009, 00:08
Цитата

Что конкретно непонятно в рисовании графиков? 


У меня есть файл Data Html (вычитала, что графики строятся на основании таких вот файлов) - в нем содержится инфо, по которой нужно построить, но как-то не могу получить нужный график(((

Автор: HelgaZaharova 11.4.2009, 13:34
Вообщем, если кому-то будет нжно, то ответ на поставленную задачу можно найти http://www.codeproject.com/KB/web-image/FusionChartsHelperClass.aspx smile 

Автор: HelgaZaharova 1.6.2009, 14:28
Есть еще один способ для построения графика.
Создаем объектную модель для элементов будущего графика:
Код

namespace MSChart.Utility
{ 
public class Graph
    {
        public IList<Category> categories = new List<Category>();
        public IList<DataSet> dataSets = new List<DataSet>();

        public String Name
        {
            get;
            set;
        }
        public IList<Category> Categories
        {
            get { return categories; }
            protected set { categories = value; }
        }
        public IList<DataSet> DataSets
        {
            get { return dataSets; }
            protected set { dataSets = value; }
        }
        public Graph()
        {
            //
            // TODO: Add constructor logic here
            //
        }
    }

    public class Category
    {
        public String Name
        {
            get;
            set;
        }
        public Category()
        {
            //
            // TODO: Add constructor logic here
            //
        }
    }

    public class DataSet
    {
        private IList<String> values = new List<String>();
        public DataSet(String name, String color)
        {
            Name = name;
            Color = color;
        }
        public DataSet()
        {
        }
        public String Name
        {
            get;
            set;
        }
        public String Color
        {
            get;
            set;
        }
        public IList<String> Values
        {
            get { return values; }
            protected set { values = value; }
        }
    }


Graph – представляет собой диаграмму в объектной модели;
Category – представляет собой категорию в объектной модели;
DataSet – представляет собой коллекцию данных для конкретной серии. 
Далее прописываем метод для построения файла в Xml-формате:
Код

public class MSChart
    {
        private Graph _graph;
        private string doc1;
        public MSChart(Graph graph)
        {
            _graph = graph;
           
        }
        public string BuildDataSource()
        {
            XDocument doc = new XDocument(
                new XElement("graph",
                    new XAttribute("caption", _graph.Name),
                    new XAttribute("fromnum", "0"),
                    new XAttribute("decimalPrecision", "0"),
                    new XElement("categories",
                        from x in _graph.categories
                        select 
                            new XElement("category",
                                new XAttribute("name", x.Name))),
                        from x in _graph.dataSets
                        select
                            new XElement("dataSet",
                                new XAttribute("seriesName", x.Name),
                                new XAttribute("color", x.Color),
                                from y in x.Values
                                    select
                                    new XElement("set",
                                        new XAttribute("value", y)))
            )
            );
            return doc.ToString().Replace("\"", "'");            
        }

В основном тексте программы прописываем код для заполнения xml-источника:
Код

 List<String> values = new List<String>();
        List<String> legend = new List<String>();
        Graph graph = new Graph();
        graph.Name = "Зависимость глубины проплавления от силы тока";
        Int32 startValue = 1;



        MSChart.Utility.DataSet dataSet1 = new MSChart.Utility.DataSet("h1", "10a625");
        graph.DataSets.Add(dataSet1);

        MSChart.Utility.DataSet dataSet2 = new MSChart.Utility.DataSet("h2", "fea203");
        graph.DataSets.Add(dataSet2);

        MSChart.Utility.DataSet dataSet3 = new MSChart.Utility.DataSet("h3", "fbfe03");
        graph.DataSets.Add(dataSet3);




        foreach (DataRow row in table.Rows)
        {
            values.Add(startValue.ToString());
            Category category = new Category();
            category.Name = row[0].ToString();
            graph.Categories.Add(category);

            legend.Add(String.Format("&nbsp;&nbsp;<b>{0}</b>&nbsp;-&nbsp;{1}", startValue, row[0]));

            dataSet1.Values.Add(DataRowExtensions.Field<Int32>(row, "h1").ToString());
            dataSet2.Values.Add(DataRowExtensions.Field<Int32>(row, "h2").ToString());
            dataSet3.Values.Add(DataRowExtensions.Field<Int32>(row, "h3").ToString());
        }

        rptLegend.DataSource = legend;
        rptLegend.DataBind();

        MSChart.Utility.MSChart chart = new MSChart.Utility.MSChart(graph);

        divLineChart.InnerHtml = FusionCharts.RenderChartHTML(ResolveClientUrl("~/FusionCharts/FCF_MSLine.swf"), "", chart.BuildDataSource(), "id", "600", "300", false);        


Данный источник берет данные из таблиц БД, созданной на сервере.
Правда в данном коде есть недочеты, которые я пока не исправила:
1. xml-источник не сохраняется (т.е. метод CreateChart не видит его, а значит не видит данных для построения графика)
2.  http://forum.vingrad.ru/forum/topic-261560/anchor-entry1884048/0.html
3. График выбирает строки из таблицы, если данные прописаны в столбцах, код работает неверно (график будет строиться не по тем данным)
Если кто-то будет разбираться и найдет, как исправить эти ошибки - буду рада ответам  smile 
 Так же http://www.maani.us/xml_charts/index.php можно посмотреть коллекцию готовых xml-источников для построения chart-объектов различного типа и сложности.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)