Форум — Desktop Чем генерировать круговые диаграммы? 0 1 Есть набор данных вида: item1;n1 item2;n2 item3;n3 ... itemN;nN Хочется сделать круговую диаграмму («пирог»), что бы понять вклад каждого пункта в общее количество. Чем можно такое построить кроме ОО? Желательно консольное. gnuplot такое умеет? Ссылка
http://www.gnuplot.info/faq/faq.html#SECTION00065000000000000000 4.5 Does gnuplot support pie charts? It's not possible in gnuplot, but have a look at http://www.usf.uni-osnabrueck.de/ breiter/tools/piechart/piecharts.en.html AITap ★★★★★★★★★ (04.02.12 12:42:42 UTC) Показать ответ Ссылка
using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; namespace Pie { class Program { static void Main(string[] args) { string inputFile = args[0]; string outputFile = args[1]; string[] lines = File.ReadAllLines(inputFile); List<Tuple<string, int>> data = lines .Where(s => !string.IsNullOrWhiteSpace(s)) .Select(s => s.Split(new[] {";"}, StringSplitOptions.RemoveEmptyEntries)) .Select(pair => new Tuple<string, int>(pair[0], int.Parse(pair[1]))) .ToList(); const int size = 600; using (var bmp = new Bitmap(size, size)) { using (Graphics gfx = Graphics.FromImage(bmp)) { var rnd = new Random(); float sum = data.Select(pair => pair.Item2).Sum(); float angle = 0; int idx = 0; foreach (Tuple<string, int> pair in data) { var color = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256)); float sweep = ++idx == data.Count ? 360 - angle : pair.Item2 / sum * 360f; using (Brush brush = new SolidBrush(color)) gfx.FillPie(brush, 0, 0, size, size, angle, sweep); angle += sweep; } } bmp.Save(outputFile); } } } }// NightmareZ anonymous (04.02.12 13:28:38 UTC) Показать ответы Ссылка
Ответ на: комментарий от AITap 04.02.12 12:42:42 UTC Печально :( pento ★★★★★ (04.02.12 13:39:13 UTC) автор топика Ссылка
Ответ на: комментарий от anonymous 04.02.12 13:28:38 UTC Эммм, не уверен, что шарп - это линукс вей, но всё равно спасибо :) pento ★★★★★ (04.02.12 13:39:54 UTC) автор топика Показать ответ Ссылка
Ответ на: комментарий от anonymous 04.02.12 13:28:38 UTC Интересно, надо будет взглянуть. И надо будет добавить субпиксельное сглаживание в соответствии с разрешением картинки. ms-dos32 (04.02.12 14:33:17 UTC) Ссылка
Ответ на: комментарий от pento 04.02.12 13:39:54 UTC А я думал, что это cpp ms-dos32 (04.02.12 14:33:49 UTC) Ссылка
gnuplot умеет. Можешь еще глянуть альтернативы, которые мне насоветовали тут. observer ★★★ (05.02.12 01:22:17 UTC) Показать ответ Ссылка
Ответ на: комментарий от observer 05.02.12 01:22:17 UTC Вот например. observer ★★★ (05.02.12 01:25:13 UTC) Показать ответы Ссылка
Ответ на: комментарий от observer 05.02.12 01:25:13 UTC Криво конечно, если честно, был уверен, что поддерживает он все это нативно. observer ★★★ (05.02.12 01:30:26 UTC) Ссылка
Ответ на: комментарий от observer 05.02.12 01:25:13 UTC Спасибо, посмотрю! pento ★★★★★ (05.02.12 07:32:10 UTC) автор топика Ссылка
#!/usr/bin/perl use Chart::Pie; $g = Chart::Pie->new(640, 640); $g->set('title' => 'Traffic Chart', 'grid_lines' => 'true', 'legend' => 'bottom', 'precision' => 1); $g->add_datafile("data1.txt", 'set'); $g->png("pie.png"); data1.txt eth0 eth1 eth2 eth3 20 40 30 10 Результат: http://sdio4lor.servebeer.com/pie.png sdio ★★★★★★★★★★★★★★★ (05.02.12 07:46:17 UTC) Ссылка