jfreechart折线图y轴刻度值_办公小技巧:Y轴上下皆为正 别样柱图巧制作

在Excel中,通常柱形图的Y轴坐标上为正值、下为负值,但有时为了突出表现,需要将下面的值也显示成正值效果。那么,这样的图表效果是如何实现的呢(图1)?其实,如果利用好散点图,上述效果很容易实现。

b480a7c897ceb5463d788783296025a8.png

1. 整理及构建图表数据

要想制作出上述图表效果,需要对源数据进行整理。首先,需要将工作表源数据中的“预计支出”处理成负值,在J2单元格输入“=0-B2”,向下拖动填充到J13,然后将J2:J13选定,复制,选中B2,粘贴时选择“值”;在D2处输入“=B2-300”,拖动填充到D13;在E2处输入“=C2+300”,拖动填充到E9。

接下来,就是构建散点图坐标了。在F1处输入“X”,在F2:F13单元格区域输入“0”;在G1处输入“Y”,在G2处输入“3000”,G3处输入“2500”,向下填充,直到G13处输入“-2500”,这些数据的输入都是根据D列和E列的极值输入的;在H1处输入“坐标轴标签”,复制G2:G13数据区域,粘贴到H2:H13,并将H2:H13区域中的负值更改成正值(图2)。

7d7d356b7e16a3d3deba1285a1dd72a6.png

2. 创建图表

选中B1:E14单元格区域,切换到“插入”选项卡,点击“二维柱形图→簇状柱形图”,这时就会在工作表中插入一个柱形图;选中图表中代表“笑脸”的系列,右击,选择“更改图表类型”,将其更改为“带数据标记的折线图”,将代表“哭脸”的系列也更改为“带数据标记的折线图”;选中图表中代表“实际收入”的系列,右击,选择“选择数据”,在弹出窗口右侧“水平(分类)轴标签”处点击“编辑”,在弹出窗口选择A2:A14单元格区域(图3)。

e2bfd51d946fb8b4241e482dd1f63f20.png

3. 设置坐标轴

选中图表中“实际收入”系列,右击,选择“设置数据系列格式”,在“系列选项”中,系列重叠处设置为“100%”;选中横坐标标签,标签位置处选择“无”;选中纵坐标轴,在“设置坐标轴格式”中的“坐标轴选项→坐标轴选项”中,边界处设置最小值为“-2500”,最大值为“3000”,单位大处为“500”,刻度线处的主刻度线类型设置为“外部”,坐标轴标签设置为“无”(图4)。

c3a5e272d2fc4c3e06342dac551f8437.png

4. 添加散点图

选中G1:G13,复制,选中图表区,粘贴;选中图表中的Y系列,右击,选择“选择数据”,在弹出窗口左侧选中“Y”,右侧“水平(分类)轴标签”处点击“编辑”,在弹出窗口选择F2:F13单元格区域;右击图表,选择“更改图表类型”,将Y系列的图表类型更改为“仅带数据标记的散点图”;选中图表中的Y系列,在系列选项中,系列绘制在处选择“主坐标轴”;选中横坐标轴,在“设置坐标轴格式→坐标轴选项”中,坐标轴位置处选择“在刻度线上”(图5)。

549ff2fa2ca702793e01a44823165b10.png

5. 设置Y轴标签

选中图表中的Y系列,右击,选择“添加数据标签”,选中数据标签,在“设置数据标签格式”的“标签选项”中,标签位置选择“靠左”;选中Y系列,在“设置数据系列格式”的“填充与线条→标记”中,标记选项处设置为“无”;选定标签,在标签选项中,“标签包括”处去除“Y值”前面的勾选,勾选“单元格中的值”,选择H2:H13单元格区域(图6)。

a5188104fd242dce99688650a94df795.png

6. 美化图表

在工作表中插入一个笑脸和一个哭脸图标,复制笑脸图标,选中图表中的笑脸系列,粘贴;同样,将哭脸图标粘贴到图表中的哭脸系列;选中图表中的哭脸系列,添加数据标签,选定标签,在标签选项中,“标签包括”处去除“值”前面的勾选,勾选“单元格中的值”,选择A2:A13单元格区域,标签位置处选择“靠下”(图7)。

