Advertisement

提高篇(四):在Processing中实现数据可视化:从基础图表到动态展示

阅读量:

在Processing中实现数据可视化:从基础图表到动态展示
摘要:
本文介绍了如何在Processing中进行数据可视化,并展示了从基础图表到复杂动态展示的各种例子。文章详细讲解了条形图、折线图和饼图的实现方法,并探讨了实现实时更新和交互式效果的技术。此外,还讨论了如何结合外部数据源(如CSV文件和网络API)进行可视化以及将结果导出为图片或视频的方法。
核心要点:
基础数据可视化:

  • 条形图:用于比较不同类别中的数据。
  • 折线图:展示数据的变化趋势。
  • 饼图:显示各部分在整体中的比例。
    动态数据可视化:
  • 结合draw()函数实现实时更新。
  • 使用鼠标和键盘输入实现交互式效果。
    结合外部数据源:
  • 从CSV文件读取并绘制图表。
  • 通过API从网络获取实时数据并进行展示。
    使用第三方库增强功能:
  • 使用PeasyCam库进行3D数据可视化。
    保存结果:
  • 使用saveFrame()函数保存图片。
  • 使用VideoExport库导出视频。
    通过这些方法和技术,可以在Processing中高效地将抽象的数据转化为直观的图形,从而更好地理解和分析数据。

提高篇(四):在Processing中实现数据可视化:从基础图表到动态展示


引言

其本质是通过图像化呈现抽象数据信息的技术手段。该系统允许用户借助简洁明了的编程指令生成基础图表并延伸至动态交互式的高级视觉呈现形式。此外,在此框架下完成的数据分析与可视化的整合不仅能够显著提升数据分析效率并促进知识的深入挖掘。本文旨在深入探讨Processing中的数据分析与可视化的集成方法,并提供多方面的实践案例以供参考。


一、基础数据可视化

  1. 条形图:

条形图是最简单也是最常用的图表之一,可以用来比较不同类别的数据。

