1.我想把图例显示在图的左上角部分.
2.柱形图其实是由三部分组,支店总的改的,正常营收,额外营收(普通情况只有两部分,总的及实际的),这种柱形图怎么做,谢谢!!
3.另外要把图显示在jsp中,只有先生成图片,然后再显示吗?有没有更好的方法,能在jsp中传参数然后自动刷新显示.
第一个问题:图例显示在左上角是做不到的。可以显示在上,下,左,右。
因为在API中只能设置这几个位置,相信楼主这个问题应该来说不是最重要的吧。
第二个问题:
Java代码
public JFreeChart createStackedBarChart() {
double[][] data = new double[][] { { 10, 8, 12, 10, 40 },
{ 18, 12, 20, 10, 60 } };
String[] rowKeys = { "营收", "额外" };
String[] columnKeys = { "分店A", "分店B", "分店C", "分店D", "总店" };
CategoryDataset dataset = getBarData(data, rowKeys, columnKeys);
// 2:JFreeChart对象
JFreeChart chart = ChartFactory.createStackedBarChart("营业图", // 图表标题
"", // 目录轴的显示标签
"", // 数值轴的显示标签
dataset, // 数据集
PlotOrientation.VERTICAL, // 图表方向:水平、垂直
true, // 是否显示图例(对于简单的柱状图必须是false)
false, // 是否生成工具
false // 是否生成URL链接
);
chart.setTextAntiAlias(false);
chart.setBackgroundPaint(Color.WHITE);
chart.setTitle(new TextTitle("营业图", new Font("隶书", Font.BOLD, 25)));
Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);
// 2 .3 Plot 对象 Plot 对象是图形的绘制结构对象
CategoryPlot plot = chart.getCategoryPlot();
plot.setRangeGridlinesVisible(true);
plot.setRangeGridlinePaint(Color.gray);
NumberAxis vn = (NumberAxis) plot.getRangeAxis();
vn.setUpperBound(200);
DecimalFormat df = new DecimalFormat("000");
vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式
// DomainAxis (区域轴,相当于 x 轴), RangeAxis (范围轴,相当于 y 轴)
CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setLabelFont(labelFont);// 轴标题
domainAxis.setTickLabelFont(labelFont);// 轴数值
domainAxis.setMaximumCategoryLabelWidthRatio(0.6f);
plot.setDomainAxis(domainAxis);
// y轴设置
ValueAxis rangeAxis = plot.getRangeAxis();
rangeAxis.setLabelFont(labelFont);
rangeAxis.setTickLabelFont(labelFont);
// 设置最高的一个 Item 与图片顶端的距离
rangeAxis.setUpperMargin(0.15);
// 设置最低的一个 Item 与图片底端的距离
rangeAxis.setLowerMargin(0.15);
plot.setRangeAxis(rangeAxis);
// Renderer 对象是图形的绘制单元
StackedBarRenderer renderer = new StackedBarRenderer();
// 设置柱子宽度
renderer.setMaximumBarWidth(0.05);
// 设置柱子高度
renderer.setMinimumBarLength(0.1);
// 设置柱的边框颜色
renderer.setBaseOutlinePaint(Color.BLACK);
// 设置柱的边框可见
renderer.setDrawBarOutline(true);
renderer.setSeriesPaint(0, new Color(204, 255, 204));
renderer.setSeriesPaint(1, new Color(255, 204, 153));
renderer.setItemMargin(0.4);
renderer
.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setBaseItemLabelsVisible(true);
plot.setRenderer(renderer);
return chart;
}