问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于JfreeChart柱状图,数值显示的问题

发布网友 发布时间:2022-04-08 19:33

我来回答

2个回答

懂视网 时间:2022-04-08 23:54

extendedstackedbarrenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator("{3}", 
  • 2 NumberFormat.getPercentInstance(), new DecimalFormat("#0.0%"))); 

  • 但是柱体的返回的值是10.1/50.1=20.2%,40.1/50.1=79.8%
    技术分享
    这不符合预期目标,所以就去看了一下源码,在StandardCategoryItemLabelGenerator的父类AbstractCategoryItemLabelGenerator中发现有createItemArray这么一个方法:
    技术分享
    可以发现柱体的标签值应该是由这个方法进行返回的,因此自己就对StandardCategoryItemLabelGenerator进行了继承,并重写了这个方法。
    ExtendedStandardCategoryItemLabelGeneratory中增加了isPercent作为标签值是显示百分比还是仅仅格式化的判断参数,并重写了createItemArray这个方法。
    技术分享
    此时得到的效果如图:
    技术分享
    然而,柱体的总值还是没有格式化。再看了一下ExtendedStackedBarRenderer这个类的代码,找到了totalFormat这个属性,将其值赋为new DecimalFormat("#0.0%")。测试:
    技术分享
    基本是想要的最终结果,下面是测试代码

    1. 1 <dependency> 
    2. 2 <groupId>jfree</groupId> 
    3. 3 <artifactId>jfreechart</artifactId> 
    4. 4 <version>1.0.13</version> 
    5. 5 </dependency> 

    ExtendedStackedBarRenderer

    1. 1package com.springapp.jfreechar; 

    2. 3import java.awt.Color; 
    3. 4import java.awt.Font; 
    4. 5import java.awt.Graphics2D; 
    5. 6import java.awt.geom.Rectangle2D; 
    6. 7import java.text.DecimalFormat; 
    7. 8import java.text.NumberFormat; 

    8. 10import org.jfree.chart.axis.CategoryAxis; 
    9. 11import org.jfree.chart.axis.ValueAxis; 
    10. 12import org.jfree.chart.entity.CategoryItemEntity; 
    11. 13import org.jfree.chart.entity.EntityCollection; 
    12. 14import org.jfree.chart.labels.CategoryToolTipGenerator; 
    13. 15import org.jfree.chart.plot.CategoryPlot; 
    14. 16import org.jfree.chart.plot.PlotOrientation; 
    15. 17import org.jfree.chart.renderer.category.CategoryItemRendererState; 
    16. 18import org.jfree.chart.renderer.category.StackedBarRenderer; 
    17. 19import org.jfree.data.category.CategoryDataset; 
    18. 20import org.jfree.text.TextUtilities; 
    19. 21import org.jfree.ui.TextAnchor; 
    20. 22 
    21. 23public class ExtendedStackedBarRenderer extends StackedBarRenderer { 
    22. 24 
    23. 25 private static final long serialVersionUID = 1L; 
    24. 26 private boolean showPositiveTotal; 
    25. 27 private boolean showNegativeTotal; 
    26. 28 private Font totalLabelFont; 
    27. 29 private NumberFormat totalFormatter; 
    28. 30 public ExtendedStackedBarRenderer() { 
    29. 31 showPositiveTotal = true; 
    30. 32 showNegativeTotal = true; 
    31. 33 totalLabelFont = new Font("SansSerif", 1, 12); 
    32. 34 totalFormatter = new DecimalFormat("#0.0%"); 
    33. 35 } 
    34. 36 
    35. 37 /** 
    36. 38 * StackedBarRenderer 没有这个构造方法的,传入一个NumberFormat类,可以自定义实现每个柱体值显示格式 
    37. 39 * @param totalFormatter 
    38. 40 */ 
    39. 41 public ExtendedStackedBarRenderer(NumberFormat totalFormatter) { 
    40. 42 showPositiveTotal = true; 
    41. 43 showNegativeTotal = true; 
    42. 44 totalLabelFont = new Font("SansSerif", 1, 12); 
    43. 45 this.totalFormatter = totalFormatter; 
    44. 46 } 
    45. 47 
    46. 48 public NumberFormat getTotalFormatter() { 
    47. 49 return totalFormatter; 
    48. 50 } 
    49. 51 
    50. 52 public void setTotalFormatter(NumberFormat numberformat) { 
    51. 53 if (numberformat == null) { 
    52. 54 throw new IllegalArgumentException("Null format not permitted."); 
    53. 55 } else { 
    54. 56 totalFormatter = numberformat; 
    55. 57 return; 
    56. 58 } 
    57. 59 } 
    58. 60 
    59. 61 public void drawItem(Graphics2D graphics2d, CategoryItemRendererState categoryitemrendererstate, Rectangle2D rectangle2d, CategoryPlot categoryplot, CategoryAxis categoryaxis, 
    60. 62 ValueAxis valueaxis, CategoryDataset categorydataset, int i, int j, int k) { 
    61. 63 Number number = categorydataset.getValue(i, j); 
    62. 64 if (number == var cpro_id = "u6292429";

      热心网友 时间:2022-04-08 21:02

      你试试这句话:
      BarRenderer renderer=new BarRenderer();

      renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
      renderer.setBaseItemLabelsVisible(true);
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    备忘录在手机的哪里 刚性消费有哪些 中国经济快速增长的原因 什么是刚性消费 什么叫刚性增长 特别精辟的个性签名(非常经典的个性句子) 特别经典的个性签名(非常惊艳的个性句子) 文艺范十足的个性签名(温柔治愈的个性签名句子) wps文字怎么设置每页头和尾 27岁的女人需要补充哪些营养元素 - 信息提示 我唱歌总是把别人的歌唱成自己的感觉,别人说我和原唱唱的完全不一样,老师说我唱歌跑调,五音不全,可是 折纸一般用什么类型的啊 专门用来折纸的纸 不要容易撕裂的 无线路由器怎么改IP? 怎么写续写故事的方法 怎么处理节能开水器的故障问题并检修 写一段故事怎么写200字? 怎么写小故事 商用电热开水器冒烟什么情况,请问哪位知道请告知一二。 假如修改了无线路由器的IP地址,对Wi-Fi有什么影响? 该怎么样写好一个故事? 怎样写好故事 写故事的十个常用技巧 三年级写故事怎么写 求论语中关于管理情绪和个人气度的关系的句子 水泵压力开关压力调低怎样调? “捷宝电开水器故障E4怎么处理”? 故事是怎么写的呢? 绿雅智能商用净化开水机显示E6 淘宝自定义里面图片怎么做超链接 适合小学生朗读的文章、诗歌、故事有哪些? 为什么最近微信支付的时候一输支密码就会自动返回或者黑屏或者闪退? 洛阳有线电视费一年多少钱? 网站编辑的主要工作是什么?你会选择这个行业吗? 怎么做好一个网站编辑? 我微信里面的零钱突然消失了怎么回事微信突然黑屏 如何做好网站编辑 洛阳市有线电视是怎么收费的? 微信进入支付页面,选择理财通怎么有黑屏,然后才可以进入页面,这是怎么回事? 星星变奏曲 解析 你好!一周前微信扫码支付歀时死机。我就强行关机,关机之后,再也开了机黑屏。应如何解决? 星星变奏曲原文和解析 洛阳有线电视带200m的宽带一年多少钱? 如何编辑公司的网站?求具体操作。高分 现在洛阳办有线电视多钱? excel单元格中的文字中某个字符在第几位怎么算? 星星变奏曲的写作目的 什么是网站编辑? 安装洛阳有线电视带200M宽带,一年多少钱? 2010年洛阳有线电视初装多少钱?