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


Автор: Дося 4.4.2006, 22:38
Народ, как сделать график вручную, который бы брал значения из набора данных? smile
Мне надо, чтобы по оси Х были значения времени, а по оси Y - значения измерений. Подскажите, с чего начать. Я никак не могу додуматься... Что писать в DBChart1->AddSeries... ?
smile

Автор: Дося 4.4.2006, 23:20
Попробовал такой код:

Код

DBChart19->Series[0]->AddXY(2,Form1->Table3G1V->Value);


Как вместо двойки по оси Х дату отабразить? У меня дата берётся из ComboBox.

Автор: AntonChik 5.4.2006, 08:28
в настройках оси Х ставится галочка ,что тип будет DateTime
ну а потом пишешь ...Series[0]->AddXY(Time(),y);
ну или если надо, то вместо Time() ставишь Date()...


Автор: Дося 5.4.2006, 09:06
Хм...

А если чуть-чуть точнее?... Я пишу DBChart19->Series[0]->AddXY(Date(CBDataNuo->Text),6); и выкидывает ошибку... Никак не получается вывести дату на ось. В настройках оси Х поставил галочку, что будет Date Time.

А вообще большой будет код, если мне надо сделать, чтобы Х - это были значения дат из двух ComboBox (интервал задаётся с помощью ComboBox, например с 2006.01.01 до 2006.02.01), а Y - значения, соответствующие датам из набора данных? smile

Автор: AntonChik 6.4.2006, 05:00
Date(CBDataNuo->Text) - это гон какой-то
я тебе писал подставлять Date() , то бишь текущую дату (или лучше Time() т.к. более наглядно будет для примера). проверь будет ли так работать...
потом попробуй подставлять StrToDate(CBDataNuo->Text);
но это если CBDataNuo->Text соответствует по записи типу TDateTime , т.е. - не помню как для даты-,а для времени должно быть в виде HH:MM:SS (ну для даты думаю что-то вроде YY:MM:DD)

Автор: megabist 6.4.2006, 15:38
вопрос а как пстроить график по разбросу?
тоесть значения скачут и нужен усреднённый график?

Автор: _hunter 6.4.2006, 15:58
посчитать средние значения и построить по ним график...

Автор: AntonChik 7.4.2006, 05:38
Цитата(megabist @ 6.4.2006, 15:38 Найти цитируемый пост)
вопрос а как пстроить график по разбросу?
тоесть значения скачут и нужен усреднённый график?


в Методах Анализа Данных и в комп.графике существует множество методов сглаживания... копай в эту сторону...

Автор: Дося 13.4.2006, 21:58
Цитата(AntonChik @ 6.4.2006, 05:00)
Date(CBDataNuo->Text) - это гон какой-то
я тебе писал подставлять Date() , то бишь текущую дату (или лучше Time() т.к. более наглядно будет для примера). проверь будет ли так работать...
потом попробуй подставлять StrToDate(CBDataNuo->Text);
но это если CBDataNuo->Text соответствует по записи типу TDateTime , т.е. - не помню как для даты-,а  для времени должно быть в виде HH:MM:SS (ну для даты думаю что-то вроде YY:MM:DD)

Не идёт... smile Блин, люди... Я с этим графиком уже 3 месяца ковыряюсь какой... И никак. Помогите... smile Вам 10-15 минут, и всё готово. Подскажите, плиз. Я даже не могу найти за деньги у себя в городе, кто бы сделал... Может, кто тут сделает? Переведу евро на счёт. smile

Автор: Ctrl_Alt_Del 13.4.2006, 22:15
Дося, выложи проект. Посмотрим чем можно помочь. smile

P.S. посмотри вложение, может поможет разобраться.

Автор: Дося 13.4.2006, 22:48
Окей, сейчас выложу...

Алиас базы данных - dbVibrDataStore. Драйвер - STANDART. Проект http://www.kalinka.projektas.lt/downloads/programa.rar. Форма с графиком будет Unit13.cpp. Мне надо, чтобы по оси X откладывались даты из CBDataNuo и CBDataIki (по-русски, CBДатаС и СВДатаДо),т.е. интервал, а по Y - значения, соответствующие этим датам из таблицы Table3... Вот... smile

Спасибо огромное за ранее за помощь.

P.S.: Твой пример не смог скомпилировать - просит какие-то файлы...

Автор: Дося 14.4.2006, 23:17
Ну как? smile

Автор: Ctrl_Alt_Del 15.4.2006, 09:16
Дося, да что-то не очень. Трудновато разобраться с языком smile
Дата берется в поле data в lentMatavimai.db, а по оси Y значение какого поля?

Автор: Дося 16.4.2006, 01:09
Sorry, chto pishu latyn'ju - netu russkih bukv na klave. smile
Da, data beretsia iz polia Table3Data iz lentMatavimai.db. Po osi Y berutsia tak: naprimer, vybiraesh' iz ComboBox spiska (CBGuolis) podshipnik 1, iz ComboBox spiska (CBDataNuo) datu, v sledushem ComboBox (CBDataIki) druguju datu, i RadioButton RBV (eto napravlenie po-russki). smile Po osi Y dolzhny byt' znachenija Table3G1V (eto esli CBGuolis = 1, a RBV = V). Vot.

Автор: Ctrl_Alt_Del 16.4.2006, 22:35
Дося, посмотри вот этот код, сырой конечно, но хоть что-то  smile 
Вообще я не уверен, что я тебя правильно понял.  smile 
Код

