Работа с компонентом Chart

Начну, пожалуй, с того, что компонент Chart используется для построения разного рода графиков и диаграмм.

У компонента имеется целая куча настроек, которые, в большинстве своем, отвечают за его внешний вид, а не функционал.

Для того чтоб построить график, необходимо его добавить (на вкладке Series).

Настройки компонента Chart

Тут, как вы уже, вероятно догадались, необходимо выбрать вид графика.

В дальнейшем, обращаться к созданному ряду (Series или серии) можно так:

1
Series1->AddXY(znach_x,znach_y,"Название ряда",clRed);

Здесь Series1 – название серии, а znach_x и znach_y представляют собой значения по X и Y, соответственно. Последним задается цвет линии (в примере, clRed).

Сокращенный вариант выглядит так:

2
Series1->AddXY(znach_x,znach_y);

Здесь добавляются лишь значения ряда. А его цвет и название настраиваются вручную.

В случае, если вам необходимо построить гистограмму или круговую диаграмму, задается лишь одно значение. Например, так:

3
Series1->Add(znach_x,"Название ряда",clYellow);

Из любопытного: включать и выключать режим 3D можно посредством установки чекбокса (компонент CheckBox). Обработчик события клика по нему (OnClick) может быть таковым:

4
Chart1->View3D =! Chart1->View3D;

Здесь Chart1 – название компонента.

Пара скринов работы компонента Chart приведена ниже.

Круговая диаграмма (режим 3D).

Круговая диаграмма, компонент Chart

Гистограмма (режим 2D).

Гистограмма, компонент Chart

23 comments on “Работа с компонентом Chart

  1. Интересный у вас блог, желаю вам дальнейшего развития. И главное не останавливайтесь перед трудностями

    1. Спасибо.
      У вас тоже интересный =)
      Правда, смущает отсутствие подписки на комментарии (и просто подписки). А так все замечательно )))

  2. К сожалению, главная ставка при создании Chart делалась не на её функциональность, а на внешний вид. Ведь дополнительные ненужные настройки только мешают при работе, а программа должна быть удобной и практичной. Спасибо за статью, желаю Вам удачи.

    1. В этом вы, бесспорно правы. Хотя, внешний вид, вкупе с простотой настройки делают компонент довольно популярным среди начинающих программистов.

  3. Я пользовалась какое то время этой программой, но сейчас отказалась. Нашла по лучше программку. А в этой программе, как правильно сказал Lan, мало функциональности.

  4. Не смог разобраться в настройках компонента Chart!очень всё запутанно!Пожалуйста помогите разобраться!

  5. Полезно, спасибо!
    А может ли этот компонент динамически в цикле ставить по оси Х значения из двухмерного массива для соответствующих значений Y? Спасибо.

    1. Да, конечно можно. Например так:
      Построение графика y=5x+2. Код:

      1
      2
      3
      4
      5
      6
      7
      8
      
      float X[10]; //значения массива следует задать (я задам их в основном цикле - вам, возможно, лучше это сделать в др. месте
      float y;
      for(int =0;i<10;i++)
      {
       X[i]=2*i+1;  //задаем значения Х
       y=5*X[i]+2;  //задаем значения у
       Series1->AddXY(X[i],y);  //выводим график
      }

      При этом Series1 можно задать Lines (посмотрите в граф. виде — там все нарисовано))))
      Если не получится — напишите.

  6. Не знаю, в какой теме лучше спросить. Данные для чарта должны считываться из файла. Задаю
    ifstream infile;
    infile.open(«name»);
    В таком виде все в порядке. Но мне надо, чтобы пользователь мог сам ввести имя файла, например, через Edit.
    Делаю так
    AnsiString str;
    str = Edit1->Text;
    infile.open(str);
    Не может открыть файл. Не подскажете, как быть?

    1. Можно, конечно, попробовать кавычки поставить (в пхп бы сработало):

      infile.open("""str""");

      а вот си, боюсь, не глотнет. Просто потому, что код генерируется не «по гарячему», а компилятору возможные названия файлов не известны.
      Посоветовала бы перебрать все названия файлов в сравнениях:

      if(str == "nazvanie_1")
       infile.open("nazvanie_1");
      else if(str == "nazvanie_2")
       infile.open("nazvanie_2");
      else if(...
      ...
      ets
  7. Здравствуйте, у меня по горизонтальной оси значения идут не по возрастанию, вот код:
    void __fastcall TForm1::Button1Click(TObject *Sender)

    {
    float x;
    float P0=1,n=1,V0=1,S=1,V1=1,e,L;
    FILE *Z;

    x=StrToFloat(Edit1->Text);
    P0=1*pow(10,6);
    n=1.3;
    V0=1.171*pow(10,-3);
    S=8.65*pow(10,-3);
    V1=V0-S*x;
    e=pow(V0/V1,n) ;
    L=(P0*V0)/(n-1)*(pow(e,(n-1)/n)-1);
    Edit2->Text=FloatToStr(L);
    Z=fopen(«name»,»a»);
    fprintf(Z,»%f %f»,x,L);
    fclose(Z);
    }
    //—————————————————————————

    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    int i;
    float x1[20],L1[20];
    FILE *Z;
    Z=fopen(«name»,»r»);
    for(i=0;iAdd(L1[i],x1[i],clRed);}
    fclose(Z);
    }
    //—————————————————————————
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    Close();
    }
    //—————————————————————————

    1. А вы не могли бы код вставить используя теги «Код» (кнопка над формой комментирования)? Просто куска кода нет… И в силу этого не очень ясно где именно происходит прорисовка графика и простановка чисел на нем.

  8. У вас на 3 картинке (гистограма) по оси х идет текст, как ето делаетса?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *