Tablesaw封装Plot.ly实现数据可视化

上文介绍tablesaw的数据处理功能,本文向你展示其数据可视化功能,并通过几个常用图表示例进行说明。

Plot.ly包装

可视化是数据分析的重要组成部分,无论你只是"查看"新数据集还是验证机器学习算法的结果。Tablesaw是一个开源、高性能的Java"数据框架",也是一个用于转换数据以供分析的库。Tablesaw的新绘图框架提供了用Java为整个分析过程创建可视化的平台,从最早的探索到最后的展示。

该框架提供了Java版本的Plot.ly开源JavaScript可视化库封装。Plot.ly基于出色的D3(数据驱动文档)框架,Plot.ly非常好,事实上,它被广泛用于JavaScript以外的语言,如Python和R,虽然这些语言已经有了可靠的可视化选项。与其他语言一样,tablesaw提供的包装器,可以很容易地用纯Java构造图形,并用HTML和JavaScript呈现它们。

加入依赖

xml 复制代码
<dependency>
  <groupId>tech.tablesaw</groupId>
  <artifactId>tablesaw-core</artifactId>
  <version>0.43.1</version>
</dependency>
<!-- Tablesaw的绘图扩展,用于数据可视化 -->
<!-- https://mvnrepository.com/artifact/tech.tablesaw/tablesaw-jsplot -->
<dependency>
  <groupId>tech.tablesaw</groupId>
  <artifactId>tablesaw-jsplot</artifactId>
  <version>0.43.1</version>
</dependency>

时间序列图示例

java 复制代码
    Table bush = Table.read().csv("bush.csv");
    foxOnly = bush.where(bush.stringColumn("who").equalsIgnoreCase("fox"));
    Plot.show(
            TimeSeriesPlot.create("Fox approval ratings for George W. Bush", foxOnly,
                    "date", "approval")
    );

上面代码,首先加载数据,然后过滤数据。接着创建时间序列图,create()方法包括四个参数,分别为标题和数据,后面两个参数分别指定x轴和有轴数据列。当然我们也可以分为两步实现,首先创建图,然后调用 Plot.show()方法显示图形:

java 复制代码
    Figure foxPlot =
            TimeSeriesPlot.create("George W. Bush approval ratings", foxOnly,
                    "date", "approval");
    Plot.show(foxPlot);

散点图示例

  • 数据说明

    Month,Record,Robberies
    1966-01,1,41
    1966-02,2,39
    1966-03,3,50
    1966-04,4,40
    1966-05,5,43
    1966-06,6,38
    1966-07,7,44
    1966-08,8,35
    1966-09,9,39
    1966-10,10,35
    1966-11,11,29
    1966-12,12,49
    1967-01,13,50

第一列是年月,第二列是月份序号,第三列是抢劫案发生次数。我们希望采用折线图方式展现数据。为了更好定义图形,我们通过Layout 和 ScatterTrace两个类实现:

java 复制代码
Table robberies = Table.read().csv("boston-robberies.csv");

Layout layout =
        Layout.builder("Boston Robberies by month: Jan 1966-Oct 1975",
                "year", "robberies").build();

ScatterTrace trace =
        ScatterTrace.builder(robberies.numberColumn("Record"),
                robberies.numberColumn("Robberies"))
                .mode(ScatterTrace.Mode.LINE)
                .marker(Marker.builder().color("#3D9970").build())
                .fill(ScatterTrace.Fill.TO_NEXT_Y)
                .build();

Plot.show(new Figure(layout, trace));

Layout 类的构建器模式来创建一个 Layout 实例。传递给构建器的参数 "Boston Robberies by month: Jan 1966-Oct 1975" 作为图形的标题,"year""robberies" 这两个参数指定布局中坐标轴等相关元素(比如横坐标可能对应 year,纵坐标对应 robberies),最后调用 build() 方法来生成实际的 Layout 对象,该对象会定义可视化图形整体的布局结构。

使用 ScatterTrace 类的构建器模式创建 ScatterTrace 对象(用于定义散点图相关的配置和数据绑定)。在构建器的参数中,通过 robberies.numberColumn("Record")robberies.numberColumn("Robberies") 来指定散点图中数据对应的列(这里分别获取名为 "Record""Robberies" 两列的数据)。通过 .mode(ScatterTrace.Mode.LINE) 将散点图的展示模式设置为折线模式,意味着这些散点会用线段依次连接起来形成折线图。

.marker(Marker.builder().color("#3D9970").build()) 这部分用于设置散点(或者说折线图上数据点对应的标记)的样式,这里指定了颜色为 "#3D9970",是通过先创建一个 Marker 构建器对象,设置颜色属性后再生成实际的 Marker 对象传递给 ScatterTrace 构建器。.fill(ScatterTrace.Fill.TO_NEXT_Y) 是在折线和下一个 Y 轴坐标范围之间进行填充操作),然后调用 build() 方法完成 ScatterTrace 对象的构建,这个对象包含了散点图(折线模式下)具体的数据和样式等配置信息。

k线图示例

每个时间点展示开盘价、最高和最低价、收盘价。

java 复制代码
Table priceTable = Table.read().csv("ohlcdata.csv");
Plot.show(OHLCPlot.create("Prices", priceTable, "date", "open", "high", "low", "close"));

总结

本文介绍tablsesaw数据可视化功能,包括引入依赖,几个常用图表示例。更多内容可参考官方示例

相关推荐
Sharewinfo_BJ11 小时前
智信BI:解决Power BI全面兼容问题的新选择
数据分析·数据可视化·powerbi
奔跑吧邓邓子11 小时前
【Python爬虫(27)】探索数据可视化的魔法世界
开发语言·爬虫·python·数据可视化
B站计算机毕业设计超人18 小时前
计算机毕业设计hadoop+spark旅游景点推荐 旅游推荐系统 旅游可视化 旅游爬虫 景区客流量预测 旅游大数据 大数据毕业设计
大数据·hadoop·爬虫·深度学习·机器学习·数据可视化·推荐算法
Z小明1 天前
基于 Highcharts 实现 Vue 中的答题统计柱状图组件
前端·数据可视化
B站计算机毕业设计超人2 天前
计算机毕业设计Python农产品推荐系统 农产品爬虫 农产品可视化 农产品大数据(源码+LW文档+PPT+讲解)
大数据·python·机器学习·网络爬虫·课程设计·数据可视化·推荐算法
想做富婆3 天前
帆软报表FineReport入门:简单报表制作[扩展|左父格|上父格]
数据可视化·帆软报表·动态报表·帆软入门
谁不学习揍谁!4 天前
基于Django快递物流管理可视化分析系统(完整系统源码+数据库+详细开发文档+万字详细论文+答辩PPT+详细部署教程等资料)
数据库·人工智能·后端·python·django·数据可视化
Jackson@ML4 天前
Python数据可视化简介
开发语言·python·数据可视化
四棱子5 天前
olcs插件实现二三维地图切换
前端·数据可视化
万象工作室7 天前
【开源项目】数字孪生武汉~超经典智慧城市CIM/BIM数字孪生可视化项目——开源工程及源码
vue.js·人工智能·信息可视化·云计算·vue·智慧城市·数据可视化