一个简单的饼状图的绘制!

【QT】绘制饼状图 QPieSeries 相关链接: QT绘制直方图BarChart QT绘制折线图LineChart QT绘制曲线图SplineChart QT绘制散点图ScatterChart QT绘制散点图AreaChart 0.创建ui窗口: 主要就是拖拉一个Horizontal Layout 1.创建Qchart对象: QChart *chart = new QChart(); chart->setTitle("饼状图演示图"); //设置表格标题 2.创建QPieSeries对象: QPieSeries *series = 阅读详情

首先我们需要定义个数据类来放置需要的参数,然后我们就需要确定我们需要那些参数!

/**
* Created by ML on 2016/12/29.
* 饼图统计图
*/

public class PieData {

//用户关心
private String pieName;   // 名字
private float value;        // 数值
private float percentage;   //百分比

//用户不关心
private int pieColor = 0;  //颜色
private float pieAngle = 0;  //角度


public PieData(@NonNull String pieName,@NonNull float value) {
    this.pieName = pieName;
    this.value = value;
}

public String getPieName() {
    return pieName;
}

public void setPieName(String pieName) {
    this.pieName = pieName;
}

public float getValue() {
    return value;
}

public void setValue(float value) {
    this.value = value;
}

public float getPercentage() {
    return percentage;
}

public void setPercentage(float percentage) {
    this.percentage = percentage;
}

public int getPieColor() {
    return pieColor;
}

public void setPieColor(int pieColor) {
    this.pieColor = pieColor;
}

public float getPieAngle() {
    return pieAngle;
}

public void setPieAngle(float pieAngle) {
    this.pieAngle = pieAngle;
}

之后就是自定义View绘制图形了:

/**
* Created by ML on 2016/12/29.
*/

public class PieView extends View {

private Paint mPaint;

// 颜色表(注意: 此处定义颜色使用的是ARGB,带Alpha通道的)
private int[] mColors = {0xFFCCFF00, 0xFF6495ED, 0xFFE32636, 0xFF800000, 0xFF808000, 0xFFFF8C69, 0xFF808080,
        0xFFE6B800, 0xFF7CFC00};

private ArrayList<PieData> mPieDatas = new ArrayList<>();

private float startAngle = 0;  //绘制扇形开始角度

private int viewWidth;
private int viewHight;


/**
 * 构造方法
 *
 * @param context
 */
public PieView(Context context) {
    this(context, null);

}

public PieView(Context context, AttributeSet attrs) {
    super(context, attrs);
    initPaint();
}

public void initPaint() {
    mPaint = new Paint();
    mPaint.setColor(Color.BLACK);
    mPaint.setStyle(Paint.Style.FILL);
    mPaint.setStrokeWidth(10);
    mPaint.setAntiAlias(true);   //防止边缘锯齿!
}

/**
 * 测量View的大小
 *
 * @param widthMeasureSpec
 * @param heightMeasureSpec
 */
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

}

/**
 * 确定View的大小
 *
 * @param w
 * @param h
 * @param oldw
 * @param oldh
 */
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    viewWidth = w;
    viewHight = h;
}

/**
 * 确定子View的布局
 *
 * @param changed
 * @param left
 * @param top
 * @param right
 * @param bottom
 */
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
    super.onLayout(changed, left, top, right, bottom);


}

public void setStartAngle(float startAngle) {
    this.startAngle = startAngle;
    invalidate();
}

public void setPieDatas(ArrayList<PieData> pieDatas) {
    this.mPieDatas = pieDatas;
    initData(mPieDatas);
    invalidate();
}

private void initData(ArrayList<PieData> pieDatas) {

    if (pieDatas == null || pieDatas.size() == 0) {
        return;
    }

    float allValue = 0;
    float allAngle = 0;
    for (int i = 0; i < pieDatas.size(); i++) {
        PieData data = pieDatas.get(i);
        allValue += data.getValue();
        int j = i % mColors.length;
        data.setPieColor(mColors[j]);
    }

    for (int i = 0; i < pieDatas.size(); i++) {

        PieData data = pieDatas.get(i);
        float percentage = data.getValue() / allValue;
        float angle = percentage * 360;

        data.setPieAngle(angle);
        data.setPercentage(percentage);
        allAngle += angle;
        Log.i("angle", "" + data.getPieAngle());
    }
    Log.e("allAngle", allAngle + "");
}


/**
 * 绘制图形
 *
 * @param canvas
 */
@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if (mPieDatas == null || mPieDatas.size() == 0) {
        return;
    }

    float currentStartAngle = startAngle;
    canvas.translate(viewWidth / 2, viewHight / 2);  //将画布的坐标原点移动到中心位置!
    float r = (float) (Math.min(viewWidth, viewHight) / 2 * 0.8); //饼状图的半径
    RectF rect = new RectF(-r, -r, r, r);   //根据半径得到矩形

    for (PieData data : mPieDatas) {    //循环绘制扇形饼图
        mPaint.setColor(data.getPieColor());
        canvas.drawArc(rect, currentStartAngle, data.getPieAngle(), true, mPaint);
        currentStartAngle += data.getPieAngle();
    }
}
/*对外提供设置数据接口*/
上面已经注释了一些关键的地方,剩下的都是挺简单的逻辑问题就不多说了,最后就是在布局中使用或者在代码中使用都可以!
public class MainActivity extends AppCompatActivity {


private ArrayList<PieData> mPieDatas = new ArrayList<>();

private PieView mPieView;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    final PieView view = new PieView(this);
    setContentView(R.layout.activity_main);
    initData();
    mPieView = (PieView) findViewById(R.id.pieView);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            mPieView.setPieDatas(mPieDatas);
        }
    }, 50);
}

private void initData() {
    mPieDatas.add(new PieData("土建一部", 100));
    mPieDatas.add(new PieData("土建二部", 200));
    mPieDatas.add(new PieData("土建三部", 300));
    mPieDatas.add(new PieData("安装一部", 400));
    mPieDatas.add(new PieData("安装二部", 500));
    mPieDatas.add(new PieData("市政工程部", 600));
    mPieDatas.add(new PieData("招标代理部", 700));
}

}
或者:
com.example.a20161005.custormview.PieChartView.PieView
android:id=”@+id/pieView”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
/>

动态绘制3D柱状图饼状图 ASP.NET利用VML绘制统计图命名空间:System.Drawing.VmlChartPillarChart类:设置及生成柱状图的VML字符串方法:GetPillarStr(Datatable),用于获取柱状图VML字符串。属性:背景图宽度(默认:500px):Width背景图高度(默认:200px):Height距顶端的垂直距离(默认:0px):Top 阅读详情

相关推荐

最全Python绘制饼形图(饼状图)

让你彻底学会用Python绘制饼状图。

阿黎逸阳的博客 8万+

UE4C++饼状图绘制(EChart)

UE4C++实现饼状图

c++、UE 3576

Matplot绘制各种饼状图

饼状图用来显示各个部分在整体所占的比例。饼状图主要包括基础饼状图、分裂饼状图、立体感带阴影的饼状图、环形图等。

lyccomcn的博客 1390

示例:应用WPF绘制Chart图表之饼图

一、目的: 演示最近应用WPF开发的饼图供有需求的人参考 二、环境: .Net Framework 4.5 三、实现功能: 1、饼图 2、差值饼图 3、环形饼图 4、组合饼图 其他功能后续添加... 四、示例: 五、下载地址: https://github.com/HeBianGu/WPF-ControlBase.git ...

HeBianGu的博客 3268

wpf完美饼图实现

用wpf实现的饼图展示 界面体验度较好 已经在各大浏览器上测试运行 代码有地方为作者本人信息 可以下载下来自由修改 代码无加密 全部本人所写

WPF柱状图/饼图/折线图/面积图

wpf绘制各种图表,包括柱状图/饼图/折线图/面积图。 程序经典,使用起来简单高效,值得下载!

使用Telerik控件库制作WPF项目中的折线图、柱状图、饼图和甜甜圈图

使用Telerik控件库制作WPF(MVVM)项目中的折线图、柱状图、饼图和甜甜圈图

weixin_44177600的博客 2225

wpf 绘制饼状图

wpf 绘制的动态饼状图 ,功能强大,可以动态添加

动手实现饼图控件

一直以来,对自定义控件处于模模糊糊的状态,不知道怎样去入手实现一个控件出来.前段时间leader带我们梳理了相关知识点,并且自己又巩固了一下相关的内容.俗话说还记性不如烂笔头,不动手去实践,一边学习一边也就把之前的忘得差不多了.这两天终于下定决心真正动手尝试一下,实现一个真正的属于自己的自定义控件.好了扯远了,先上效果看一下效果.        ps:第一次发帖,也是刚刚学会自定义view这一部...

nannan1989yue的专栏 1090

电力电子课设救星:用Simulink实现Buck变换器双闭环控制(PID调参技巧)

本文是电力电子课程设计的实用指南,详细讲解如何利用Simulink仿真平台实现Buck变换器的电压电流双闭环控制。文章核心聚焦于PID参数整定的实战技巧,提供了从手动调试口诀到MATLAB脚本自动优化的完整方案,旨在帮助学生高效完成课设,深入理解闭环控制原理并生成专业报告。

weixin_29179311的博客 296

【HCIP-AI 进阶之路(一)】零成本白嫖算力,7天速通华为人工智能资深开发者认证

《HCIP-AIEIDeveloper认证备考指南》摘要:本文深度解析华为HCIP-AI(H13-331)认证考试要点,涵盖考试大纲、评分标准及备考策略。重点剖析昇腾AI全栈架构,包括达芬奇架构核心计算单元(Cube/Vector/Scalar Unit)和四大层级关系(芯片-CANN-框架-应用)。针对无硬件资源的开发者,提供MindSpore CPU版、ModelArts免费算力和沙箱实验室三种零成本实践方案。文章强调该认证对国企/华为生态企业求职者的价值,并指出多选题是主要失分点。下篇将聚焦计算机视觉

2301_82049134的博客 1181

WPF图表绘制(LiveCharts)

WPF图表绘制(LiveCharts) 效果如下图: 使用到的DLL:LiveCharts.dll、LiveCharts.Wpf.dll 1.折线图 xaml界面代码(前台代码) <lvc:CartesianChart Series="{Binding LineSeriesCollection}" LegendLocation="Right"> <lvc:CartesianChart.AxisY>

weixin_42585491的博客 8872

SLAM算法的优缺点

SLAM(Simultaneous Localization and Mapping,同时定位与地图构建)算法是一种通过传感器数据实时估计机器人自身位置和构建环境地图的技术。

selenia8860的博客 2906

Matplotlib绘制漂亮的饼状图|python绘制漂亮的饼状图

在上述代码中,我们首先定义了四个动物种类的标签和比例变量,分别存放了它们的名称和所占比例。最后,使用 plt.pie() 方法绘制了饼状图,并传递了各种参数,如标签、颜色、百分比格式和起始角度。Matplotlib 是 Python 中常用的数据可视化库,提供了丰富的绘图工具和函数,包括绘制饼状图的方法。为了绘制复杂的饼状图,我们需要使用 plt.subplots() 方法创建多个子图,并在每个子图上绘制不同的饼状图。在实际情况中,我们可能需要绘制更加复杂和详细的饼状图,以更好地展示数据。

群智能算法开发 6085

手把手教你用HarmBench数据集测试大模型安全性(含多模态案例)

本文详细介绍了如何使用HarmBench数据集测试大模型的安全性,包括文本和多模态越狱指令的实战案例。通过环境配置、数据集获取、测试流程及结果分析,帮助开发者全面评估和提升大模型的安全防护能力,特别关注多模态攻击的防御策略。

weixin_26642481的博客 320

本体(Ontology)概述

认识本体        本体(Ontology)的概念源自于哲学领域,在哲学中的定义为“对世界上客观事物的系统描述,即存在论”。哲学中的本体关心的是客观现实的抽象本质。而在计算机领域,本体可以在语义层次上描述知识,可以看成描述某个学科领域知识的一个通用概念模型。德国学者Studer在1998年给出了本体的相关定义“本体是共享概念模型的形式化规范说明”。这个定义包含了四层含义:即共享(share)...

baijinswpu的博客 7万+

H5画布 canvas(一)canvas简介、绘制圆形/矩形、案例饼状图绘制

canvas 简介、canvas 绘图基础(标签介绍、上下文context、beginPath 状态)、案例:绘制表格、绘制饼状图。

商务合作 | 共同学习 | 携手共进 10万+

RseQC实战指南:从安装到RNA-Seq数据质控全流程解析

