首页 > 其他分享 >【matplotlib 实战】--饼图

【matplotlib 实战】--饼图

时间:2023-10-14 16:23:44浏览次数:28  
标签:实战 展示 -- 数据 matplotlib 饼片 扇形 data zbCN

饼图,或称饼状图,是一个划分为几个扇形的圆形统计图表。
在饼图中,每个扇形的弧长(以及圆心角和面积)大小,表示该种类占总体的比例,且这些扇形合在一起刚好是一个完全的圆形。

饼图最显著的功能在于表现“占比”。
习惯上,人们通过比较饼图扇形的大小来获得对数据的认知。

使用饼图时,须确认各个扇形的数据加起来等于100%;
且避免扇区超过5个,扇形的排布顺序,一般情况下,将最大的扇形放在12点钟方向。

1. 主要元素

饼图的主要元素包括:

  1. 饼片(扇形):饼图由多个饼片组成,每个饼片的大小代表了对应部分在总体中的比例关系。
  2. 标签:饼图中的每个饼片通常都会有一个标签,用于表示对应部分的具体名称或者数值。
  3. 图例:图例是饼图的一部分,用于解释每个饼片所代表的含义,帮助观察者理解图表。
  4. 百分比:饼图通常会显示每个饼片所占的百分比,以便更直观地展示比例关系。

图片来自 antv 官网

2. 适用的场景

饼图适用的场景包括:

  • 比例展示:展示一个总体中各个部分的比例关系,例如市场份额、人口比例等。
  • 分类数据:展示分类数据的比例关系,例如某个产品的销售额占比、不同地区的人口分布等。
  • 简单数据分析:简单的数据分析,帮助观察者快速了解数据的分布情况和相对大小。
  • 强调重点:突出某个部分的重要性,引起观察者的注意,例如某个产品的关键特点或者某个地区的重要经济指标。

3. 不适用的场景

饼图不适用的场景包括:

  • 多个分类变量:当数据包含多个分类变量时,饼图可能会变得复杂和难以理解,不适合展示复杂的关系。
  • 数据过于细分:当数据被分成过多的小块时,饼图可能会变得拥挤和难以辨认,不适合展示细分数据。
  • 数据差异较小:当各个部分的差异较小,比例接近时,饼图可能无法清晰地展示差异,不适合展示相似的数据。
  • 需要精确数值比较:饼图通常只能展示相对比例关系,无法提供精确的数值比较,不适合需要准确数值的场景。

4. 分析实战

本次用饼图统计展示 不同人口规模的城市数量 的统计情况。

4.1. 数据来源

数据来自国家统计局公开的城市概况数据,可从下面的网址下载:
https://databook.top/nation/A0B

使用其中的 A0B01.csv 文件(分机构类型法人单位数)

fp = "d:/share/A0B01.csv"

df = pd.read_csv(fp)
df

image.png

4.2. 数据清理

最新的2022年数据缺失较多,所以选取2021年的数据进行分析。

data = df[df["sj"] == 2021]
data

image.png

第一条数据全部城市情况,统计需要去除,另外,指标的名称太长,统计前也可以调整下。
接着上面过滤后的数据继续数据清洗:

data = data.reset_index() # 重置索引
data = data.iloc[1:]  # 忽略第一条合计的数据

#调整指标名称,删除多余的文字
data["zbCN"] = data["zbCN"].str.replace("城市市辖区年末总", "")
data["zbCN"] = data["zbCN"].str.replace("地级及以上", "")

data

image.png

最后得到的数据有6条饼图一般来说数据不要超过5个6个也还行,再多就影响显示效果了。

4.3. 分析结果可视化

with plt.style.context("seaborn-v0_8"):
    fig = plt.figure()
    ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])

    ax.pie(data["value"], autopct="%1.1f%%")
    ax.legend(
        data["zbCN"].tolist(),
        loc="center",
        bbox_to_anchor=(1, 0, 0.5, 1),
    )

image.png

从分析结果可看出,50万~200万人口的城市超过一半,是大多数的城市规模。
两端的情况(人口20万以下,或者400万以上)的城市占比最小。

标签:实战,展示,--,数据,matplotlib,饼片,扇形,data,zbCN
From: https://www.cnblogs.com/wang_yb/p/17764303.html