4cd16d594b0876d151f84069a143fa83.png

最后,可对图表进一步美化,将柱形图的颜色设置为与相应的笑脸、哭脸颜色一致,去除图例中不需要的元素,添加图表标题就可以了。

8424cd52921b4b4a8524dcbf7ca0b86b.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Java中导出带有双Y轴的多条折线图到Excel,你可以继续使用Apache POI库和JFreeChart库,并进行一些适当的修改。以下是一个示例代码: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.*; import org.jfree.chart.*; import org.jfree.chart.axis.*; import org.jfree.chart.plot.*; import org.jfree.data.xy.*; import java.io.*; public class ExcelLineChartExporter { public static void main(String[] args) throws IOException { // 创建Excel工作簿和工作表 XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet("折线图"); // 创建折线图数据集 XYDataset dataset = createDataset(); // 创建折线图 JFreeChart chart = createLineChart(dataset); // 将折线图绘制到Excel工作表中 ByteArrayOutputStream chartImage = new ByteArrayOutputStream(); ChartUtils.writeChartAsPNG(chartImage, chart, 400, 300); int pictureIdx = workbook.addPicture(chartImage.toByteArray(), Workbook.PICTURE_TYPE_PNG); chartImage.close(); CreationHelper helper = workbook.getCreationHelper(); Drawing drawing = sheet.createDrawingPatriarch(); ClientAnchor anchor = helper.createClientAnchor(); anchor.setCol1(0); anchor.setRow1(0); Picture picture = drawing.createPicture(anchor, pictureIdx); picture.resize(); // 保存Excel文件 FileOutputStream fileOut = new FileOutputStream("折线图.xlsx"); workbook.write(fileOut); fileOut.close(); System.out.println("折线图导出成功!"); } private static XYDataset createDataset() { // 创建折线图数据集 XYSeriesCollection dataset = new XYSeriesCollection(); // 添加折线图数据 XYSeries series1 = new XYSeries("系列1"); series1.add(1, 5); series1.add(2, 3); series1.add(3, 6); dataset.addSeries(series1); XYSeries series2 = new XYSeries("系列2"); series2.add(1, 4); series2.add(2, 7); series2.add(3, 9); dataset.addSeries(series2); return dataset; } private static JFreeChart createLineChart(XYDataset dataset) { // 创建折线图 JFreeChart chart = ChartFactory.createXYLineChart( "多条折线图", // 标题 "X轴", // X轴标签 "Y轴", // Y轴标签 dataset, // 数据集 PlotOrientation.VERTICAL, // 图表方向 true, // 是否包含图例 true, // 是否包含工具提示 false // 是否包含URL链接 ); // 获取绘图区域对象 XYPlot plot = chart.getXYPlot(); // 创建第二个Y轴 NumberAxis yAxis2 = new NumberAxis("Y轴2"); yAxis2.setAutoRangeIncludesZero(false); plot.setRangeAxis(1, yAxis2); // 将第二个数据集与第二个Y轴关联 plot.setDataset(1, createDataset()); plot.mapDatasetToRangeAxis(1, 1); // 创建第二个渲染器 XYLineAndShapeRenderer renderer2 = new XYLineAndShapeRenderer(); renderer2.setSeriesPaint(0, ChartColor.BLUE); plot.setRenderer(1, renderer2); return chart; } } ``` 在上述代码中,我们添加了一个名为`createLineChart`的新方法,用于创建带有双Y轴折线图。我们使用了`XYPlot`和`NumberAxis`来创建第二个Y轴,并将第二个数据集与之关联。然后,我们创建了第二个渲染器`XYLineAndShapeRenderer`来设置第二个数据集的样式。 请注意,为了演示目的,我在`createLineChart`方法中直接调用了`createDataset`方法来创建第二个数据集。你可以根据实际需求修改代码以适应更复杂的数据集和样式。 同样,请确保已在项目中引入了Apache POI和JFreeChart的相关依赖。运行示例代码后,将会生成一个包含多条折线图的Excel文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值