使用 Java Swing 和 XChart 創建多種圖表

在現代應用程序開發中,數據可視化是一個關鍵部分。本文將介紹如何使用 Java Swing 和 XChart 庫創建各種類型的圖表。XChart 是一個輕量級的圖表庫,支持多種類型的圖表,非常適合在 Java 應用中進行快速的圖表繪制。

1、環境配置

在開始之前,我們需要確保項目中包含了 XChart 的依賴。以下是在 Maven 項目中的 pom.xml 文件中添加 XChart 依賴的方法:

<dependency><groupId>org.knowm.xchart</groupId><artifactId>xchart</artifactId><version>3.8.0</version>
</dependency>

2、創建不同類型的圖表

以下是如何使用 XChart 創建不同類型的圖表的示例代碼。

面積圖


public class AreaChartExample extends JFrame {public AreaChartExample() {// 創建圖表XYChart chart = new XYChartBuilder().width(800).height(600).title("Area Chart Example").xAxisTitle("X").yAxisTitle("Y").build();// 添加數據double[] xData = new double[] {0.0, 1.0, 2.0, 3.0, 4.0};double[] yData = new double[] {2.0, 1.0, 0.0, 1.0, 2.0};chart.addSeries("y(x)", xData, yData).setMarker(SeriesMarkers.NONE).setFillColor(new Color(0, 0, 255, 50));// 將圖表面板添加到 JFrameJPanel chartPanel = new XChartPanel<>(chart);getContentPane().add(chartPanel, BorderLayout.CENTER);}public static void main(String[] args) {SwingUtilities.invokeLater(() -> {AreaChartExample example = new AreaChartExample();example.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);example.pack();example.setVisible(true);});}
}

柱狀圖

public class BarChartExample extends JFrame {public BarChartExample() {// 創建圖表CategoryChart chart = new CategoryChartBuilder().width(800).height(600).title("Bar Chart Example").xAxisTitle("Category").yAxisTitle("Value").build();// 添加數據List<String> categories = Arrays.asList("A", "B", "C");List<Number> series1Values = Arrays.asList(4, 5, 9);List<Number> series2Values = Arrays.asList(3, 8, 5);chart.addSeries("Series 1", categories, series1Values);chart.addSeries("Series 2", categories, series2Values);// 將圖表面板添加到 JFrameJPanel chartPanel = new XChartPanel<>(chart);getContentPane().add(chartPanel, BorderLayout.CENTER);}public static void main(String[] args) {SwingUtilities.invokeLater(() -> {BarChartExample example = new BarChartExample();example.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);example.pack();example.setVisible(true);});}
}

氣泡圖

public BubbleChartExample() {// 創建圖表XYChart chart = new XYChartBuilder().width(800).height(600).title("Bubble Chart Example").xAxisTitle("X").yAxisTitle("Y").build();// 添加數據double[] xData = new double[] {0.1, 0.4, 1.0, 1.5, 2.2, 3.0};double[] yData = new double[] {2.0, 1.5, 0.9, 1.4, 1.9, 2.2};double[] bubbleSize = new double[] {0.1, 0.2, 0.3, 0.4, 0.5, 0.6};chart.addSeries("y(x)", xData, yData, bubbleSize).setMarker(SeriesMarkers.CIRCLE);// 將圖表面板添加到 JFrameJPanel chartPanel = new XChartPanel<>(chart);getContentPane().add(chartPanel, BorderLayout.CENTER);}public static void main(String[] args) {SwingUtilities.invokeLater(() -> {BubbleChartExample example = new BubbleChartExample();example.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);example.pack();example.setVisible(true);});}

折線圖

public class LineChartExample extends JFrame {public LineChartExample() {// 創建圖表XYChart chart = new XYChartBuilder().width(800).height(600).title("Line Chart Example").xAxisTitle("X").yAxisTitle("Y").build();// 自定義圖表樣式chart.getStyler().setLegendPosition(Styler.LegendPosition.InsideNE);chart.getStyler().setMarkerSize(16);// 添加數據double[] xData = new double[] {0.0, 1.0, 2.0, 3.0, 4.0};double[] yData = new double[] {2.0, 1.0, 0.0, 1.0, 2.0};chart.addSeries("y(x)", xData, yData);// 將圖表面板添加到 JFrameJPanel chartPanel = new XChartPanel<>(chart);getContentPane().add(chartPanel, BorderLayout.CENTER);}public static void main(String[] args) {SwingUtilities.invokeLater(() -> {LineChartExample example = new LineChartExample();example.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);example.pack();example.setVisible(true);});}
}

餅圖

public class PieChartExample extends JFrame {public PieChartExample() {// 創建圖表PieChart chart = new PieChartBuilder().width(800).height(600).title("Pie Chart Example").build();// 添加數據chart.addSeries("Category A", 40);chart.addSeries("Category B", 30);chart.addSeries("Category C", 20);chart.addSeries("Category D", 10);// 將圖表面板添加到 JFrameJPanel chartPanel = new XChartPanel<>(chart);getContentPane().add(chartPanel, BorderLayout.CENTER);}public static void main(String[] args) {SwingUtilities.invokeLater(() -> {PieChartExample example = new PieChartExample();example.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);example.pack();example.setVisible(true);});}
}

階梯圖

public class StepChartExample extends JFrame {public StepChartExample() {// 創建圖表XYChart chart = new XYChartBuilder().width(800).height(600).title("Step Chart Example").xAxisTitle("X").yAxisTitle("Y").build();// 添加數據double[] xData = new double[] {0.0, 1.0, 2.0, 3.0, 4.0};double[] yData = new double[] {2.0, 1.0, 0.0, 1.0, 2.0};chart.addSeries("y(x)", xData, yData).setXYSeriesRenderStyle(XYSeries.XYSeriesRenderStyle.Step);// 將圖表面板添加到 JFrameJPanel chartPanel = new XChartPanel<>(chart);getContentPane().add(chartPanel, BorderLayout.CENTER);}public static void main(String[] args) {SwingUtilities.invokeLater(() -> {StepChartExample example = new StepChartExample();example.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);example.pack();example.setVisible(true);});}
}

3、總結

通過本文的示例代碼,您可以在 Java 應用程序中輕松創建多種類型的圖表。XChart 提供了簡單且強大的 API,能夠滿足大多數數據可視化需求。希望這些示例能幫助您更好地理解如何使用 XChart 進行數據可視化。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/38829.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/38829.shtml
英文地址,請注明出處:http://en.pswp.cn/web/38829.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于正負樣本不均衡對樹模型feature importance的影響

正負樣本不平衡確實可能會影響決策樹模型&#xff08;包括隨機森林和梯度提升樹等樹模型&#xff09;中的特征重要性評估。這是因為特征重要性的計算通常基于模型內部節點分裂所帶來的信息增益或基尼不純度減少。 在不平衡的數據集中&#xff0c;模型可能會偏向于頻繁選擇那些…

PSINS中,avp的解讀

PSINS中的AVP PSINS工具箱里面的trj.avp、trj.avp0等中的avp指的是姿態&#xff08;attitude&#xff09;、速度&#xff08;velocity&#xff09;和位置&#xff08;position&#xff09;&#xff0c;最后加一個時間戳t&#xff1a; avp[att; vn; pos; t]。 姿態 姿態的構成…

imx6ull/linux應用編程學習(7)在LCD上顯示文字

在linux中&#xff0c;確實可以像裸機一樣自己取模、自己寫函數打點顯示&#xff0c;但是效率很低&#xff0c;不能滿足多文字顯示&#xff0c;在Linux 系統中&#xff0c; 字體文件通常會放在/usr/share/fonts 目錄下&#xff0c;有了字體文件之后&#xff0c;我們就不需要再對…

X86 +PC104+支持WinCE5.0,WinCE6.0,DOS,WinXP, QNX等操作系統,工業控制數據采集核心模塊板卡定制

CPU 模塊 是一款基于RDC 3306的SOM Express模塊。RDC 3306這款X86架構的CPU是一款性能高、穩定性強的處理器。 它是一款靈活精巧的主板&#xff08;尺寸為91.8mm68.6mm&#xff09;&#xff0c;可以靈活的運用于用戶的底板&#xff0c;節約開發成本。模塊的接插件使用插針形式…

人工智能在音樂創作中的雙刃劍:創新與挑戰

AI在創造還是毀掉音樂&#xff1f; 簡介 最近一個月&#xff0c;輪番上線的音樂大模型&#xff0c;一舉將素人生產音樂的門檻降到了最低&#xff0c;并掀起了音樂圈會不會被AI徹底顛覆的討論。短暫的興奮后&#xff0c;AI產品的版權歸屬于誰&#xff0c;創意產業要如何在AI的陰…

pom文件-微服務項目結構

一、微服務項目結構 my-microservices-project/ ├── pom.xml <!-- 父模塊的pom.xml --> ├── ry-system/ │ ├── pom.xml <!-- 子模塊ry-system的pom.xml --> │ └── src/main/java/com/example/rysystem/ │ └── RySystemApplication.…

數據類型

數據類型 注意&#xff1a;每個字段都必須設置數據類型 整數類型 tinyint - 1字節 - 應用場景&#xff1a;存儲狀態碼 int - 4字節 - 應用場景&#xff1a;沒有特殊要求&#xff0c;一般使用int bigint - 8字節 - 應用場景&#xff1a;存儲極大的整數 CREATE TABLE user (use…

Elasticsearch8.x Spring Data and Spring Boot 3 嘗鮮

在本教程中,我們將通過實際操作和實用的方式,探索使用 Spring Boot 進行 Elasticsearch 的基礎知識。我們將學習如何使用 Spring Data Elasticsearch 模塊創建索引、進行 CRUD 操作、搜索和查詢 Elasticsearch 文檔。我們還將看看如何在我們的 Spring 應用程序中記錄 Elastic…

全網最全的TTS模型匯總,電商人、自媒體人狂喜

近日TTS語音模型在AI圈內熱度不小&#xff0c;今天小編就來給大家做了個TTS模型匯總&#xff01; GPT-SoVITS&#xff08;AI 賣貨主播大模型Streamer-Sales銷冠用的TTS模型&#xff09; 模型簡介&#xff1a;支持英語、日語和中文&#xff0c;零樣本文本到語音&#xff08;TT…

【INTEL(ALTERA)】Nios II軟件開發人員手冊中設計位置的錯誤示例

目錄 說明 解決方法 說明 Nios II軟件開發人員手冊正確無誤 請參閱 Nios 中包含的Nios II硬件設計示例 II 嵌入式設計套件 &#xff08;EDS&#xff09;。提供設計示例 設計上 Altera網站的示例頁面。 Nios II軟件開發人員手冊正確無誤 請參閱 創建本應用程序和創建本 bsp …

Python UUID模塊:深入理解與使用技巧

&#x1f49d;&#x1f49d;&#x1f49d;歡迎蒞臨我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:「stormsha的主頁」…

Atom CMS v2.0 SQL 注入漏洞(CVE-2022-25488)

前言 CVE-2022-25488 是一個發現于 Telesquare SDT-CW3B1 設備中的命令注入漏洞。這一漏洞可以被未經認證的遠程攻擊者利用&#xff0c;通過特殊構造的 HTTP 請求在設備上執行任意命令。以下是關于該漏洞的詳細信息&#xff1a; 漏洞詳細信息 漏洞編號: CVE-2022-25488影響范…

沃爾核材:價值重估

當英偉達這個曾經的GPU行業龍頭&#xff0c;伴隨AI的發展成為AI芯片架構的供應商時&#xff0c;他就跳出了原本行業的競爭格局&#xff0c;曾經還能與之一戰的超威半導體被遠遠甩在身后&#xff0c;成為宇宙第一公司。 這說的就是一家公司價值的重估。今天給大家聊的也是這樣一…

LIMS系統在汽車行業中的應用有哪些優勢

LIMS實驗室管理系統在汽車行業中的應用有諸多優勢&#xff0c;這些優勢不僅提升了實驗室的管理效率&#xff0c;還確保了數據的準確性和可靠性&#xff0c;進而促進了汽車行業的整體發展。 一、提升管理效率 自動化數據處理 LIMS系統能夠自動化處理大量數據&#xff0c;顯著減…

Python層次密度聚類算法庫之HDBSCAN使用詳解

概要 HDBSCAN 是一種層次密度聚類算法,它通過密度連接性來構建聚類層次結構。與傳統的 K-Means 算法相比,HDBSCAN 具有以下幾個顯著特點: 自動確定聚類數量:HDBSCAN 能夠根據數據自動確定聚類數量,不需要預先指定。 適應噪聲和異常點:HDBSCAN 在聚類過程中能夠很好地處理…

后端之路(集合項目)——結合案例正式搭建項目

在前面學完java后端的Maven、spring boot、Mysql、Mybatis之后&#xff0c;我們現在就應該集合它們開始搭建一個項目試試手了 這里我還是跟著黑馬程序員的步驟來走好每一步&#xff0c;也給各位講清楚怎么弄 先看一下這個圖&#xff0c;覺得太籠統不明白的話不著急&#xff0c…

Java面試題總結

Redis篇 什么是緩存穿透 ? 怎么解決 ? 緩存穿透是指查詢一個不存在的數據&#xff0c;如果從存儲層查不到數據則不寫入緩存&#xff0c;這將導致這個不存在的數據每次請求都要到 DB 去查詢&#xff0c;可能導致 DB 掛掉。這種情況大概率是遭到了攻擊。 解決方案有兩種&…

Arthas實戰(2)- OOM問題排查

一、 準備測試應用 新建一個 SpringBoot應用&#xff0c;寫一段有 OOM bug 的代碼&#xff1a; RestController RequestMapping public class JvmThreadController {List<TestWrapper> memoryList new ArrayList<>();GetMapping("/test")public Strin…

mov文件怎么轉換成mp4格式?這四種轉換方法超級好用!

mov文件怎么轉換成mp4格式&#xff1f;在數字娛樂的世界中&#xff0c;你是否曾遇到過MOV格式的視頻&#xff1f;也許&#xff0c;對于許多人來說&#xff0c;這并不是一個常見的格式&#xff0c;但這并非偶然&#xff0c;首先&#xff0c;我們來談談MOV的兼容性問題&#xff0…