побудова діаграм
Нехай є послідовність позитивних дійсних чисел a 1, a 2, ..., an, позначає результати будь-яких вимірювань (наприклад, висоти вершин гір над рівнем моря, площею держав, середні оцінки учнів класу і т.д.). Потрібно побудувати візуалізоване уявлення цієї послідовності з метою порівняння отриманих результатів. У таких випадках використовують діаграми.
1. Кругові діаграми
У круговій діаграмі кожному елементу послідовності відповідає сектор, градусна міра якого пропорційна величині елемента.
Для побудови кругової діаграми необхідно підсумувати всі елементи послідовності, після чого знайти відносини кожного з елементів до отриманої суми (так буде обчислено, яку частину кола потрібно поставити у відповідність застосовується для розрахунку, - тобто розраховуються частки кола, що припадають на цю величину, якщо весь коло прийняти рівним 1). Всі ці розрахунки можна уявити формулами . Потім ці відносні величини переводяться в градуси: , Після чого можна приступати до побудови діаграми.
Алгоритм в цьому випадку буде наступним:
- обчислити суму елементів послідовності;
- знайти величину сектору, відповідного кожної величиною;
- побудувати всі сектори в графічному режимі (в результаті повинен вийти повне коло). Бажано кожен сектор будувати своїм кольором, або використовувати різну штрихування, якщо сектори одноколірні.
Програма побудови кругової діаграми з цього алгоритму представлена нижче:
{Кругова діаграма (с) А.П. Шестаков, 2001.} program Kr_D; Uses Graph; Var a, S: Real; I: Byte; G, M: Integer; Xc, Yc, R: Integer; {Координати центру кола і його радіус} F: Text; {Файл містить дані для побудови діаграми} Alpha: Integer; {Кут, відповідний черговий величиною} SAngle: Integer; Stroka: String; Begin Assign (F, '1.dat'); Reset (F); S: = 0; {Сума елементів послідовності} While Not Eof (F) Do begin Readln (F, a); S: = S + a end; reset (f); G: = detect; M: = 0; initgraph (G, M, ''); Xc: = GetMaxX Div 2; Yc: = GetMaxY Div 2; R: = 100; SAngle: = 0; i: = 1; While Not Eof (f) Do begin Readln (F, a); Alpha: = round (A / S * 360); {Обчислення кута} setcolor (i mod 16 + 1); setfillstyle (1, i mod 16 + 1); {Побудова сектора, відповідного величині} sector (Xc, Yc, SAngle, SAngle + Alpha, R, R); SAngle: = SAngle + Alpha; i: = i + 1; {Вкажемо, якого кольору яка величина відповідає} bar (Xc + 200, Yc-250 + (i-1) * 20, Xc + 220, Yc-250 + (i-1) * 20 + 15); str (a: 8: 2, stroka); outtextxy (Xc + 230, Yc - 250 + 5 + (i - 1) * 20, stroka) end; readln; close (F); closegraph End.
Результат роботи програми для зазначеного на малюнку набору чисел:
2. Стовпчасті діаграми
Для побудови діаграми виділимо на екрані прямокутну область з координатами відповідно верхнього лівого кута (Xlv, Ylv) і правого нижнього (Xpn, Ypn). Висота стовпчика діаграми, відповідного максимальному елементу послідовності, буде збігатися з висотою прямокутника. Ширина стовпця буде залежати від кількості елементів послідовності: чим більше компонент, тим меншою буде ширина. Таким чином, для побудови діаграми потрібно визначити кількість компонентів послідовності і максимальний елемент послідовності. Висота vi чергового стовпця діаграми на екрані буде визначатися формулою де xmax - максимальний елемент послідовності, xi - черговий елемент послідовності.
Алгоритм побудови діаграми наступний:
- визначити кількість елементів послідовності і її максимальний елемент;
- згідно із зазначеною формулою побудувати стовпці діаграми. Їх ширина на екрані може бути розрахована за формулою де n - кількість елементів послідовності.
Програма побудови стовпчастий діаграми з цього алгоритму представлена нижче:
{Стовпчаста діаграма (с) А.П. Шестаков, 2001.} program Stol_D; Uses Graph; Var a, xmax: Real; I, n: Byte; G, M: Integer; F: Text; {Файл містить дані для побудови діаграми} Stroka: String; Xlv, Ylv, Xpn, Ypn: Integer; {Координати вікна виводу діаграми} Begin Assign (F, '1.dat'); Reset (F); if not eof (f) then begin readln (f, xmax); n: = 1 end else n: = 0; While Not Eof (F) Do begin Readln (F, a); if a> xmax then xmax: = a; n: = n + 1 end; reset (f); G: = detect; M: = 0; initgraph (G, M, ''); Xlv: = 50; Ylv: = 50; Xpn: = GetMaxX-100; Ypn: = GetMaxY-50; i: = 0; {Номер стовпця} While Not Eof (f) Do begin Readln (F, a); setcolor (i mod 16 + 1); setfillstyle (1, i mod 16 + 1); {Черговий стовпець} bar (round (Xlv + i * (Xpn-Xlv) / n), Ypn, round (Xlv + (i + 1) * (Xpn-Xlv) / n), round (Ypn- (Ypn-Ylv) / xmax * a)); i: = i + 1; {Вкажемо, якого кольору яка величина відповідає} bar (getMaxx-70, 50+ (i-1) * 20, getMaxx-50, 50+ (i-1) * 20 + 15); str (a: 8: 2, stroka); outtextxy (getMaxx-40, 50+ (i-1) * 20 + 8, stroka); end; readln; close (F); closegraph End.
Результат роботи програми для зазначеного на малюнку набору чисел:
Для кращого сприйняття діаграми було б доцільно побудувати вертикальну вісь з розміткою по ній, що в даній програмі відсутня.
3. Лінійні діаграми
При побудові лінійних діаграм кожної величиною відповідає точка, розташована на певній висоті відносно початку відліку (висота розраховується так само, як і при побудові стовпчастих діаграм), всі крапки з'єднуються лініями. В результаті виходить ламана. Такого роду діаграми найчастіше ладу в тих випадках, коли необхідно візуалізувати динаміку зміни величин.
Програма аналогічна програмі побудови стовпчастих діаграм і наведена нижче.
{Лінійна діаграма (с) А.П. Шестаков, 2001.} program Stol_D; Uses Graph; Var a, xmax: Real; I, n: Byte; G, M: Integer; F: Text; {Файл містить дані для побудови діаграми} Stroka: String; Yn, Yk: Integer; Xlv, Ylv, Xpn, Ypn: Integer; {Координати вікна виводу діаграми} Begin Assign (F, '1.dat'); Reset (F); if not eof (f) then begin readln (f, xmax); n: = 1 end else n: = 0; While Not Eof (F) Do begin Readln (F, a); if a> xmax then xmax: = a; n: = n + 1 end; reset (f); G: = detect; M: = 0; initgraph (G, M, ''); Xlv: = 50; Ylv: = 50; Xpn: = GetMaxX-100; Ypn: = GetMaxY-50; line (xlv, ylv, xlv, ypn); line (xlv, ypn, xpn, ypn); i: = 0; {Номер точки} readln (f, a); Yn: = round (Ypn- (Ypn-Ylv) / xmax * a); str (a: 5: 1, stroka); outtextxy (round (Xlv + i * (Xpn-Xlv) / n) -20, Ypn + 20, stroka); While Not Eof (f) Do begin setcolor (i mod 16 + 1); setfillstyle (1, i mod 16 + 1); {Вкажемо, якого кольору яка величина відповідає} Readln (F, a); Yk: = round (Ypn- (Ypn-Ylv) / xmax * a); {Чергова лінія} line (round (Xlv + i * (Xpn-Xlv) / n), Yn, round (Xlv + (i + 1) * (Xpn-Xlv) / n), Yk); i: = i + 1; str (a: 5: 1, stroka); outtextxy (round (Xlv + i * (Xpn-Xlv) / n) -20, Ypn + 20, stroka); Yn: = Yk; {Запам'ятовуємо положення черговий точки} end; readln; close (F); closegraph End.
Результат роботи програми для зазначеного на малюнку набору чисел:
Всі представлені тут програми можуть бути об'єднані в одну програму із загальним меню, де користувачеві надається можливість вибрати вид діаграми.
Побудова діаграм засобами MS Excel описано тут .
© А.П. Шестаков, 2001.
Сайт створено в системі uCoz