Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/34: Рейтинг темы: голосов - 34, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 04.09.2017
Сообщений: 26
1

Круговая диаграмма

13.10.2017, 20:31. Показов 6592. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Напишите программу, которая на поверхности объекта TImage рисует круговую диаграмму, отражающую например, товарооборот продуктового магазина (или любые другие данные). Сектора должны быть выделены разными цветами.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.10.2017, 20:31
Ответы с готовыми решениями:

Круговая диаграмма
попытаюсь предельно просто объяснить суть того, что я делаю: Я вывожу круговую диаграмму по...

Круговая диаграмма
Пишу программу, не могу разобраться как работает компонент TChart. Не могу понять как подписать...

Круговая диаграмма
Нужно построить круговую диаграмму которая берет значения с файла (Кол-во значений 10). При чем...

Круговая диаграмма
2010 2011 2012 2013 2014 1 10 50 96 0 5 2 15 30 1 10 ...

15
Эксперт Pascal/Delphi
6810 / 4567 / 4819
Регистрация: 05.06.2014
Сообщений: 22,438
14.10.2017, 08:34 2
Создание круговой диаграммы с помощью Canvas
Цитата Сообщение от igrodar Посмотреть сообщение
на поверхности объекта TImage
Это переделайте самостоятельно.
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
14.10.2017, 10:22 3
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

Для примера. Можно переделать количество, цвета, размеры и т.д. но суть останется.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
{ TForm1 }
//заготовка таблицы
procedure TForm1.FormCreate(Sender: TObject);
begin
with Stringgrid1 do
 begin
  cells[0,0]:='Категория';
  cells[1,0]:='Кол-во';
  cells[0,1]:='Книги';
  cells[0,2]:='Журналы';
  cells[0,3]:='Канцтовары';
  cells[0,4]:='Прочее';
 end;
end;
//заполнение таблицы
procedure TForm1.Button1Click(Sender: TObject);
var i:byte;
begin
randomize;
for i:=1 to n do
StringGrid1.Cells[1,i]:=inttostr(100+random(900));
k:=1;
end;
//рисование
procedure TForm1.Button2Click(Sender: TObject);
var s,x0,y0,r,i,x1,y1,x2,y2:integer;
    u:real;
begin
if k=0 then
 begin
  ShowMessage('Вы не вввели данные');
  exit;
 end;
//рисуем диаграмму
s:=0;
for i:=1 to n do
s:=s+strtoint(StringGrid1.Cells[1,i]);
with Image1.Canvas do
 begin
  brush.Color:=clSilver;
  fillrect(cliprect);
  x0:=Image1.Width div 3;
  y0:=Image1.Height div 2;
  r:=100;
  u:=0;
  x1:=0;
  y1:=0;
  for i:=1 to n do
   begin
    u:=u+2*pi*strtoint(StringGrid1.Cells[1,i])/s;
    x2:=x0+round(r*cos(u));
    y2:=y0-round(r*sin(u));
    brush.Color:=cl[i];
    Pie(x0-r,y0-r,x0+r,y0+r,x1,y1,x2,y2);
    x1:=x2;
    y1:=y2;
   end;
 //рисуем легенду
 for i:=1 to n do
  begin
   brush.Style:=bsSolid;
   brush.Color:=cl[i];
   rectangle(x0+r+20,y0-r+(i-1)*40,x0+r+80,y0-r+(i-1)*40+20);
   brush.Style:=bsClear;
   textout(x0+r+90,y0-r+(i-1)*40,StringGrid1.Cells[0,i]+' '
           +formatfloat('0.00',strtoint(StringGrid1.Cells[1,i])*100/s)+'%')
  end;
 end;
