开源项目

知识点

相关文章

更多

最近更新

更多

JFreeChart创建条形图BarChart

2019-04-27 15:05|来源: 网路

本章演示了如何使用JFreeChart从一个给定的业务数据创建条形图。

条形图使用不同的方位(水平或垂直)条,以显示不同类别的比较。图表中的一个轴(域轴)示出了特定的域进行比较,并在另一个轴(范围轴)表示的离散值。

业务数据

下面的例子描述了各种汽车用统计柱状图。以下是汽车品牌以及它们的不同特点,我们将展示使用一个条形图的列表:

汽车 速度 用户评价 公里数 安全性
Fiat 1.0 3.0 5.0 5.o
Audi 5.0 6.0 10.0 4.0
Ford 4.0 2.0 3.0 6.0

基于AWT的应用

以下是对从上述给定的信息创建条形图的代码。此代码可以在AWT的应用程序嵌入一个条形图。

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel; 
import org.jfree.chart.JFreeChart; 
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset; 
import org.jfree.data.category.DefaultCategoryDataset; 
import org.jfree.ui.ApplicationFrame; 
import org.jfree.ui.RefineryUtilities; 

public class BarChart_AWT extends ApplicationFrame
{
   public BarChart_AWT( String applicationTitle , String chartTitle )
   {
      super( applicationTitle );        
      JFreeChart barChart = ChartFactory.createBarChart(
         chartTitle,           
         "Category",            
         "Score",            
         createDataset(),          
         PlotOrientation.VERTICAL,           
         true, true, false);
         
      ChartPanel chartPanel = new ChartPanel( barChart );        
      chartPanel.setPreferredSize(new java.awt.Dimension( 560 , 367 ) );        
      setContentPane( chartPanel ); 
   }
   private CategoryDataset createDataset( )
   {
      final String fiat = "FIAT";        
      final String audi = "AUDI";        
      final String ford = "FORD";        
      final String speed = "Speed";        
      final String millage = "Millage";        
      final String userrating = "User Rating";        
      final String safety = "safety";        
      final DefaultCategoryDataset dataset = 
      new DefaultCategoryDataset( );  

      dataset.addValue( 1.0 , fiat , speed );        
      dataset.addValue( 3.0 , fiat , userrating );        
      dataset.addValue( 5.0 , fiat , millage ); 
      dataset.addValue( 5.0 , fiat , safety );           

      dataset.addValue( 5.0 , audi , speed );        
      dataset.addValue( 6.0 , audi , userrating );       
      dataset.addValue( 10.0 , audi , millage );        
      dataset.addValue( 4.0 , audi , safety );

      dataset.addValue( 4.0 , ford , speed );        
      dataset.addValue( 2.0 , ford , userrating );        
      dataset.addValue( 3.0 , ford , millage );        
      dataset.addValue( 6.0 , ford , safety );               

      return dataset; 
   }
   public static void main( String[ ] args )
   {
      BarChart_AWT chart = new BarChart_AWT("Car Usage Statistics", "Which car do you like?);
      chart.pack( );        
      RefineryUtilities.centerFrameOnScreen( chart );        
      chart.setVisible( true ); 
   }
}

保持BarChart_AWT.java文件中的Java代码,然后从命令提示符下编译并运行它,如下所示:

$javac BarChar_AWT.java 
$java BarChart_AWT

如果一切顺利,它会编译并运行生成以下条形图:

JFree Chart

JPEG创建图像

让我们重新写上面的例子中,使用命令行生成JPEG图像。

import java.io.*;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.chart.ChartUtilities;

public class BarChart
{
   public static void main( String[ ] args )throws Exception 
   {

      final String fiat = "FIAT";
      final String audi = "AUDI";
      final String ford = "FORD";
      final String speed = "Speed";
      final String millage = "Millage";
      final String userrating = "User Rating";
      final String safety = "safety";

      final DefaultCategoryDataset dataset = new DefaultCategoryDataset( );

      dataset.addValue( 1.0 , fiat , speed );
      dataset.addValue( 3.0 , fiat , userrating );
      dataset.addValue( 5.0 , fiat , millage );
      dataset.addValue( 5.0 , fiat , safety );

      dataset.addValue( 5.0 , audi , speed );
      dataset.addValue( 6.0 , audi , userrating );
      dataset.addValue( 10.0 , audi , millage );
      dataset.addValue( 4.0 , audi , safety );

      dataset.addValue( 4.0 , ford , speed );
      dataset.addValue( 2.0 , ford , userrating );
      dataset.addValue( 3.0 , ford , millage );
      dataset.addValue( 6.0 , ford , safety );

      JFreeChart barChart = ChartFactory.createBarChart(
         "CAR USAGE STATIStICS", 
         "Category", "Score", 
         dataset,PlotOrientation.VERTICAL, 
         true, true, false);
         
      int width = 640; /* Width of the image */
      int height = 480; /* Height of the image */ 
      File BarChart = new File( "BarChart.jpeg" ); 
      ChartUtilities.saveChartAsJPEG( BarChart , barChart , width , height );
   }
}

保存BarChart.java文件中如上面的Java代码,然后从命令提示符下编译并运行它,如下所示:

$javac BarChart.java 
$java BarChart

如果一切顺利,它会编译并运行在当前的目录中创建JPEG图像文件namedBarChart.jpeg


相关问答

更多
  • 您可以在堆积条形图属性部分中将“范围轴最小值表达式”设置为0。 要添加打开属性面板,请单击图表并选择Windows - >属性,然后添加 Range Axis Min Value Expression = 0 setting maxto a value is a solution but it has a side-effect for me. It fixes the scale of the axis so if the max value is very big ...
  • 请注意,您使用的是格子包中的函数,而不是基本包中的函数,它具有不同的参数。 要完成你想要的,你应该设置scales参数(参见?barchart文档); 有两种选择可以产生不同的结果: # option 1: we're saying that y ticks must be set at coordinate = NULL barchart(Acolumn3 ~ Acolumn1,ylab="y axis", groups=Acolumn2, auto.key = list(columns = 3), ...
  • 尝试这样的事情: library(plyr) library(ggplot2) summary(dfx) # for example, each variable dfx$interaction <- interaction(dfx$group, dfx$sex) ddply(dfx, .(interaction), summary) #group by interaction, summary on dfx ggplot(dfx, aes(x = sex, y = age, fill = group)) ...
  • Highcharts期望setExtremes()方法的int值。 所以你应该得到滑块的价值; $('input[name="slider1"]').val(); 然后将此值解析为int ; parseInt($('input[name="slider1"]').val()); 在这里我为你修好了 : jsFiddle Highcharts are expecting int values for setExtremes() method. So you should get the value of ...
  • 使用您提供的数据,我重新编写了文档中给出的示例jmcnamara(链接在这里 ),以满足您的需求。 完整代码: import pandas as pd import xlsxwriter headings = [' ', 'Apr 2017', 'May 2017'] data = [ ['NGN', 'UGX', 'KES', 'TZS', 'CNY'], [5816, 1121, 115, 146, 1], [7089, 1095, 226, 120, 0], ] #open ...
  • 我没有能力。 相反,我必须创建与0 = -80对应的自己的标签,依此类推。 I wasnt able to. Instead I had to create my own labels that corresponded with 0 = -80 and so on.
  • 重点是GradientBarPainter一个功能。 相反,请尝试使用StandardBarPainter ,如此处所示 。 The highlight is a feature of GradientBarPainter. Instead, try StandardBarPainter, as suggested here.
  • 尝试转置矩阵: barplot(t(as.matrix(hydrocarbon3)), beside=T) 基本上, barplot将按照它们在矩阵中显示的顺序绘制事物,因为矩阵只是一个向量包裹的向量,意味着barplot将绘制第一列的所有值,然后是第二列的所有值,等等。 Try transposing your matrix: barplot(t(as.matrix(hydrocarbon3)), beside=T) Basically, barplot will plot things in the ...
  • 问题是,您正在调整for循环中的画布大小,这会扭曲画布,使之前的所有绘图都消失。 你应该在for循环之外做画布调整大小的东西,就像这样...... var canvas = document.getElementById("ttmrev"); var c = canvas.getContext("2d"); var currX = 0; var width = 40; chrr1 = [333, 222, 666, 1200, 444, 1000]; var max_value = Math. ...
  • 因此,如果我理解正确,你真的不想要一个堆积的条形图,你想要在m后面绘制。 你可以通过将zorder设置为低于w : p1 = plt.bar(ind, m, width, color='r',zorder=2) p2 = plt.bar(ind, w, width, color='y',zorder=1) 或者,如果要保留bottom=m选项,则需要从w减去m 。 首先,您需要将m和w转换为numpy.array 。 然后你可以像这样绘制p2 : p2 = plt.bar(ind, np.maximum( ...