你不会用python画饼图吗?看看这个教程!程序员也能送玫瑰给妈妈?学习用python画花朵吧!

听说你不会用python画饼图?赶紧进来看一下刚出炉的教程 程序员也有春天,母亲节用python画朵玫瑰送给妈妈

本文目录:

都21世纪30年代了,还有人问我饼状图怎么画

于是我马不停蹄写了这篇饼状图教程,希望能够帮助你们。

饼状图能够清晰的反映出各项之间、各项和总和之间的占比关系,常见的饼状图主要有以下6种类型:

1.基本饼状图

这是饼状图最常见的类型,代码如下:

#绘制高中同学现在职业占比饼状图from pyecharts import options as optsfrom pyecharts.charts import Piex=['程序员','教师','医生','护士','警察','老板','律师','翻译','运动员']y=[18,5,3,4,8,2,2,5,1]pie = (    Pie()    .add('高中同学职业占比',[(i,j)for i,j in zip(x,y)])    .set_global_opts(title_opts=opts.TitleOpts(title="Pie-基本示例"))    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")))pie.render_notebook()


2.调整饼图标签位置

根据需要,我们可以随意调整饼状图的位置

from pyecharts import options as optsfrom pyecharts.charts import Piex=['程序员','教师','医生','护士','警察','老板','律师','翻译','运动员']y=[18,5,3,4,8,2,2,5,1]pie = (    Pie()    .add('高中同学职业占比',[(i,j)for i,j in zip(x,y)])    .set_global_opts(        title_opts=opts.TitleOpts(title="Pie-调整位置"),        legend_opts=opts.LegendOpts(pos_left="25%"),)    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")))pie.render_notebook()

图例组件离容器上下左右的距离分别用:pos_left、pos_right、pos_top、pos_bottom表示

3.设置饼图颜色

感觉默认颜色不好看?不用怕,我们换了它!

from pyecharts import options as optsfrom pyecharts.charts import Piex=['程序员','教师','医生','护士','警察','老板','律师','翻译','运动员']y=[18,5,3,4,8,2,2,5,1]pie = (    Pie()    .add('高中同学职业占比',[(i,j)for i,j in zip(x,y)])    .set_colors(["blue","green","yellow","red","pink","orange","purple","lilac","pansy"])    .set_global_opts(title_opts=opts.TitleOpts(title="Pie-基本示例"))    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")))pie.render_notebook()


4.南丁格尔图

来个造型奇特的柱状图

from pyecharts import options as optsfrom pyecharts.charts import Piex=['程序员','教师','医生','护士','警察','老板','律师','翻译','运动员']y=[18,5,3,4,8,2,2,5,1]pie = (    Pie()    .add(        series_name='高中同学职业占比',        data_pair=[(i,j)for i,j in zip(x,y)],        rosetype="radius",        radius="85%",        center=["50%", "50%"],        label_opts=opts.LabelOpts(is_show=False, position="center"),)    .set_global_opts(        title_opts=opts.TitleOpts(            title="Customized Pie",            pos_left="center",            pos_top="20",            title_textstyle_opts=opts.TextStyleOpts(color="#fff"),        ),        legend_opts=opts.LegendOpts(is_show=False),    )    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")))pie.render_notebook()

rosetype:有2种类型(radius:扇区圆心角展现数据的百分比,半径展现数据的大小。area:所有扇区圆心角相同,仅通过半径展现数据大小) center:原点位置

5.标签滚动饼图

为了提高视觉效果,我们需要滚动突出某项重点

from pyecharts import options as optsfrom pyecharts.charts import Piex=['程序员','教师','医生','护士','警察','老板','律师','翻译','运动员']y=[18,5,3,4,8,2,2,5,1]pie = (    Pie()    .add('高中同学职业占比',[(i,j)for i,j in zip(x,y)])    .set_global_opts(        title_opts=opts.TitleOpts(title="Pie-Legend 滚动"),        legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),    )    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")))pie.render_notebook()

LegendOpts参数介绍:type:图例类型,'plain'代表普通图例,'scroll'代表可滚动翻页图例 pos_left:图例组件离容器左侧的距离 orient:图例列表的布局朝向。可选:'horizontal', 'vertical'

6.玫瑰花饼图

一起来感受一下饼状图的美丽吧!

from pyecharts import options as optsfrom pyecharts.charts import Piex=['程序员','教师','医生','护士','警察','老板','律师','翻译','运动员']y=[18,5,3,4,8,2,2,5,1]pie = (    Pie()   .add(        "",        [(i,j)for i,j in zip(x,y)],        radius=["30%", "75%"],        center=["25%", "50%"],        rosetype="radius",        label_opts=opts.LabelOpts(is_show=False),    )    .add(        "",        [(i,j)for i,j in zip(x,y)],        radius=["30%", "75%"],        center=["75%", "50%"],        rosetype="area",    )    .set_global_opts(title_opts=opts.TitleOpts(title="Pie-玫瑰图示例"))    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")))pie.render_notebook()

radius:内半径和外半径

完整代码请关注公众号【python数据分析之禅】并回复饼图获取


推荐阅读:

用python制作炫酷的滚动地球

python数据分析——pyecharts折线图全解(小白必看)

python数据分析之——pyecharts柱状图进阶篇,带你玩转柱状图

python数据分析——pyecharts柱状图全解(小白必看)

python数据分析之环境搭建——小白也能看懂的Jupyter Notebook安装与使用教程

程序员也有春天,母亲节用python画朵玫瑰送给妈妈

又到一年母亲节,先祝福所有妈妈节日快乐,哈哈。最近一个项目在用python,想着这次不用java了,用python给妈妈个礼物吧。Turtle库是Python语言中一个非常强大的绘制图像的函数库,她提供了很多强大的方法,可以方便快速的绘图,今天我们就来试一下,画朵玫瑰送给妈妈。

首先大家可以先去了解下turtle的具体用法,半小时就可上手,具体可以参考我之前的文章轻松搞定Python绘图,就是这么简单。

大体了解turtle库的概念,比如画布、画笔、绘画命令等,我们就开始了,直接上代码。

一、引包

这里我们用到两个库,turtle(绘制图形) 和 time (展示时间)库,

二、设置画布和画笔

这里我们画布使用默认设置,当然也可以根据自己的构图设定大小,下面代码的话设置下画笔的绘画的起始位置,其中 left 是逆时针移动的角度,foward 是像画笔当前方向移动的长度,right 是顺时针移动的角度, penup 为移动时不绘制图形, pendown为移动时绘制图形。

三、画花朵部分

画布、画笔的参数设置好之后,接下来就是花朵部分了,也是我们构图的主体部分。用到的api 也主要是上面讲过用的 left、right 来调整画笔的角度,forward 来设置画绘画的长度。还用到了一个上色的函数 fillcolor, 这里我们把主体花朵设置了 “Firebrick1” 这个颜色。最终的一点,绘画的主体代码要包含在 begin_fill 和 end_fill 之间就可以了。

四、画花瓣部分

接下来我们还要简单的话两个花瓣,其实就是抽象的话两条曲线。这里我们主要用到了一个 circle 这个画圆函数和setheading来设置方向。

五、花叶子部分

最后,我们来画下叶子,红花还需绿叶衬嘛。这里我们画两片叶子,

叶子一:

叶子二:

最后面用time 的sleep函数设置下线程的保持时间,让我们能看到画完的图形。

六、测试运行

终于完成啦,接下来我们运行下上面的python代码,看下效果。

哈哈,一朵玫瑰就画好了,很简单,不是吗?

用 Python 绘制污染物玫瑰图

作者:沂水寒城,CSDN博客专家,个人研究方向:机器学习、深度学习、NLP、CV

Blog: http://yishuihancheng.blog.csdn.net

污染物玫瑰图是一个比较领域化和专业化的名词,主要是在环保数据分析领域中较为经常使用到,如果一开始就来说污染物玫瑰图可能不是很好理解,这里拿一个比较通用的实例来说明,就是风向玫瑰图。

为了更好地说明白风向玫瑰图这个学术化的名词我从找到了关于它的相关介绍,具体如下:

风向玫瑰图(简称风玫瑰图)也叫风向频率玫瑰图,它是根据某一地区多年平均统计的各个风向和风速的百分数值,并按一定比例绘制,一般多用8个或16个罗盘方位表示,由于形状酷似玫瑰花朵而得名。玫瑰图上所表示风的吹向,是指从外部吹向地区中心的方向,各方向上按统计数值画出的线段,表示此方向风频率的大小,线段越长表示该风向出现的次数越多。将各个方向上表示风频的线段按风速数值百分比绘制成不同颜色的分线段,即表示出各风向的平均风速,此类统计图称为风频风速玫瑰图。接下来简单看几个玫瑰图的实例,具体如下所示:

借用echarts的极坐标堆叠柱状图也可以绘制出来类似的效果只不过暂时没有找到如何对不同区间的浓度值设定不同的颜色的方法,简单的效果图如下所示:

在环保、气象等领域中,风向玫瑰图是非常常用的数据分析可视化手段,与此相关衍生出来的还有一种类似的玫瑰图——污染物玫瑰图,与风向玫瑰图相同的是,在具体计算逻辑以及整体形式上都是比较一致的,不同的是污染物玫瑰图主要是用于分析污染物溯源传播等相关的问题的,在可视化的时候叠加了污染物的浓度数据。

想要绘制污染物的玫瑰图首先我们需要获取到需要的因子浓度数据以及对应的气象数据,这里我们的数据来源于中央气象台以及中国环境监测总站,其中,前者提供了我们所需的气象数据,后者提供了我们所需的因子浓度监测数据。

中国环境检测总站首页数据区域截图如下:

点击详情即可查看,这部分数据的采集我发现网上有开源的实现就直接拿来用了,所以这里就不多做介绍了,如有需要可以留言,我给你提供项目链接,能够获取城市的实时空气数据,包括AQI、pm2.5、pm10、co、o3、no2、so2、首要污染物、生活建议、污染描述等数据。

中央气象台中数据区域截图如下所示:

这里我做了具体的实现,详细介绍请参考我的博客:

https://yishuihancheng.blog.csdn.net/article/details/99604953

到这里,我们的数据获取工作差不多就结束了,接下来就我们就开始绘制污染物玫瑰图,其实污染物玫瑰图本质上来说就是使用所需分析的污染物的浓度替换了原有的风速数据,将污染物的传播和分布情况借助于气象的数据展示了出来,在很多应用场景里面污染物玫瑰图都是很有帮助,能够有效地定位污染位置等信息。

之前的工作里面我从事过相关的研究项目,对于一些常用的工具模块都已有了比较完整的实现,这里可以很方便地进行调用,下面是具体的Demo代码实现:

def plotPollutionRoseDemo(value,direction,title,save_path='demo.png'):
'''
污染物可视化Demo
'''
plt.clf
ax=WindroseAxes.from_ax
ax.bar(direction,value,normed=True,opening=0.8,edgecolor='white')
ax.set_legend(loc='best',bbox_to_anchor=(1.1, 1.1)) #loc='lower center',ncol=3
plt.title(title,chinese)
plt.savefig(save_path)

绘图的代码真的是很简单的,下面是具体的结果:

我觉得还是蛮好看的,当然如果需要放到产品里面的话可能还需要进一步去美化一下。

之前有一些博友留言需要一下绘图的参数设置,这里我一并给出来,如果需要的话可以直接拿去使用:

import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
english={'family':'Times New Roman','weight':'normal','size':12}
chinese={'family':'SimHei','weight':'normal','size':12}
color_list=['#CD853F','#DC143C','#00FF7F','#FF6347','#8B008B','#00FFFF','#0000FF','#8B0000','#FF8C00',
'#1E90FF','#00FF00','#FFD700','#008080','#008B8B','#8A2BE2','#228B22','#FA8072','#808080']

个人习惯,比较喜欢将一些参数项整合到字典里面封装其起来之后可以很方便地进行调用。

完成绘图模块的开发后,就可以开发API了,基于flask将本地的工具模块暴露成可以直接调用的API服务是比较常用的做法,这里的具体代码实现如下:

#!usr/bin/env python
# encoding:utf-8
import os
import sys
import time
import json
from flask import Flask
from flask import request
from flask import make_response
from flask import jsonify
from windRosePloter import *
app = Flask(__name__)
reload(sys)
sys.setdefaultencoding("utf-8")
@app.route("/")
def init:
return u"风向玫瑰图模块正常启动!"
@app.route('/onlinerose',methods=['GET'])
def windRoseFunc:
'''
风向玫瑰图可视化功能
http://IP:port/onlinerose?host=localhost&user=username&passwd=passwd&port=3306&db=database&table=tablename&code=code&factor=pm25&start=2019-01-01 00:00:00&end=2019-09-30 23:00:00
'''
if request.method=='GET':
host=request.args['host']
user=request.args['user']
passwd=request.args['passwd']
port=request.args['port']
db=request.args['db']
table=request.args['table']
code=request.args['code']
factor=request.args['factor']
start=request.args['start']
end=request.args['end']
mysql['host']=host
mysql['user']=user
mysql['passwd']=passwd
mysql['port']=int(port)
mysql['db']=db
#数据获取
select_sql="SELECT wd,"+factor+" FROM "+table+" where station_code='"+code+"' AND data_time>='"+\
start+"' AND data_time<='"+end+"'"
#print select_sql
data=selectAllRecords(mysql, select_sql)
result=
for i in range(len(data)):
if data[i][0] and data[i][1] and data[i][0]!='None'and data[i][1]!='None':
result.append([float(data[i][0]),float(data[i][1])])
dd=[float(data[i][0]) for i in range(len(data)) if data[i][0]]
ff=[float(data[i][1]) for i in range(len(data)) if data[i][1]]
length=min(len(dd),len(ff))
wd=windDirectionTransform(dd)
title=factor+u"因子风向玫瑰图"
pic_path='rosePics/'+code+'_'+factor+'.png'
plotPollutionRoseDemo(ff[:length],dd[:length],title,save_path=pic_path)
image_data=open(pic_path,"rb").read
response=make_response(image_data)
response.headers['Content-Type']='image/png'
return response
if __name__ == "__main__":
app.run(host=0.0.0.0,port=5000)

完成上述API的开发工作后就可以进行使用分析了,下面是简单的实例测试结果:

基于API实现工具方便的调用对于提升工作效率或者是辅助现场人员完成数据分析工作是很有帮助的。

很高兴在自己温习回顾知识的同时能写下点分享的东西出来,如果说您觉得我的内容还可以或者是对您有所启发、帮助,还希望得到您的鼓励支持!

回复下方「关键词」,获取优质资源

回复关键词「 pybook03」,立即获取主页君与小伙伴一起翻译的《Think Python 2e》电子版

回复关键词「入门资料」,立即获取主页君整理的 10 本 Python 入门书的电子版

回复关键词「book 数字」,将数字替换成 0 及以上数字,有惊喜好礼哦~

题图:pexels,CC0 授权。

本文经用户投稿或网站收集转载,如有侵权请联系本站。