tutorial - superponer graficas en r ggplot
Biblioteca de gráficos en C (8)
Me preguntaba si había algunas buenas librerías de gráficos para C que fueran fáciles de usar. Es para trazar gráficos 2D y 3D y luego guardarlos en un archivo. Está en un sistema Linux y no hay gnuplot en el sistema en este momento.
¿O simplemente sería más sencillo cambiar a otro idioma y, de ser así, cuál sería fácil de aprender?
Eche un vistazo a PGPLOT. Es viejo pero funciona muy bien y debería estar en los repositorios. PLPLOT también es una opción, es similar y más nuevo, y también debería estar disponible en los repositorios. Ambos son extremadamente poderosos y pueden hacer lo que usted especificó.
Esta pregunta es un poco vaga, "gráficos" es un campo amplio. Puede llegar bastante lejos usando simplemente SDL , pero también puede considerarse "de muy bajo nivel". Debe proporcionar más requisitos.
He usado el formato netpbm algunas veces cuando necesitaba algo simple.
Así es como descubrí que qsort()
(en mi implementación y para los datos proporcionados) realiza un tipo de fusión.
qsort http://i37.tinypic.com/2rnwhnp.gif
Código fuente:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define ARRAY_SIZE 20
#define MAX_VALUE 10
unsigned char arr[ARRAY_SIZE];
void print_array(const void *left, const void *right) {
static int imgs = 0;
int k, j;
FILE *img;
char fname[100];
char rgb[100];
if (++imgs > 9999) return;
sprintf(fname, "img/img%04d.ppm", imgs);
/* create image in "img/" directory */
img = fopen(fname, "w");
if (img) {
fprintf(img, "P3/n%d %d/n255/n", ARRAY_SIZE, MAX_VALUE);
for (j=0; j<MAX_VALUE; j++) {
for (k=0; k<ARRAY_SIZE; k++) {
int colour = 0;
if (left && left == arr+k) colour = 2;
if (right && right == arr+k) colour = 2;
if (arr[k] == MAX_VALUE - j - 1) colour = 1;
switch (colour) {
default: sprintf(rgb, "%d %d %d", 255, 255, 255); break;
case 1: sprintf(rgb, "%d %d %d", 0, 0, 0); break;
case 2: sprintf(rgb, "%d %d %d", 255, 0, 0); break;
}
}
fprintf(img, "%s/n", rgb);
}
}
fclose(img);
} else {
perror("img fopen");
}
}
int cmp(const void *left, const void *right) {
const unsigned char a = *(const unsigned char*)left;
const unsigned char b = *(const unsigned char*)right;
print_array(left, right);
if (a < b) return -1;
if (a == b) return 0;
return 1;
}
int main(void) {
int k;
unsigned int seed = 0; /* or time(0) */
srand(seed);
for (k=0; k<ARRAY_SIZE; k++) {
arr[k] = rand() % MAX_VALUE;
}
print_array(NULL, NULL);
qsort(arr, (size_t)ARRAY_SIZE, sizeof *arr, cmp);
print_array(NULL, NULL);
/* use imagemagick to convert group of files to .gif */
system("convert -delay 0"
" img/img*.ppm"
" -loop 1 img/libc-qsort2.gif");
/* remove .ppm files */
system("rm img/" "*ppm"); /* ... my editor does not like a
slash and a star together,
even inside quotes */
return 0;
}
La mayoría de las personas usa la biblioteca gd para renderizar desde C, pero debe implementar la parte "mapeo matemático".
Me gusta la biblioteca de El Cairo . Tiene una interfaz agradable para C y puede salir en muchos formatos.
Recomiendo el kit de herramientas GUI de Qt , junto con QwtPlot de código abierto y QwtPlot3D . Se implementa en C ++, es fácil de usar, extensible y gratuito ...
Está Clutter . Aquí hay algunos fragmentos de la página sobre:
"Clutter es una biblioteca de software de código abierto para crear interfaces gráficas de usuario rápidas, visualmente ricas, portátiles y animadas".
"El objetivo de Clutter no es específico: no implementa un estilo particular de interfaz de usuario, sino que proporciona una base genérica rica que facilita la creación rápida y sencilla de kits de herramientas de nivel superior adaptados a las necesidades específicas".
"Desarrollado en C, con enlaces de lenguaje para Perl, Python, C #, C ++, Vala y Ruby".
"Escena-gráfico de elementos de interfaz 2D en capas manipulados en el espacio 3D a través de posición, agrupamiento, transparencia, escala, recorte y rotación".
No lo he probado, pero parece bastante flexible si buscas algo con lo que jugar.