基于jFreeChart生成散点图和折线图

本文介绍如何使用Java的JFreeChart库进行线性拟合数据与原始数据的图表叠加绘制,通过创建并叠加两个数据集,分别用线条和散点表示,实现数据的直观对比展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、导入包
    jcommon-1.0.23.jar
    jfreechart-1.0.19.jar
2、程序执行结果

3、部分源程序

// 源代码在github上,地址:https://github.com/MasonYyp/GenerateGraphic/tree/master/
public class OverlaidDrawLineScatter extends ApplicationFrame {

    private static final long serialVersionUID = 1L;

    public OverlaidDrawLineScatter(String title) {

        super(title);
        JFreeChart chart = createOverlaidChart();
        ChartPanel panel = new ChartPanel(chart, true, true, true, true, true);
        panel.setPreferredSize(new java.awt.Dimension(800, 500));
        setContentPane(panel);

    }

    /**
     * Creates an overlaid chart.
     *
     * @return The chart.
     */
    private JFreeChart createOverlaidChart() {
        // Add first data set and rendererLine
        DefaultXYDataset dataLine = createDatasetLine();
        XYItemRenderer rendererLine = new XYLineAndShapeRenderer();        
        NumberAxis XAxis = new NumberAxis("X 值");
        NumberAxis YAxis = new NumberAxis("Y 值");
        NumberTickUnit unit=new NumberTickUnit(0.5);
        XAxis.setTickUnit(unit);
        YAxis.setTickUnit(unit);
        
        // create plot
        XYPlot plot = new XYPlot(dataLine, XAxis, YAxis, rendererLine);

        // Add second data set and rendererScatter
        DefaultXYDataset dataScatter = createDatasetScatter();
        XYItemRenderer rendererScatter = new XYShapeRenderer();
        plot.setDataset(1, dataScatter);
        plot.setRenderer(1, rendererScatter);

        // return a new chart containing the overlaid plot
        return new JFreeChart("线性拟合", JFreeChart.DEFAULT_TITLE_FONT, plot, true);

    }

    /**
     * Generate the dataset
     * @return The dataset.
     */
    private DefaultXYDataset createDatasetLine() {
        /*
        DefaultXYDataset dataset = new DefaultXYDataset();
        double[][] data= {{1,2,3},{4,5,6}};
        dataset.addSeries("拟合数据", data);
        return dataset;
    }
    
    private DefaultXYDataset createDatasetScatter() {
        DefaultXYDataset dataset = new DefaultXYDataset();
        double[][] data= {{1,2,3},{4.6,4.8,6.8}};
        dataset.addSeries("原始数据", data);
        return dataset;
    }
    
    public static void main(final String[] args) {
        OverlaidDrawLineScatter demo = new OverlaidDrawLineScatter("工程数据线性拟合");
        demo.pack();
        RefineryUtilities.centerFrameOnScreen(demo);
        demo.setVisible(true);

    }
}

### 如何在 Vue3 中实现可选择树状折线图 为了实现在 Vue3 中带有选择功能的树状折线图,可以利用 `ECharts` 提供的强大图表绘制能力。具体来说,通过配置合适的选项并结合交互事件来增强用户体验。 #### 使用 ECharts 创建基础折线图 首先,在项目中安装 ECharts: ```bash npm install echarts --save ``` 接着引入 ECharts 并设置初始配置项: ```javascript import * as echarts from 'echarts'; const chartDom = document.getElementById('main'); const myChart = echarts.init(chartDom); var option; option = { xAxis: {}, yAxis: {}, series: [ { name: 'Tree Line', type: 'line', // 设置为折线图类型 data: [] // 数据集待填充 } ] }; myChart.setOption(option); // 响应窗口大小变化自动调整图表尺寸 window.addEventListener('resize', function () { myChart.resize(); }); ``` #### 构建树形数据结构 对于树状结构的数据源处理,通常会有一个节点列表,其中每个节点包含子节点数组。这里假设已经获取到了这样的 JSON 格式的树型数据。 构建适合于展示的选择性树状折线图的关键在于合理设计数据模型及其关联关系。可以通过递归遍历的方式将原始树转化为一系列具有父子级联特性的坐标点集合[^1]。 #### 添加交互逻辑使图表支持点击选中 为了让用户能够方便地操作这些线条上的各个部分,可以在初始化完成后监听鼠标事件,并据此更新视图状态: ```javascript function addSelectFeature() { let selectedNodeIds = []; myChart.on('click', (params) => { const nodeId = params.data.id; if (!selectedNodeIds.includes(nodeId)) { selectedNodeIds.push(nodeId); } else { selectedNodeIds.splice(selectedNodeIds.indexOf(nodeId), 1); } updateSelectedState(myChart, selectedNodeIds); }); } addSelectFeature(); function updateSelectedState(chartInstance, idsArray) { const newOpt = Object.assign({}, chartInstance.getOption()); newOpt.series.forEach(seriesItem => { seriesItem.data.map(item => { item.itemStyle = {}; if(idsArray.includes(item.id)){ item.itemStyle.color = '#ff0000'; // 高亮颜色 } }) }); chartInstance.setOption(newOpt); } ``` 上述代码片段实现了当用户单击某个特定位置时改变该处样式的效果,从而达到视觉上突出显示的目的[^2]。 #### 结合实际案例应用 考虑到具体的业务场景需求,可能还需要进一步定制化图形外观、优化性能等方面的工作。例如在中国地图数据可视化以及34个省级行政区地图显示的应用里,可以根据不同地区的经济指标或其他统计信息生成相应的趋势曲线;而在世界汉化地图数据可视化的背景下,则能用来比较各国间某类现象的发展历程等[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值