void __fastcall TForm13::BNubreztiGClick(TObject *Sender)
{
     TDateTime t = TDateTime(CBDataNuo->Text);
     Form1->Table3->Locate("data",t,TLocateOptions() << loCaseInsensitive);
     AnsiString f = "G"+CBGuolis->Text;
     if(RBV->Checked) f+="V";
     else if(RBH->Checked) f+="H";
     else if(RBA->Checked) f+="A";
     else if(RBg->Checked) f+="g";
     double x = Form1->Table3->FieldByName(f)->AsFloat;
     DBChart19->Series[0]->Add(x,t.DateString(),clRed);
     t = TDateTime(CBDataIki->Text);
     Form1->Table3->Locate("data",t,TLocateOptions() << loCaseInsensitive);
     x = Form1->Table3->FieldByName(f)->AsFloat;
     DBChart19->Series[0]->Add(x,t.DateString(),clRed);
}

А вообще доработать нужно базу. А то многие поля пустые. 

Автор: Дося 16.4.2006, 23:28
Спасибо, что пытаешься помочь. smile На днях постараюсь разобраться. А поля пустые, т.к. я не знаю данных. Я делаю дипломную. smile  

Автор: Дося 25.5.2006, 22:04
user posted image

Народ, я вот делаю график и столкнулся вот с токой проблемой - график только чертит по двум значениям, пропускает промежуточные значения... В данном примере пропускает дату 2006.05.23. Вот код, которым пользуюсь:

Код

  TDateTime t=TDateTime(CBDataNuo->Text);
  Form1->Table3->Locate("Data",t,TLocateOptions()<<loCaseInsensitive);
  double nuo=Form1->Table3G1V->Value;
  DBChart19->Series[0]->Add(nuo,t.DateString(),clBlack);
  t=TDateTime(CBDataIki->Text);
  Form1->Table3->Locate("Data",t,TLocateOptions()<<loCaseInsensitive);
  double iki=Form1->Table3G1V->Value;
  DBChart19->Series[0]->Add(iki,t.DateString(),clBlack);


Помогите плиз доделать... Заранее пасиба!  

Автор: Дося 26.5.2006, 12:11
Вот сделал немного по-другому - использую цикл, но мне теперь чертит все значения из таблицы. А как сделать, чтобы брал интервал значений, который я указываю с помощью ComboBox?

Вот код:
Код

DBChart19->Series[0]->Clear();
Form1->Table3->First();
while(!Form1->Table3->Eof)
{
  TDateTime t=Form1->Table3Data->Value;
  double y=Form1->Table3G1V->Value;
  DBChart19->Series[0]->Add(y,t.DateString(),clBlack);
  Form1->Table3->Next();
}
  

Автор: Дося 26.5.2006, 14:21
Сделал, чтобы чертил с даты, выбранной в первом ComboBox'e "Nuo". Но чертит с нее до самой последней даты, а мне надо до даты, указанной во втором ComboBox'e "Iki". Никак не могу составить цикл while (...). Помогите, срочно нужно, неужели никто не знает? smile 
Код:
Код

  DBChart19->Series[0]->Clear();
  TDateTime t1=CBDataNuo->Text;
  TDateTime t2=CBDataIki->Text;
  Form1->Table3->Locate("Data",t1,TLocateOptions()<<loCaseInsensitive);
  while(!Form1->Table3->Eof)
  {
    TDateTime t=Form1->Table3Data->Value;
    double y=Form1->Table3G1V->Value;
    DBChart19->Series[0]->Add(y,t.DateString(),clBlack);
    Form1->Table3->Next();
  }
 

Автор: Дося 26.5.2006, 17:50
Как никак разобрался. Если кому-то понадобится, вот код:
Код

    DBChart19->Series[0]->Clear();
    TDateTime t1=CBDataNuo->Text;
    TDateTime t2=CBDataIki->Text;
    Form1->Table3->Locate("Data",t1,TLocateOptions()<<loCaseInsensitive);
    while(Form1->Table3Data->Value<t2)
    {
      TDateTime t=Form1->Table3Data->Value;
      double y=Form1->Table3G1V->Value;
      DBChart19->Series[0]->Add(y,t.DateString(),clBlack);
      Form1->Table3->Prior();
    }
    Form1->Table3->Locate("Data",t2,TLocateOptions()<<loCaseInsensitive);
    double y=Form1->Table3G1V->Value;
    DBChart19->Series[0]->Add(y,t2.DateString(),clBlack);


Особое спасибо Ctrl_Alt_Del за помощь! Респект! smile  

Автор: dilik 26.5.2006, 19:32
Народ! У меня похожий вопрос, но значения я беру не из базы.

Как создать анимирующий график на подобии встроенного в Builder примера Teechart. (примерно C:\Program Files\Borland\CBuilder6\Examples\Teechart). Интересует именно  тип графика "Fast Line". 
       Задача стоит следующим образом - есть 8 датчиков. Для каждого необходимо задать число от 1 до 12. Можно вручную вводить, можно генерировать. А затем по этим данным строить график - по X - время (в секундах например), а по Y - те самые сгенерированные числа от 1 до 12. Как это осуществить с помощью Chart? В примере все генерируется динамически, мне там разобраться с трудом. smile


 ПОДСКАЖИТЕ ПОЖАЛУЙСТА!!!! smile   

Автор: Дося 26.5.2006, 22:32
А где сохраняются данные датчиков? 

Автор: dilik 27.5.2006, 15:41
Цитата(Дося @ 26.5.2006,  22:32)
А где сохраняются данные датчиков?

Сохраняется в базе smile 
Дело в том, что для того, чтобы брать данные из базы, необходимо их отсортировать или что там. В базе хранятся данные всех датчиков, каждый датчик отвечает за конкретный населенный пункт, а мне надо выводить график именно по каждому городу. Ну в принципе, отсортировать наверное не проблема. У меня тип string, т.е. к примеру находится запись "1 (Ялта)" и добавляется в базу нужная информация 

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