复制代码
    float[] values = { 50, 75, 100, 125, 150, 175, 200 };
    
    void setup() {
    size(800, 600);
    background(255);
    }
    
    void draw() {
    background(255);
    int barWidth = width / values.length;
    
    for (int i = 0; i < values.length; i++) {
        float barHeight = map(values[i], 0, max(values), 0, height - 20);
        fill(0, 100, 200);
        rect(i * barWidth, height - barHeight, barWidth - 5, barHeight);
    }
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI助手
  1. 折线图:

折线图用来展示数据的变化趋势,特别适合于时间序列数据。

复制代码
    float[] values = { 50, 75, 100, 125, 150, 175, 200 };
    
    void setup() {
    size(800, 600);
    background(255);
    }
    
    void draw() {
    background(255);
    stroke(0);
    noFill();
    
    beginShape();
    for (int i = 0; i < values.length; i++) {
        float x = map(i, 0, values.length - 1, 0, width);
        float y = map(values[i], 0, max(values), height - 20, 20);
        vertex(x, y);
    }
    endShape();
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI助手
  1. 饼图:

饼图适用于显示各部分在整体中的比例。

复制代码
    float[] values = { 25, 50, 75, 100 };
    
    void setup() {
    size(800, 600);
    background(255);
    }
    
    void draw() {
    background(255);
    float total = 0;
    for (float value : values) {
        total += value;
    }
    
    float startAngle = 0;
    for (int i = 0; i < values.length; i++) {
        float angle = map(values[i], 0, total, 0, TWO_PI);
        fill(map(i, 0, values.length, 0, 255), 100, 200);
        arc(width / 2, height / 2, 400, 400, startAngle, startAngle + angle);
        startAngle += angle;
    }
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI助手

二、动态数据可视化

  1. 实时数据更新:

通过结合Processing的draw()函数可以实现实时数据更新和动态展示。

复制代码
    float[] values = new float[20];
    
    void setup() {
    size(800, 600);
    for (int i = 0; i < values.length; i++) {
        values[i] = random(height);
    }
    }
    
    void draw() {
    background(255);
    stroke(0);
    noFill();
    
    beginShape();
    for (int i = 0; i < values.length; i++) {
        float x = map(i, 0, values.length - 1, 0, width);
        vertex(x, height - values[i]);
    }
    endShape();
    
    // 更新数据
    for (int i = 0; i < values.length; i++) {
        values[i] = values[i] + random(-5, 5);
    }
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI助手
  1. 交互式数据可视化:

使用鼠标和键盘输入实现交互式的数据可视化效果。

复制代码
    float[] values = new float[20];
    
    void setup() {
    size(800, 600);
    for (int i = 0; i < values.length; i++) {
        values[i] = random(height);
    }
    }
    
    void draw() {
    background(255);
    stroke(0);
    noFill();
    
    beginShape();
    for (int i = 0; i < values.length; i++) {
        float x = map(i, 0, values.length - 1, 0, width);
        vertex(x, height - values[i]);
    }
    endShape();
    
    // 鼠标控制数据更新速度
    float speed = map(mouseX, 0, width, 1, 10);
    for (int i = 0; i < values.length; i++) {
        values[i] = values[i] + random(-speed, speed);
    }
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI助手

三、结合外部数据源

  1. 从文件读取数据:

可以从CSV文件中读取数据并进行可视化。

复制代码
    String[] rows;
    float[] values;
    
    void setup() {
    size(800, 600);
    background(255);
    rows = loadStrings("data.csv");
    values = new float[rows.length];
    
    for (int i = 0; i < rows.length; i++) {
        values[i] = float(rows[i]);
    }
    }
    
    void draw() {
    background(255);
    int barWidth = width / values.length;
    
    for (int i = 0; i < values.length; i++) {
        float barHeight = map(values[i], 0, max(values), 0, height - 20);
        fill(0, 100, 200);
        rect(i * barWidth, height - barHeight, barWidth - 5, barHeight);
    }
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI助手
  1. 从网络读取数据:

可以通过...的接口从互联网上采集数据,并实现其可视化展示。举个例子来说吧;我们来看看如何通过API调用天气预报服务。

复制代码
    import processing.data.JSONObject;
    
    String apiURL = "http://api.weatherapi.com/v1/current.json?key=YOUR_API_KEY&q=London";
    JSONObject weatherData;
    
    void setup() {
    size(800, 600);
    background(255);
    // 从API获取数据
    weatherData = loadJSONObject(apiURL);
    }
    
    void draw() {
    background(255);
    if (weatherData != null) {
        // 解析并显示数据
        JSONObject current = weatherData.getJSONObject("current");
        float tempC = current.getFloat("temp_c");
        
        textSize(32);
        fill(0);
        text("Current Temperature in London: " + tempC + "°C", 50, height / 2);
    }
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI助手

四、使用第三方可视化库

  1. 使用PeasyCam库进行3D数据可视化:

PeasyCam是一个方便的3D相机库,可以帮助你更轻松地进行3D数据可视化。

复制代码
    import peasy.*;
    
    PeasyCam cam;
    float angle = 0;
    
    void setup() {
    size(800, 600, P3D);
    cam = new PeasyCam(this, 500);
    }
    
    void draw() {
    background(255);
    lights();
    
    float x = 200 * cos(angle);
    float y = 200 * sin(angle);
    
    translate(x, y, 0);
    fill(200, 0, 0);
    box(50);
    
    angle += 0.01;
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI助手

五、将数据可视化导出为图片或视频

  1. 保存图片:

可以使用saveFrame()函数将当前帧保存为图片。

复制代码
    void draw() {
    background(255);
    ellipse(width / 2, height / 2, 100, 100);
    saveFrame("output-####.png");
    }
    
    
      
      
      
      
      
    
    AI助手
  1. 保存视频:

可以使用VideoExport库将可视化结果导出为视频。

复制代码
    import com.hamoid.*;
    
    VideoExport videoExport;
    
    void setup() {
    size(800, 600);
    videoExport = new VideoExport(this, "output.mp4");
    videoExport.startMovie();
    }
    
    void draw() {
    background(255);
    ellipse(width / 2, height / 2, 100, 100);
    videoExport.saveFrame();
    }
    
    void keyPressed() {
    if (key == 'q') {
        videoExport.endMovie();
        exit();
    }
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI助手

结语

通过熟练掌握这些数据可视化技巧,在Processing环境中将数据呈现为直观的图形形式,并助于深入分析与解读数据信息。涵盖基础图表、动态展示功能以及整合外部数据源和第三方库等技术组合方案,在创意编程开发过程中均可提供强有力的技术支撑。在后续内容中,我们将深入探讨更多高级Processing相关技巧,请持续关注!


这篇文章旨在促进你深入掌握Processing的数据可视化技术,并使你的作品更具吸引力、趣味性和表现力。如有疑问或意见,请在评论区留言以便我们共同探讨。

全部评论 (0)

还没有任何评论哟~