相关文章

  • hutool
    Hutool(也称为Hu-tool或HuTool)是一个Java编程语言的工具库,旨在简化和提高Java开发过程中的日常任务和常见操作。Hutool库提供了许多实用工具、工具类和函数,用于处理字符串、日期、文件、加密、网络、XML、JSON、集合操作、图片处理、等等。它被设计为易于使用,而且功能丰富。以下是......
  • 2023-10-14:用go语言,给定 pushed 和 popped 两个序列,每个序列中的 值都不重复, 只有当它
    2023-10-14:用go语言,给定pushed和popped两个序列,每个序列中的值都不重复,只有当它们可能是在最初空栈上进行的推入push和弹出pop操作序列的结果时,返回true;否则,返回false。输入:pushed=[1,2,3,4,5],popped=[4,5,3,2,1]。输出:true。来自美团。来自左程云。答案......
  • Codeforces Round 671 (Div. 2) A. Digit Game
    \(R\)和\(B\)在玩一个数字游戏,给一个含有\(n\)位的正整数\(x\)。俩人轮流操作,\(R\)先行动。在每一步中,\(R\)可以选择\(x\)中一个未被标记的奇数位置并标记,\(B\)可以选择\(x\)中一个未被标记的偶数位置并标记。当最后只剩下一个未被标记的位置时,让这个数为\(m\)......
  • P1084疫情控制 题解
    P1084疫情控制前言:这题思路不难,实现稍微有点难。总体来说,不算特别难的那种紫题,建议评蓝。题目描述给定一些点,用这些点来切断根节点到所有叶子节点的路径,可以移动这些点,不同的点可以同时移动,求时间最少。思考过程不同的点可以同时移动:看到这里,我们可以转化一下题目:给定......
  • [AGC033C] Removing Coins题解
    思路可以看出,每次对一个点\(u\)操作一次,就相当于删除以\(u\)为根的所有叶节点。当然我们还是没有什么思路,我们可以想简单一点:在一条链上的情况。如果\(u\)是链的端点:以\(u\)为根节点的叶节点只有一个,所以链的长度减一。如果\(u\)不是链的端点:以\(u\)为根节点......
  • P1612 [yLOI2018] 树上的链 题解
    思路看到条件\(2\),我们得知:这个节点对应的最长链,一定在这个节点到根节点的简单路径上。所以我们记录\(1\)到\(i\)之间的权值和,记为\(sum_i\)。因为权值是正整数,所以满足单调性,可以二分。如何二分路径上的点呢?我们维护一个与当前dfs同步的栈,记录从根节点到当前节点的简......
  • [ARC116C] Multiple Sequences题解
    思路我们可以很好的想到一种\(O(nm)\)的dp:状态:\(dp_{i,j}\)为搜到第\(i\)个,最后一个数是\(j\)的方案数。转移:\(dp_{i,j}=\displaystyle\sum_{k|j,k\not=j}dp_{i-1,k}\)当然这是会超时的。我们换一种思路,我们先枚举最后一个数,再计算方案数。这有个好处,我们缩小......
  • GoF之工厂模式
    工厂模式通常有三种形态第一种:简单工厂模式(SimpleFactory):不属于23中设计模式。简单工厂模式又叫做:静态工厂方法模式。简单工厂模式是工厂模式的一种特殊实现。第二种:工厂方法模式(FactoryMethod):是23种设计模式之一。第三种:抽象工厂模式(AbstractFactory):是23种设计模式之一。(随......
  • Spring Boot 配置 Jackson
    什么是Jackson?有什么作用?Jackson是SpringBoot内置的Json解析框架,用来完成出入参的序列化和反序列化。通常,我们会在Controller类中方法上,加上 @RequestBody 或者 @ResponseBody 注解,SpringBoot会自动对出入参做Json解析与转换工作。注意:@RequestBody用于将......
  • Spring Boot 配置拦截器
    通过拦截器,我们可以针对特定URI做拦截,做相关业务处理,比如检查用户是否登录,打印每个请求的处理耗时等。一、新建一个拦截器新建登录验证类 LoginValidationInterceptor.java:packagesite.exception.springbootinterceptor.interceptor;importorg.springframework.lang.N......