Форум — 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 16:42:42 MSK) Показать ответ Ссылка
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 17:28:38 MSK) Показать ответы Ссылка
Ответ на: комментарий от AITap 04.02.12 16:42:42 MSK Печально :( pento ★★★★★ (04.02.12 17:39:13 MSK) автор топика Ссылка
Ответ на: комментарий от anonymous 04.02.12 17:28:38 MSK Эммм, не уверен, что шарп - это линукс вей, но всё равно спасибо :) pento ★★★★★ (04.02.12 17:39:54 MSK) автор топика Показать ответ Ссылка
Ответ на: комментарий от anonymous 04.02.12 17:28:38 MSK Интересно, надо будет взглянуть. И надо будет добавить субпиксельное сглаживание в соответствии с разрешением картинки. ms-dos32 (04.02.12 18:33:17 MSK) Ссылка
Ответ на: комментарий от pento 04.02.12 17:39:54 MSK А я думал, что это cpp ms-dos32 (04.02.12 18:33:49 MSK) Ссылка
gnuplot умеет. Можешь еще глянуть альтернативы, которые мне насоветовали тут. observer ★★★ (05.02.12 05:22:17 MSK) Показать ответ Ссылка
Ответ на: комментарий от observer 05.02.12 05:22:17 MSK Вот например. observer ★★★ (05.02.12 05:25:13 MSK) Показать ответы Ссылка
Ответ на: комментарий от observer 05.02.12 05:25:13 MSK Криво конечно, если честно, был уверен, что поддерживает он все это нативно. observer ★★★ (05.02.12 05:30:26 MSK) Ссылка
Ответ на: комментарий от observer 05.02.12 05:25:13 MSK Спасибо, посмотрю! pento ★★★★★ (05.02.12 11:32:10 MSK) автор топика Ссылка
#!/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 11:46:17 MSK) Ссылка