end;
Вложения
Тип файла: rar Круговая диаграмма.rar (125.0 Кб, 77 просмотров)
1
0 / 0 / 0
Регистрация: 04.09.2017
Сообщений: 26
16.10.2017, 18:33  [ТС] 4
А как будет выглядеть код, если в программе использовать компонент TChart?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
16.10.2017, 19:37 5
Не умею я в Лазарус с диаграммами работать, круг рисует но ни подписей ни легенды. Может кто заглянет и исправит, может сам найдешь как.
Вложения
Тип файла: rar Круговая диаграмма на TChart.rar (125.2 Кб, 55 просмотров)
1
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
16.10.2017, 19:48 6
Что так пишу
Pascal
1
Chart1PieSeries1.Add(strtoint(StringGrid1.Cells[1,i]));
что так
Pascal
1
Chart1PieSeries1.AddPie(strtoint(StringGrid1.Cells[1,i]),StringGrid1.Cells[0,i],cl[i])
один черт просто круг с секторами.
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,432
Записей в блоге: 8
16.10.2017, 20:53 7
Цитата Сообщение от Puporev Посмотреть сообщение
Может кто заглянет и исправит
Заглянул.

1) добавляем
Pascal
1
2
implementation
uses TAChartUtils; // <--- Вот этот модуль
2) назначаем стиль отметок:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//заготовка таблицы
procedure TForm1.FormCreate(Sender: TObject);
begin
  Chart1PieSeries1.Marks.Style := smsLabel; // <--- Вот так
  with Stringgrid1 do
  begin
    cells[0, 0] := 'Категория';
    cells[1, 0] := 'Кол-во';
    cells[0, 1] := 'Книги';
    cells[0, 2] := 'Журналы';
    cells[0, 3] := 'Канцтовары';
    cells[0, 4] := 'Прочее';
  end;
end;
, и уже видим подписи.

А легенду надо включать, она по дефолту невидимая.
2
0 / 0 / 0
Регистрация: 04.09.2017
Сообщений: 26
16.10.2017, 22:26  [ТС] 8
а как можно сделать без рандома, а чтобы пользователь вводил данные сам?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,432
Записей в блоге: 8
16.10.2017, 22:41 9
У StringGrid-а в свойствах Options -> goEditing выставить в True, и убрать кнопку "Заполнить данные"
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
17.10.2017, 09:45 10
Цитата Сообщение от volvo Посмотреть сообщение
А легенду надо включать, она по дефолту невидимая.
Да уж, с ней еще и работать нужно, а то выводит каку.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,432
Записей в блоге: 8
17.10.2017, 10:28 11
В принципе, если для серии выставить Legend.Multiplicity в lmPoint (прямо в инспекторе объектов), то получится вполне приемлемо.
1
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
17.10.2017, 10:42 12
Спасибо, чтоб я еще раз полез в TChart Lazarus... Я в Делфи-то иногда блужу, хотя там намного проще.
0
0 / 0 / 0
Регистрация: 04.09.2017
Сообщений: 26
05.11.2017, 15:23  [ТС] 13
При повторном вводе данных диаграммы накладываются друг на друга. Что нужно добавить в код, чтобы происходила очистка старых данных (старой диаграммы)?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
05.11.2017, 15:35 14
Pascal
1
2
3
//рисуем диаграмму
Chart1PieSeries1.Clear;
for i:=1 to StringGrid1.RowCount-1 do
1
0 / 0 / 0
Регистрация: 04.09.2017
Сообщений: 26
12.11.2017, 17:08  [ТС] 15
Как для этой программы сделать меню с использованием компонента TMainMenu, чтобы с помощью него можно было закрыть программу , выбрать размер окна (свернуть/развернуть) и включить ночной режим (фон формы меняется на чёрный)?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
12.11.2017, 17:38 16
Это вопрос к данной теме не имеет отношения, поэтому создайте новую тему.
0
12.11.2017, 17:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.11.2017, 17:38
Помогаю со студенческими работами здесь

Круговая диаграмма
Сформируйте документ Excel, в котором по поданным на вход данным строится круговая диаграмма....

Круговая диаграмма
Каким образом можно нарисовать нечто подобное в VB 6.0, в PictureBox? У меня не получается...

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

Круговая Диаграмма в ВБ 6.0
Есть массив из 10 чисел ..как построить круговую диаграмму ?? Krug.Scale (-15, 15)-(15, -15)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru