首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在JFreeChart PieChart中将与段无关的文本添加到Legend中

在JFreeChart PieChart中,将与各部分无关的文本添加到Legend中,可以通过以下步骤实现:

  1. 创建一个自定义的LegendItem,并设置其文本内容。
  2. 将自定义的LegendItem添加到PieChart的LegendItems集合中。
  3. 创建一个自定义的LegendRenderer,并重写其绘制LegendItem的方法,以便在Legend中显示自定义的文本。
  4. 将自定义的LegendRenderer设置为PieChart的LegendRenderer。

以下是一个示例代码:

代码语言:java
复制
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.LegendItem;
import org.jfree.chart.LegendItemCollection;
import org.jfree.chart.LegendItemSource;
import org.jfree.chart.LegendRenderer;
import org.jfree.chart.StandardChartTheme;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.ui.RectangleEdge;

import javax.swing.*;
import java.awt.*;

public class PieChartDemo {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            JFrame frame = new JFrame("Pie Chart Demo");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(800, 600);

            JFreeChart chart = createChart();
            ChartPanel chartPanel = new ChartPanel(chart);
            frame.add(chartPanel);

            frame.setVisible(true);
        });
    }

    private static JFreeChart createChart() {
        // 设置图表主题
        StandardChartTheme chartTheme = new StandardChartTheme("JFree");
        chartTheme.setExtraMarkup("<mxfile version=\"3.0\">\n" +
                "  <diagram>JFreeChart</diagram>\n" +
                " <background>\n" +
                "    <fillColor>#FFFFFF</fillColor>\n" +
                "   <gradientColor>#FFFFFF</gradientColor>\n" +
                "  </background>\n" +
                "  <foreground>\n" +
                "    <fillColor>#000000</fillColor>\n" +
                "   <gradientColor>#000000</gradientColor>\n" +
                "  </foreground>\n" +
                " <stroke>\n" +
                "   <color>#000000</color>\n" +
                "   <width>1.0</width>\n" +
                "  </stroke>\n" +
                "  <font>\n" +
                "    <name>SansSerif</name>\n" +
                "    <size>12</size>\n" +
                "    <bold>false</bold>\n" +
                "    <italic>false</italic>\n" +
                "   <underline>false</underline>\n" +
                "  </font>\n" +
                " <connect>\n" +
                "   <color>#000000</color>\n" +
                "    <type>straight</type>\n" +
                "    <routing>orthogonal</routing>\n" +
                "   <arrow>none</arrow>\n" +
                "  </connect>\n" +
                "  <swimlane>\n" +
                "    <fillColor>#FFFFFF</fillColor>\n" +
                "   <gradientColor>#FFFFFF</gradientColor>\n" +
                "    <font>\n" +
                "      <name>SansSerif</name>\n" +
                "      <size>12</size>\n" +
                "      <bold>false</bold>\n" +
                "      <italic>false</italic>\n" +
                "     <underline>false</underline>\n" +
                "    </font>\n" +
                "  </swimlane>\n" +
                "  <page>\n" +
                "   <width>827</width>\n" +
                "   <height>1169</height>\n" +
                "   <margin>\n" +
                "      <top>20</top>\n" +
                "      <left>20</left>\n" +
                "     <bottom>20</bottom>\n" +
                "     <right>20</right>\n" +
                "    </margin>\n" +
                "   <background>\n" +
                "      <fillColor>#FFFFFF</fillColor>\n" +
                "     <gradientColor>#FFFFFF</gradientColor>\n" +
                "    </background>\n" +
                "    <foreground>\n" +
                "      <fillColor>#000000</fillColor>\n" +
                "     <gradientColor>#000000</gradientColor>\n" +
                "    </foreground>\n" +
                "   <stroke>\n" +
                "     <color>#000000</color>\n" +
                "     <width>1.0</width>\n" +
                "    </stroke>\n" +
                "    <font>\n" +
                "      <name>SansSerif</name>\n" +
                "      <size>12</size>\n" +
                "      <bold>false</bold>\n" +
                "      <italic>false</italic>\n" +
                "     <underline>false</underline>\n" +
                "    </font>\n" +
                "  </page>\n" +
                "</mxfile>");
        ChartFactory.setChartTheme(chartTheme);

        // 创建数据集
        PieDataset dataset = createDataset();

        // 创建饼图
        JFreeChart chart = ChartFactory.createPieChart("Pie Chart Demo", dataset, true, true, false);

        // 获取饼图的Plot
        PiePlot plot = (PiePlot) chart.getPlot();

        // 创建自定义的LegendItem
        LegendItem customLegendItem = new LegendItem("Custom Text", Color.BLACK, "Custom Text");

        // 获取饼图的LegendItems集合
        LegendItemCollection legendItems = plot.getLegendItems();

        // 将自定义的LegendItem添加到LegendItems集合中
        legendItems.add(customLegendItem);

        // 创建自定义的LegendRenderer
        LegendRenderer legendRenderer = new LegendRenderer() {
            @Override
            public Shape draw(Graphics2D g2, Rectangle2D area, int layer, int slice, int series, double value) {
                Shape shape = super.draw(g2, area, layer, slice, series, value);
                if (layer == 0 && slice == legendItems.getItemCount() - 1) {
                    g2.setColor(Color.BLACK);
                    g2.setFont(getItemFont(legendItems.getItemCount() - 1));
                    String text = customLegendItem.getLabel();
                    Rectangle2D textBounds = g2.getFontMetrics().getStringBounds(text, g2);
                    double x = area.getX() + area.getWidth() / 2 - textBounds.getWidth() / 2;
                    double y = area.getY() + area.getHeight() / 2 + textBounds.getHeight() / 2;
                    g2.drawString(text, (int) x, (int) y);
                }
                return shape;
            }
        };

        // 将自定义的LegendRenderer设置为饼图的LegendRenderer
        plot.setLegendRenderer(legendRenderer);

        return chart;
    }

    private static DefaultPieDataset createDataset() {
        DefaultPieDataset dataset = new DefaultPieDataset();
        dataset.setValue("Category 1", 25);
        dataset.setValue("Category 2", 25);
        dataset.setValue("Category 3", 25);
        dataset.setValue("Category 4", 25);
        return dataset;
    }
}

