有推荐的方法使用ascii符号绘制数据吗?

问题描述 投票:0回答:2

我正在编写一个裸机 C 语言测试程序,用于捕获一些传感器数据,分析并绘制它。数据非常简单,我只有一个串行控制台接口。尽管如此,我还是想仅使用等宽 ASCII 字符来绘制波形。

有没有标准的、推荐的方法来做这样的事情?

256  |           *
     |          *
     |            *
     |         *   *
128  |        *     *
     |       *       *       *  
     |   *                 ** *
     | ** ***         * * *    **
  0  _______________________________    
c plot ascii
2个回答
1
投票

这只是一对嵌套循环。

size_t n = 26;

for ( size_t y = 8; y--; ) {
   int miny = ( y + 0 ) * 8;
   int maxy = ( y + 1 ) * 8;

   for ( size_t x = 0; x < n; ++x ) {
      putchar( miny <= samples[ x ] && samples[ x ] < maxy ? '*' : ' ' );
   }

   putchar( '\n' );
}

0
投票

如果可用,您可以打开通往

gnuplot
的管道。

#include <stdlib.h>
#include <stdio.h>

int main(void) {
    FILE *gnu = popen("gnuplot", "w");
    if(!gnu) { perror("gnuplot"); return EXIT_FAILURE; }
    fprintf(gnu, "set term dumb\n"
        "$Data <<EOD\n"
        "10\n10\n70\n10\n10\n10\n"
        "100\n130\n160\n230\n260\n200\n"
        "160\n130\n100\n10\n10\n10\n60\n"
        "70\n80\n60\n20\n10\nEOD\n"
        "plot $Data\n");
    pclose(gnu);
    return EXIT_SUCCESS;
}

给我,

  300 +--------------------------------------------------------------------+   
      |             +             +            +             +             |   
      |                                                      $Data    A    |   
  250 |-+                         A                                      +-|   
      |                                                                    |   
      |                        A                                           |   
      |                                                                    |   
  200 |-+                           A                                    +-|   
      |                                                                    |   
      |                     A          A                                   |   
  150 |-+                                                                +-|   
      |                  A                A                                |   
      |                                                                    |   
  100 |-+              A                     A                           +-|   
      |                                                                    |   
      |     A                                             A  A             |   
      |                                                 A       A          |   
   50 |-+                                                                +-|   
      |                                                                    |   
      |  A    A  A  A             +            A  A  A       +     A A     |   
    0 +--------------------------------------------------------------------+   
      0             5             10           15            20            25  

您尚未真正提供您正在使用的终端功能的详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.