百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

python100天 63 pie 函数画饼图继续探索

bigegpt 2024-08-06 12:06 18 浏览

前言用Excel打开 100多兆的CSV文件:london2016年之前一些犯罪数据



原本以为把pie函数画饼图的效果基本都摸索的差不多了

其实还是有很多用法的


画这图的过程其实就涉及到了一很重要的问题::数据从哪里来

这里面是从kaggle网站下载 的一个100多 crime lsoa

使用pandas读取这100 M大小 的csvn文件,看起来没有太大压力,可能是硬件内存足够了。其实语言本身的性能在这样的数据量情况下,其实已经可以忽略了。pandas其实已经 够强悍了。


import matplotlib.pyplot as plt
import matplotlib as mpl
import pandas as pd
df = pd.read_csv('z_kaggle_archive/london_crime_by_lsoa.csv')

print(df.head())
     lsoa_code borough major_category ... value year month
0   E01001116 Croydon Burglary ... 0 2016 11
1   E01001646 Greenwich Violence Against the Person ... 0 2016 11
2   E01000677 Bromley Violence Against the Person ... 0 2015 5
3   E01003774 Redbridge Burglary ... 0 2016 3
4   E01004563 Wandsworth Robbery ... 0 2008 6

看前面5条数据,可以看到这个csv的数据结构,每一列的函数

使用pandas对数据进行处理 :pandss等本人专门学习的时候在详细介绍

df = df[['borough', 'major_category']]
df_grouped = df.groupby(['borough', 'major_category']).size().reset_index()
table = pd.pivot_table(df_grouped, index=['borough'], columns=['major_category'])
table = table.dropna(axis=1).astype(int)

row_num = [5] # No. of the row
font_color = '#525252'
colors = ['#f7ecb0', '#ffb3e6', '#99ff99', '#66b3ff', '#c7b3fb','#ff6666', '#f9c3b7']
values = table.iloc[row_num].values.tolist()[0] # crime numbers
labels = [x[1] for x in table.columns] # crime names
title = table.iloc[row_num].index.values.tolist()[0] # borough

接着对上面的加工后的数据进行画图::属于饼图pie函数的范畴了

fig, ax = plt.subplots(figsize=(10, 7), facecolor='#e8f4f0')
ax.pie(values, labels=labels, colors=colors, startangle=30, textprops={'color':font_color})
title = plt.title(title, fontsize=16, color=font_color)
title.set_position([.5, 1.02])
mpl.rcParams['font.size'] = 10.0
filename = 'pie-chart-single'
plt.savefig(filename+'.png', facecolor=('#e8f4f0'))
font_color = '#525252'
colors = ['#f7ecb0', '#ffb3e6', '#99ff99', '#66b3ff', '#c7b3fb','#ff6666', '#f9c3b7']

fig, axes = plt.subplots(3, 3, figsize=(20, 20), facecolor='#e8f4f0')
fig.delaxes(ax= axes[2,2])
  • 由于要画多个饼图因此使用的是 subplots来生成多个子plot进行绘制
  • fig, ax = plt.subplots(figsize=(10, 7), facecolor='#e8f4f0')
  • ax.pie(values, labels=labels, colors=colors, startangle=30, textprops={'color':font_color})

这里我们用的是ax.pie而不是plt.pie函数了

绘制多个饼 图

for i, (idx, row) in enumerate(table.head(8).iterrows()):
        ax = axes[i // 3, i % 3]
        row = row[row.gt(row.sum() * .01)]
        ax.pie(row,
                  labels=row.values,
                  startangle=30,
                  wedgeprops=dict(width=.5), # For donuts
                  colors=colors,
                  textprops={'color':font_color})

        ax.set_title(idx, fontsize=10, color=font_color)

        legend = plt.legend([x[1] for x in row.index],
                      bbox_to_anchor=(1.3, .87),  
                      loc='upper left',
                      ncol=1,
                      fancybox=True)
        for text in legend.get_texts():
        			plt.setp(text, color=font_color)  
        
        
fig.subplots_adjust(wspace=.1) # Space between charts
title = fig.suptitle('Categories of crime in London boroughs', y=.95, fontsize=20, color=font_color)
 
plt.subplots_adjust(top=0.85, bottom=0.25)
filename = 'pie-chart'
plt.savefig(filename+'.png', facecolor=('#e8f4f0'))
plt.show()
  • for i, (idx, row) in enumerate(table.head(8).iterrows()): 主要是生成多个饼图
  • 核心代码:就是根据前面pandas生成的数据,来画对应 的n个饼图



  • 饼图的样式和外观


最后距离的问题,下期我们将前面的pie函数的例子中的代码录个视频进行说明

for i, (idx, row) in enumerate(table.head(8).iterrows()):
        ax = axes[i // 3, i % 3]

这段代码的作用是什么?给大家以下两点提示

  • 8组数据,要分成3行显示,那么每个subplot的位置是什么?
  • python中计算两个数相除的商和余数的运算符号是什么?

相关推荐

Go语言泛型-泛型约束与实践(go1.7泛型)

来源:械说在Go语言中,Go泛型-泛型约束与实践部分主要探讨如何定义和使用泛型约束(Constraints),以及如何在实际开发中利用泛型进行更灵活的编程。以下是详细内容:一、什么是泛型约束?**泛型...

golang总结(golang实战教程)

基础部分Go语言有哪些优势?1简单易学:语法简洁,减少了代码的冗余。高效并发:内置强大的goroutine和channel,使并发编程更加高效且易于管理。内存管理:拥有自动垃圾回收机制,减少内...

Go 官宣:新版 Protobuf API(go pro版本)

原文作者:JoeTsai,DamienNeil和HerbieOng原文链接:https://blog.golang.org/a-new-go-api-for-protocol-buffer...

Golang开发的一些注意事项(一)(golang入门项目)

1.channel关闭后读的问题当channel关闭之后再去读取它,虽然不会引发panic,但会直接得到零值,而且ok的值为false。packagemainimport"...

golang 托盘菜单应用及打开系统默认浏览器

之前看到一个应用,用go语言编写,说是某某程序的windows图形化客户端,体验一下发现只是一个托盘,然后托盘菜单的控制面板功能直接打开本地浏览器访问程序启动的webserver网页完成gui相关功...

golang标准库每日一库之 io/ioutil

一、核心函数概览函数作用描述替代方案(Go1.16+)ioutil.ReadFile(filename)一次性读取整个文件内容(返回[]byte)os.ReadFileioutil.WriteFi...

文件类型更改器——GoLang 中的 CLI 工具

我是如何为一项琐碎的工作任务创建一个简单的工具的,你也可以上周我开始玩GoLang,它是一种由Google制作的类C编译语言,非常轻量和快速,事实上它经常在Techempower的基准测...

Go (Golang) 中的 Channels 简介(golang channel长度和容量)

这篇文章重点介绍Channels(通道)在Go中的工作方式,以及如何在代码中使用它们。在Go中,Channels是一种编程结构,它允许我们在代码的不同部分之间移动数据,通常来自不同的goro...

Golang引入泛型:Go将Interface「」替换为“Any”

现在Go将拥有泛型:Go将Interface{}替换为“Any”,这是一个类型别名:typeany=interface{}这会引入了泛型作好准备,实际上,带有泛型的Go1.18Beta...

一文带你看懂Golang最新特性(golang2.0特性)

作者:腾讯PCG代码委员会经过十余年的迭代,Go语言逐渐成为云计算时代主流的编程语言。下到云计算基础设施,上到微服务,越来越多的流行产品使用Go语言编写。可见其影响力已经非常强大。一、Go语言发展历史...

Go 每日一库之 java 转 go 遇到 Apollo?让 agollo 来平滑迁移

以下文章来源于GoOfficialBlog,作者GoOfficialBlogIntroductionagollo是Apollo的Golang客户端Apollo(阿波罗)是携程框架部门研...

Golang使用grpc详解(golang gcc)

gRPC是Google开源的一种高性能、跨语言的远程过程调用(RPC)框架,它使用ProtocolBuffers作为序列化工具,支持多种编程语言,如C++,Java,Python,Go等。gR...

Etcd服务注册与发现封装实现--golang

服务注册register.gopackageregisterimport("fmt""time"etcd3"github.com/cor...

Golang:将日志以Json格式输出到Kafka

在上一篇文章中我实现了一个支持Debug、Info、Error等多个级别的日志库,并将日志写到了磁盘文件中,代码比较简单,适合练手。有兴趣的可以通过这个链接前往:https://github.com/...

如何从 PHP 过渡到 Golang?(php转golang)

我是PHP开发者,转Go两个月了吧,记录一下使用Golang怎么一步步开发新项目。本着有坑填坑,有错改错的宗旨,从零开始,开始学习。因为我司没有专门的Golang大牛,所以我也只能一步步自己去...