在这个示例中,我们创建了一个饼图,并向其中添加了4个部分。然后,我们创建了一个自定义的LegendItem,并将其添加到饼图的LegendItems集合中。最后,我们创建了一个自定义的LegendRenderer,并在其中绘制了自定义的文本。

这个示例中的自定义文本是"Custom Text",你可以根据需要修改这个文本。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android MPAndroidChart开源图表库之饼状图代码

MPAndroidChart是一款基于Android开源图表库,MPAndroidChart不仅可以Android设备上绘制各种统计图表,而且可以对图表进行拖动和缩放操作,应用起来非常灵活。...GitHub地址 下面主要实现以下饼状图: 1.从上面的地址中下载最新mpandroidchartlibrary-2-0-8.jar包, 然后copy到项目的libs; 2.定义xml文件; 3...; import com.github.mikephil.charting.components.Legend; import com.github.mikephil.charting.components.Legend.LegendPosition...(null); // pieChart.invalidate(); Legend mLegend = pieChart.getLegend(); //设置比例图 mLegend.setPosition...PieDataSet pieDataSet = new PieDataSet(yValues, "Quarterly Revenue 2014"/*显示比例图上*/); pieDataSet.setSliceSpace

1.3K30

PyQt5可视化 7 饼图和柱状图实操案例 ④层叠柱状图和百分比柱状图及饼图实现【超详解图文教程】

2.4.2 百分比柱状图效果图  5 百分比柱状图相关函数源码 三、饼图 1 初始化饼图函数 2 构造函数调用  3 饼图窗体界面  4 drawPieChart函数  5 按钮对应函数  6 do_pieHovered...0到59有2人,占29%;80-89有1人,占14%;90-100有4人,占57% 2.4.2 百分比柱状图效果图 水平百分比柱状图效果图  5 百分比柱状图相关函数源码 def...def on_btnPercentBarH_clicked(self): self.draw_percentBar(False) 三、饼图 1 初始化饼图函数 2 构造函数调用...chart = self.ui.chartViewPie.chart() return chart 五、后言         ok啊,Python专栏更新到这里就告一落了...spm=1001.2014.3001.5482         要是下次再更一下Python的话,估计等一时间了哈哈哈,如果还想看其他内容的话,博主还可以继续产出其他高质量文章。

1K20

Java Swing绘制2维3维混合动态散点图

