2015-04-08 2 views
0

Итак, на этот раз у меня есть матрица под названием zvalue[10][10], и я хотел бы нарисовать карту pm3d, с нормальными сетками x-y, а также с zvalue[i][j] значением (i,j).Как передать gnuplot матрицу и splot pm3d карту в c?

В Gnuplot, я просто использую:

set pm3d map 
splot zvalue matrix using 1:2:3 with pm3d 

И в C++ GNUPLOT труб, я могу использовать функцию gp.file1d() для достижения этой цели.

gp << "splot" << gp.file1d(matrix) << "matrix using 2:1:3" << "with pm3d\n" 

Но сейчас я нахожусь в C GNUPLOT трубы, конечно, я могу записать матрицу в файл с именем zvalue.txt, и используйте следующее:

fprintf(gp, "splot \"zvalue.txt\" matrix using 1:2:3 with pm3d\n") 

Но есть другой путь? Я пытался @ предложение Христа, когда я имею дело с нормальным SPLOT с матрицей, то есть сделать что-то вроде:

int main(void) 
{ 
    FILE *gp = popen(GNUPLOT, "w"); 

    fprintf(gp, "splot '-' matrix using 1:2:3\n"); 
    int i, j; 
    for (i = 0; i < 10; i++) { 
     for (j = 0; j < 10; j++) 
      fprintf(gp, "%d ", i*j); 
     fprintf(gp, "\n"); 
    } 
    pclose(gp); 
    return 0; 
} 

Но когда это pm3d, это не очень хорошо работает. Я также пробовал с splot по пунктам, который хорошо работает для номенклатурного сплита с матрицей, но здесь с pm3d ничего не работает.

+0

Пожалуйста, найдите время и прочитайте http://stackoverflow.com/help/asking, чтобы начать с того, как работает stackoverflow. Особенно, как выглядит ваш нерабочий (но полный) пример с pm3d. И, пожалуйста, посмотрите также http://stackoverflow.com/editing-help, чтобы узнать, как правильно форматировать вопрос. Это облегчает другим читать ваш вопрос и помогать. – Christoph

+0

Спасибо за напоминание, я посмотрю. – Robin

ответ

0

Следующий скрипт отлично работает с pm3d:

#include <stdio.h> 
#define GNUPLOT "gnuplot -persist" 

int main(void) 
{ 
    FILE *gp = popen(GNUPLOT, "w"); 

    fprintf(gp, "set pm3d map\n"); 
    fprintf(gp, "splot '-' matrix using 1:2:3 with pm3d\n"); 
    int i, j; 
    for (i = 0; i < 10; i++) { 
     for (j = 0; j < 10; j++) 
      fprintf(gp, "%d ", i*j); 
     fprintf(gp, "\n"); 
    } 
    pclose(gp); 
    return 0; 
} 

enter image description here

Так что, если у вас есть программа, которая использует pm3d и не работает, это действительно помогло бы увидеть именно что полный файл (чтобы можно было скопировать & вставьте код для компиляции и тестирования).

Смежные вопросы