数据为:
北京 上海 广州 成都 深圳
苹果 672 766 223 540 126
梨子 325 521 210 340 106
葡萄 332 256 523 240 526 构建的dataset: String[] rowKeys={"苹果","梨子","葡萄"};
String[] columnKeys={"北京","上海","广州","成都","深圳"};我现在就想画5根柱子,每个颜色都不一样,还是这五个城市,比如北京为红色,上海为蓝色,
广州为绿色等,如果这样的话:
String[] rowKeys={"苹果"};
String[] columnKeys={"北京","上海","广州","成都","深圳"};
颜色都为一种颜色,而renderer.setSeriesPaint(i,Color)这个i要为rowKey,颜色没法改
如果这样:
String[] rowKeys={"苹果","梨子","葡萄","桔子","香蕉"};
String[] columnKeys={"北京"};
颜色是不同显示了,可是下标全是北京了,我要的结果是一个柱子一个颜色,并且代表不同城市,
请问怎么做,还是我这个方式是错误的,请指教不知道大家明白我的意思不,在线等,请大家多多指教
北京 上海 广州 成都 深圳
苹果 672 766 223 540 126
梨子 325 521 210 340 106
葡萄 332 256 523 240 526 构建的dataset: String[] rowKeys={"苹果","梨子","葡萄"};
String[] columnKeys={"北京","上海","广州","成都","深圳"};我现在就想画5根柱子,每个颜色都不一样,还是这五个城市,比如北京为红色,上海为蓝色,
广州为绿色等,如果这样的话:
String[] rowKeys={"苹果"};
String[] columnKeys={"北京","上海","广州","成都","深圳"};
颜色都为一种颜色,而renderer.setSeriesPaint(i,Color)这个i要为rowKey,颜色没法改
如果这样:
String[] rowKeys={"苹果","梨子","葡萄","桔子","香蕉"};
String[] columnKeys={"北京"};
颜色是不同显示了,可是下标全是北京了,我要的结果是一个柱子一个颜色,并且代表不同城市,
请问怎么做,还是我这个方式是错误的,请指教不知道大家明白我的意思不,在线等,请大家多多指教
呵呵,这个网上很多的,LZ可以再仔细找找
另外这个有可能跟你的jreechart的版本也有关系啊
希望对LZ有帮助柱状图的dataset 一般是用CatagoryDataset接口(具体实现类是DefaultCategoryDataset),也会用 IntervalXYDataset
接口
1、创建一个数据源(dataset):
private static CategoryDataset createDataset()
{
String series1 = “First”;
String series2 = “Second”;
String series3 = “Third”;
String category1 = “Category 1″;
String category2 = “Category 2″;
String category3 = “Category 3″;
String category4 = “Category 4″;
String category5 = “Category 5″;
DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
defaultcategorydataset.addValue(1.0D, series1, category1);
defaultcategorydataset.addValue(4D, series1, category2);
defaultcategorydataset.addValue(3D, series1, category3);
defaultcategorydataset.addValue(5D, series1, category4);
defaultcategorydataset.addValue(5D, series1, category5);defaultcategorydataset.addValue(5D, series2, category1);
defaultcategorydataset.addValue(7D, series2, category2);
defaultcategorydataset.addValue(6D, series2, category3);
defaultcategorydataset.addValue(8D, series2, category4);
defaultcategorydataset.addValue(4D, series2, category5);defaultcategorydataset.addValue(4D, series3, category1);
defaultcategorydataset.addValue(3D, series3, category2);
defaultcategorydataset.addValue(2D, series3, category3);
defaultcategorydataset.addValue(3D, series3, category4);
defaultcategorydataset.addValue(6D, series3, category5);
return defaultcategorydataset;
}
2、由ChartFactory 产生 JFreeChart 对象
private static JFreeChart createChart(CategoryDataset categorydataset)
{
JFreeChart jfreechart = ChartFactory.createBarChart(
"Bar Chart Demo", //图形标题名称
"Category",//domain 轴 Lable这里先简单理解为横坐标Lable好了
"Value", //range 轴 Lable这里也先简单理解为纵坐标Lable好了
categorydataset, // dataset
PlotOrientation.VERTICAL, //垂直显示
true, // legend?
true, // tooltips?
false); //URLs?
jfreechart.setBackgroundPaint(Color.white); //设定背景色为白色
CategoryPlot categoryplot = jfreechart.getCategoryPlot(); //获得 plot:CategoryPlot!!
categoryplot.setBackgroundPaint(Color.lightGray); //设定图表数据显示部分背景色
categoryplot.setDomainGridlinePaint(Color.white); //横坐标网格线白色
categoryplot.setDomainGridlinesVisible(true); //可见
categoryplot.setRangeGridlinePaint(Color.white); //纵坐标网格线白色
//设置series1与category的显示位置;类似效果图http://www.chinabs.net/webimages/PieChart7.png
categoryplot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
categoryplot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT); //使纵坐标的最小单位格为整数
NumberAxis numberaxis = (NumberAxis)categoryplot.getRangeAxis();
numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());BarRenderer barrenderer = (BarRenderer)categoryplot.getRenderer(); //获得renderer 注意这里是下嗍造型到BarRenderer!!
//显示每个柱的数值,并修改该数值的字体属性;类似效果图http://www.chinabs.net/webimages/PieChart6.png
barrenderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
barrenderer.setItemLabelFont(new Font("黑体",Font.PLAIN,12));
barrenderer.setItemLabelsVisible(true);barrenderer.setDrawBarOutline(false); // Bar的外轮廓线不画
GradientPaint gradientpaint = new GradientPaint(0.0F, 0.0F, Color.blue,0.0F, 0.0F, new Color(0, 0, 64)); //设定特定颜色
GradientPaint gradientpaint1 = new GradientPaint(0.0F, 0.0F, Color.green,0.0F, 0.0F, new Color(0, 64, 0));
GradientPaint gradientpaint2 = new GradientPaint(0.0F, 0.0F, Color.red,0.0F, 0.0F, new Color(64, 0, 0));
barrenderer.setSeriesPaint(0, gradientpaint); //给series1 Bar设定上面定义的颜色
barrenderer.setSeriesPaint(1, gradientpaint1); //给series2 Bar 设定上面定义的颜色
barrenderer.setSeriesPaint(2, gradientpaint2); //给series3 Bar 设定上面定义的颜色
CategoryAxis categoryaxis = categoryplot.getDomainAxis(); //横轴上的 Lable 45度倾斜
categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
return jfreechart;
}
一些重要的方法:(增加一块标记)
IntervalMarker intervaler = new IntervalMarker(4.5D, 7.5D);
intervaler.setLabel("Target Range");
intervaler.setLabelFont(new Font(”SansSerif”, 2, 11));
intervaler.setLabelAnchor(RectangleAnchor.LEFT);
intervaler.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
intervaler.setPaint(new Color(222, 222, 255, 128));
categoryplot.addRangeMarker(intervaler, Layer.BACKGROUND);