使用2D绘图包是jfreechart,3D绘图包是matplotlib for java V2 PS:由于和我研究内容相关,如果看到类似SolutionSet结构体,这是Jmetal设置本质我只要其中...title一般表示这画是决策变量还是目标函数值 JFreeChart chart = ChartFactory.createScatterPlot(name, "X", "Y", xydataset...,即在空间中使用一种legend表示,而如果想要表示不同legend则新建一个集合对象例如bb就好 mgr.addData("Objective value", aa); 添加点和legend...mgr.setTitle(name); mgr.fitScreem(); 控制坐标轴缩放比例和Title 如果在Jframe中表示用show,如果是JPanel...,也就是说我数据源是SolutionSet,这个SetOBJ Values 和DCV Values本身都是动态更新

1.2K10

【Hadoop综合实践】手机卖场大数据综合项目分析

,结合三大运营商号码前三位数为规则进行生成 代码如下 /** * @Description 生成三大运营商手机号 */ /** * 中国移动手机号: * 134、135、136、137、...138、139、147、150、151、152、157、158、159、172、178、182、183、184、187、188、198、1703、1705、1706 * 中国联通手机号: * 130...、131、132、145、155、156、166、171、175、176、185、186、1704、1707、1708、1709 * 中国电信手机号: * 133、153、173、177、180、...market.cloud.tencent.com/products/31101 */ public class PhoneNumberGenerator { //生成一万个手机号码,只需将 generatePhoneNumbers 方法参数...().setFont(font); pieChart.getLegend().setItemFont(font); PiePlot plot = (PiePlot) pieChart.getPlot

18620

使用ScottPlot库.NET WinForms快速实现大型数据集交互式显示

前言 .NET应用开发数据集交互式显示是一个非常常见功能,如需要创建折线图、柱状图、饼图、散点图等不同类型图表将数据呈现出来,帮助人们更好地理解数据、发现规律,并支持决策和沟通。...本文我们将一起来学习一下如何使用ScottPlot库.NET WinForms快速实现大型数据集交互式显示。...将FormsPlot (ScottPlot.WinForms)从工具箱拖到窗体: 输入以下代码: public partial class PieChart : Form {...//对数据进行对数缩放,并处理负值 double[] logYs = ys.Select(Math.Log10).ToArray(); //将对数缩放数据添加到绘图中...new(); tickGen.MinorTickGenerator = minorTickGen; //创建一个自定义刻度格式化程序,用于设置每个刻度标签文本

20010

android自定义控件一站式入门

通过xml方式定义控件创建时执行是包含Context和AttributeSet两个参数构造器,为了可以xml定义控件对象,PieChart类就需要提供此构造器: public class PieChart...获取并使用自定义属性 控件类PieChart构造器通过AttributeSet参数获得xml定义属性值: public class PieChart extends ViewGroup {...mTextPaint用来绘制PieChart标签文本,指示圆点,圆点和标签之间线段。mPiePaint用来绘制饼状图各个扇形。...(root view)是LinearLayout对象,ViewTree,它是被添加到id为contentFrameLayout,然后ViewTree向上一直到DecorView。...动画是关于时间和值一个概念,就是时间,或者是时间不做限制时,随着时间推进,对应某个值不断发生变化。

1.7K50

android自定义控件一站式入门

通过xml方式定义控件创建时执行是包含Context和AttributeSet两个参数构造器,为了可以xml定义控件对象,PieChart类就需要提供此构造器: public class PieChart...获取并使用自定义属性 控件类PieChart构造器通过AttributeSet参数获得xml定义属性值: public class PieChart extends ViewGroup {...mTextPaint用来绘制PieChart标签文本,指示圆点,圆点和标签之间线段。mPiePaint用来绘制饼状图各个扇形。...(root view)是LinearLayout对象,ViewTree,它是被添加到id为contentFrameLayout,然后ViewTree向上一直到DecorView。...动画是关于时间和值一个概念,就是时间,或者是时间不做限制时,随着时间推进,对应某个值不断发生变化。

1.6K00

Android MPAndroidChart开源库图表之折线图实例代码

将mpandroidchartlibrary-2-0-8.jar包copy到项目的libs; 2. 定义xml文件。 ? 3. 主要Java逻辑代码如下,注释已经都添加上了。...(only possible after setting data) Legend mLegend = lineChart.getLegend(); // 设置比例图标示,就是那个一组yvalue... // modify the legend ... // mLegend.setPosition(LegendPosition.LEFT_OF_CHART); mLegend.setForm(LegendForm.CIRCLE...折线图还有另外一种表现形式,就是折线平滑,然后折线与X轴之间可以任意填充自己想要颜色,其实就是一些属性设置问题,代码如下: 在上面的getLineData()函数添加自己设置: ?...关于MPAndroidChart填充式折线图网上帖子很少,基本没有。这个是自己在网上搜索其他开源图表库,如JFreeChart…加上自己看源码才总结出来,不知道对不对,但是看效果,基本上没问题。

1.2K20

Linux 抓取网页实例(shell+awk)

至此,观察每页网址最后字符串 ?...,下一步就是提取每个游戏网页总绿色框内游戏属性信息即可(提取方式与模块3提取游戏链接方法类似,也是使用awk文本分析处理工具) 不过,这里需要注意几点: 脚本程序通过代理抓取网页语句...5、提取游戏属性 提取抓取游戏网页属性信息(即提取上面模块4html_2绿色方框信息),提取方式与模块3提取游戏链接方法类似,也是使用awk文本分析处理工具 通过分析下载网页内容,找出唯一能够表示属性信息字段...),添加上印度抓取网页文件夹,保存印度游戏信息到mysql;JSP网页和查询选项,都添加上印度一项即可 e、ok,添加完毕!...4、趋势图工具JFreeChart也是Java实现,便于JSP调用和嵌套,清晰显示游戏排名趋势 5、异地备份mysql数据库,自动化总控脚本采用了每天异地备份(scp),降低了历史数据丢失概率

7.2K40

C++ Qt开发:Charts折线图绘制详解

数据点: 图表上表示具体数据值点。 折线: 将数据点连接起来线,形成变化趋势。 Qt,可以使用图表库来创建折线图。...通过程序添加相应数据点,并设置合适轴和样式,你可以轻松创建出漂亮且具有信息表达能力折线图。...setTheme属性设置,Qt默认支持主题有8种可以选择,通过使用不同属性可以设置不同样式表或主题,以影响应用程序外观和感觉。...例如,设置图例图标的上下左右四个方位,以下枚举常量代表了对齐方式,可以用于设置控件或绘图元素在其父元素位置。 Qt::AlignTop(顶部对齐): 控件或元素将与其父元素顶部对齐。...,我们可以看到图例数字变大了,并且居右侧对齐了,颜色则是紫色,如下图所示; 1.1.4 边距设置 边距设置多数时候是用不到,因为Qt默认边距已经就很合理了,但是某些时候边距也需要被调整,

61810

2014-11-3Android学习------关于R.styleable问题(一)API学习--------GIF动画实现

name="YourName"> Android官网api说这个一般用在  Creating a View Class时候使用  具体:Define Custom Attributes 地址为...官网首先给出了这一话:就我理解翻译下 一个设计非常好自定义视图很大程度上(或者说非常)像其他任何任何设计良好类。...Android框架任何一个视图类都是继承View(android.view.View),自定义视图也可以直接继承一个视图,你可以通过继承一个已经存在子视图来节约你时间,例如:Button...(总之一句话,你可以使用XML文件来定义自己定义视图外观和行为),要做到这样,你必须做到以下几点: 1.XML资源文件通过这个标签去为你视图定义自定义属性...接口里放你想要做事务处理, 2.activity类中去new 这个类接口,就可以重写这个函数,当然是某一个点击事件函数参数,例如 btn.setOnClickListoner(new

2K20

ireport使用教程_insertselective用法

之后报表空白处单击,如此即可把对象添加到报表,然后拖动对象边框,使它大小合适,双击即可对对象文本进行快速编辑。...新增参数对话框输入参数名称、数据类型、缺省值以及参数描述信息等。...依此类推,建立其他组对象。每建立一 个组,报表界面上都会出现该组对应,组Header与Footer是对应出现。如图。 8. 风格化 如图。...图表输出心得 图表ireport是利用其他开源包生成图片插入而生成,本人使用版本是使用jfreechart1.0.0开源包实现。...而且,HTML输出时候,可以不对报表进行分页操作,即取消分页。 还 有,jfreechart默认输出图片是进行抗锯齿处理过

2.3K30

Matplotlib 中文用户指南 3.6 图例指南

图例键 每个图例标签左侧彩色/图案标记。 图例标签 描述由键表示句柄文本。 图例句柄 用于图例中生成适当条目的原始对象。...()函数返回轴域上存在句柄/艺术家列表,这些句柄/艺术家可以用于为结果图例生成条目 - 但值得注意是,并非所有艺术家都可以添加到图例, 这种情况下会创建『代理』(请参阅特地为添加到图例创建艺术家...处理器子类选择由以下规则确定: 使用handler_map关键字值更新get_legend_handler_map()。 检查句柄是否新创建handler_map。...检查句柄类型是否新创建handler_map。 检查句柄mro任何类型是否新创建handler_map。...为散点图图例条目创建标记垂直偏移量(相对于字体大小)。 0.0 是图例文本底部,1.0 是顶部。 为了将所有标记绘制相同高度,请设置为[0.5]。

1.5K10

Flask 框架:运用Echarts绘制图形

如下演示案例,将分别展示运用该绘图库如何前后端交互绘制(饼状图,柱状图,折线图)这三种最基本图形。 实现绘制饼状图: 用于模拟统计Web容器日志数据,通过饼状图将访问状态统计出来。..._name__ == '__main__': app.run(host="127.0.0.1", port=80, debug=False) 柱状图绘制效果如下: 实现绘制折线图: 统计指定时间访问流量数据...,其他图形同理可以参考如上方代码写法,我们可以将这三个图形合并在一起,主要是前端对其进行排版即可。...class="panel-title">饼状图绘制 <div id="<em>PieChart</em>...echo.setOption(option,true); }; display(); 后端代码如下,其中<em>的</em>参数可以从数据库内提取也可以从文件<em>中</em>读入

88430

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券