在制作柱状图时候,想修改柱子的颜色,加入的数据如下:
dataset.addValue(1, "苹果","2001-1"); //柱状图
dataset.addValue(2, "苹果","2001-2");
dataset.addValue(3, "苹果","2001-3");
dataset.addValue(4, "苹果","2001-4");
dataset.addValue(5, "苹果","2001-5");
dataset.addValue(6, "苹果","2001-6");
dataset.addValue(5, "苹果","2001-7");
已有的方法renderer.setSeriesPaint(0, fiveType); 其中只能根据第二列数据设置颜色,我现在想根据第三列数据修改柱子的颜色,也就是想根据时间列修改柱子的颜色,该如何考虑呢,现在比较着急,公司等着交活呢,谢谢各位了!
dataset.addValue(1, "苹果","2001-1"); //柱状图
dataset.addValue(2, "苹果","2001-2");
dataset.addValue(3, "苹果","2001-3");
dataset.addValue(4, "苹果","2001-4");
dataset.addValue(5, "苹果","2001-5");
dataset.addValue(6, "苹果","2001-6");
dataset.addValue(5, "苹果","2001-7");
已有的方法renderer.setSeriesPaint(0, fiveType); 其中只能根据第二列数据设置颜色,我现在想根据第三列数据修改柱子的颜色,也就是想根据时间列修改柱子的颜色,该如何考虑呢,现在比较着急,公司等着交活呢,谢谢各位了!
dataset.addValue(1, "苹果","2001-1"); //柱状图
dataset.addValue(2, "苹果","2001-2");
dataset.addValue(3, "苹果","2001-3");
dataset.addValue(4, "桔子","2001-4");
dataset.addValue(5, "桔子","2001-5");
dataset.addValue(6, "桔子","2001-6");
这个时候图例显示苹果是一个颜色,桔子是一个颜色。但是像你说的那样图例就没法画了。可以给你一个变通的方法,就是把第二列的数据和第三列的数据交换位置
import java.awt.Dimension;
import java.awt.Font;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.CategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;public class ItemLabelDemo1 extends ApplicationFrame
{
static class ItemLabelGenerator implements CategoryItemLabelGenerator
{
private double threshold; public ItemLabelGenerator(double threshold)
{
this.threshold = threshold;
} public String generateLabel(CategoryDataset dataset, int series,
int category)
{
String result = null;
final Number value = dataset.getValue(series, category);
if (value != null)
{
final double v = value.doubleValue();
if (v > this.threshold)
{
result = value.toString();
}
}
return result;
} public String generateColumnLabel(CategoryDataset dataset, int column)
{
return null;
} public String generateRowLabel(CategoryDataset dataset, int row)
{
return null;
}
} public ItemLabelDemo1(String title)
{
super(title);
CategoryDataset dataset = createDataset();
JFreeChart chart = createChart(dataset);
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new Dimension(500, 270));
setContentPane(chartPanel);
} private static CategoryDataset createDataset()
{
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(11.0, "S1", "C1");
dataset.addValue(44.3, "S1", "C2");
dataset.addValue(93.0, "S1", "C3");
dataset.addValue(35.6, "S1", "C4");
dataset.addValue(75.1, "S1", "C5");
return dataset;
} private static JFreeChart createChart(CategoryDataset dataset)
{
JFreeChart chart = ChartFactory.createBarChart("Item Label Demo 1",
"Category", "Value", dataset, PlotOrientation.VERTICAL, false,
true, false);
chart.setBackgroundPaint(Color.white);
CategoryPlot plot = chart.getCategoryPlot();
plot.setBackgroundPaint(Color.lightGray);
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setUpperMargin(0.15);
CategoryItemRenderer renderer = plot.getRenderer();
renderer.setItemLabelGenerator(new ItemLabelGenerator(50.0));
renderer.setItemLabelFont(new Font("Serif", Font.PLAIN, 20));
renderer.setItemLabelsVisible(true);
return chart;
} public static JPanel createDemoPanel()
{
JFreeChart chart = createChart(createDataset());
return new ChartPanel(chart);
} public static String getDemoDescription()
{
return "A bar chart with item labels displayed only for values greater than a threshold.";
} public static void main(String[] args)
{
ItemLabelDemo1 demo = new ItemLabelDemo1("Item Label Demo 1");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
}
你可以参考一下这个例子