请教jfreechart的问题

2024-11-23 15:44:05
推荐回答(1个)
回答1:

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;

}