本文提供了一份详尽的RseQC实战指南,涵盖从安装配置到RNA-Seq数据质控的全流程。文章重点解析了RseQC作为专业质控工具的核心价值,手把手指导如何通过Conda或pip完成安装,并深入讲解了bam_stat.py、geneBody_coverage.py等关键模块的使用方法与结果解读技巧,帮助用户有效评估RNA完整性、文库构建质量及链特异性,确保下游分析的可靠性。

weixin_29200741的博客 199

python使用matplotlib绘制饼状图

python使用matplotlib绘制饼状图 Python绘图需要下载安装matplotlib模块,它是一个数学绘图库,我们将使用它来制作简单的图表。

weixin_52411606的博客 8152

微信浏览器input[file]拍照点确认后强刷新解决

微信浏览器input强刷新,input h5强刷新,微信浏览器上传图片后刷新,h5表单强刷新,h5调用拍照后返回首页,h5调用拍照后刷新,微信浏览器强制刷新,iOS上微信浏览器input强刷新,iOS上微信浏览器上传图片后强刷新,ios微信浏览器上传图片后页面刷数据,h5在ios浏览器闪频,h5在ios微信打开时强制刷新,ios手机上调用相机后页面刷新,ios手机上调用相机后页面后重置,ios拍照后刷新,ios拍照完页面大刷新

江拥羡橙的博客 1348

OceanBase备租户创建(二):通过BACKUP DATABASE PLUS ARCHIVELOG

OceanBase数据库备租户创建方法二:通过BACKUP DATABASE PLUS ARCHIVELOG功能实现,特别适用于社区版和单机版部署模式。

Sebastien23的博客 539

制作一个vue饼状图绘制组件

在前端开发中,经常会遇到绘制图表的问题,比如对学生的成绩进行扇形饼状图的绘制。 使用的框架为vue,使用v-for将学生的信息遍历生成,此时就需要一个能够绘制饼状图的组件了。 对于绘制图表,现在前端比较流行的插件有echarts、AntV这一类绘制插件。 echarts AntV 当然,有时因为需求较少,只需要绘制简单的饼状图,导入这些插件过于麻烦时可以自己使用canvas进行绘制。 编写一个自定义的饼状图生成组件 代码如下: <!DOCTYPE html> <.

苦作舟的空城机 2189

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

用canvas绘制一个饼状图

Canvas,网页原来是可以画出来的… 认识Canvas Canvas绘制矩形 Canvas绘制圆形 使用moveTo()和lineTo()绘制路径 Canvas绘制一个饼状图 认识Canvas HTML5 标签用于绘制图像(通过脚本,通常是 JavaScript)。 不过, 元素本身并没有绘制能力(它仅仅是图形的容器) - 必须使用脚本来完成实际的绘图任务。 getContext() 方法可返...

Rampage_w的博客 805

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

python 数据可视化———绘制饼状图(bar)

快速使用python matplotlib绘制饼状图

a1227406795的博客 2万+

Android饼状图的绘制

Android饼状图的绘制在Github上看到一个不错的Android图标绘制的开源项目MPAndroidChart[https://github.com/PhilJay/MPAndroidChart],今天在这里介绍一下里面饼状图的使用,很少些博客,写得不好,同行见谅,勿喷。先来看看官网的效果: MPAndroidChart的使用第一步,当然是引用这个库 在AndroidStudio的proje

cen_yuan的专栏 1万+

Python绘制饼状图之可视化神器pyecharts

饼图 概念 饼图(pie chart)是用圆形及圆内扇形的角度来表示数值大小的图形,它主要用于表示一个样本(或总体)中各组成部分的数据占全部数据的比例。仅排列在工作表的一列或一行中的数据可以绘制到饼图中。饼图显示一个数据系列 (数据系列:在图表中绘制的相关数据点,这些数据源自数据表的行或列。图表中的每个数据系列具有唯一的颜色或图案并且在图表的图例中表示。可以在图表中绘制一个或多个数据系列。饼图只有一个数据系列。)中各项的大小与各项总和的比例。 用法 1、仅有一个要绘制的数据系列 2、要绘制的数值没

迷茫与徘徊只会让你陷入绝境,欢迎私信博主,带你开始提升变现价值! 1万+
上一篇: 封装一个可以控制字数的编辑器(EditText)!
下一篇: 自定义View---坐标系
ILoveYouWF
博客等级 码龄10年 6粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值