python找图里的环_用Python把图做的好看点:用Matplotlib画个环形图

P老板:小Lo啊,你觉得这几个图好看吗

我:好看,好看

P老板:我也觉得,这个月的月报,就用这个把,你给我几个,我看看

我:.....

于是乎,我们今天的目标是什么!!!

画个环形图!!!

今天,我们就来先画个简单的

成品长这样

是不是一模一样!!(很不要脸)

之前我们有学习过,如何用极坐标去掰弯柱状图(柱状图:为什么不放过我??)

仔细看看环形图,其实,环形图就是掰弯柱状图的兄弟——条形图!!!!

是不是很简单!!

在matplotlib里,柱状图用bar

而条形就是barh! 多了一个字母而已的

我们先来画个条形图试试看

from matplotlib import pyplot as plt

fig = plt.figure(figsize=[13.44,7.5],facecolor=(235/255,235/255,235/255))

ax1=fig.add_subplot(1,1,1,facecolor=(235/255,235/255,235/255))

plt.yticks(range(0,4,1), fontsize=14)

ax1.barh(height=0.5,width=0.1,y=1,color=(243/255,133/255,36/255))

ax1.barh(height=0.5,width=0.2,y=2,color=(243/255,133/255,36/255))

ax1.barh(height=0.5,width=0.3,y=3,left=0.1,color=(243/255,133/255,36/255))

可以发现,在barh中,控制条形位置和大小的参数主要是height,width,y和left

其中height控制着条形图的宽度(真的不是width,不是width,不是width),也就是纵向的长度

而width控制的是长度,也就是横向的宽度

y值控制着条形图中线在y轴的位置,

left控制从左边起,那个位置开始画

然后,我们在add_subplot中打开极坐标

他就变成了这样!!!

似乎崩了!!

没关系!!

我们继续。我们继续,看看改改参数会有什么神奇的发现。

fig = plt.figure(figsize=[13.44,7.5],facecolor=(235/255,235/255,235/255))

ax1=fig.add_subplot(1,1,1,facecolor=(235/255,235/255,235/255),projection='polar')

plt.yticks(range(0,5,1), fontsize=14)#设置y轴的的刻度

ax1.barh(height=0.5,width=0.1,y=1,color=(243/255,133/255,36/255))

ax1.barh(height=0.5,width=1,y=2,color=(243/255,133/255,36/255))

ax1.barh(height=0.5,width=1,y=3,color=(243/255,133/255,36/255))

ax1.barh(height=0.5,width=1,y=4,color=(243/255,133/255,36/255))

发现:环形是从0读开始,顺时针的画,而且width控制的是环形的长度

所以环形图的width也就是实际要画的图的X值

然后再height调细

调细后就变成了,和例子差不多的

然后再看看如何打上前端的小点点!

from matplotlib import pyplot as plt

fig = plt.figure(figsize=[13.44,7.5],facecolor=(235/255,235/255,235/255))

ax1=fig.add_subplot(1,1,1,facecolor=(235/255,235/255,235/255),projection='polar')

plt.yticks(range(0,5,1), fontsize=14)#设置y轴的的刻度

ax1.barh(height=0.05,width=1,y=2,color=(243/255,133/255,36/255))

ax1.scatter(x=1,y=2,color=(243/255,133/255,36/255))

ax1.barh(height=0.05,width=1,y=3,color=(243/255,133/255,36/255))

ax1.scatter(x=1,y=3,color=(243/255,133/255,36/255))

ax1.barh(height=0.05,width=1,y=4,color=(243/255,133/255,36/255))

ax1.scatter(x=1,y=4,color=(243/255,133/255,36/255))

用scatter,然后barh的width变成了scatter的x,y还是那个y

我们在来做个小实验,

我们都知道极坐标应该输入的是θ和r,一个表示角度,一个表示半径,才能确定一个点的位置

那怎么在barh里换算θ和r呢

比如我们要画一个这样的弧形

弧形对应90度角,从45度开始,一直到135度

from matplotlib import pyplot as plt

import numpy as np

fig = plt.figure(figsize=[13.44,7.5],facecolor=(235/255,235/255,235/255))

ax1=fig.add_subplot(1,1,1,facecolor=(235/255,235/255,235/255),projection='polar')

plt.yticks(range(0,5,1), fontsize=14)#设置y轴的的刻度

ax1.barh(height=0.05,width=1,y=2,color=(243/255,133/255,36/255))

ax1.scatter(x=1,y=2,color=(243/255,133/255,36/255))

ax1.barh(height=0.05,width=1,y=3,color=(243/255,133/255,36/255))

ax1.scatter(x=1,y=3,color=(243/255,133/255,36/255))

ax1.barh(height=0.05,width=1*1/4*2*np.pi,y=4,left=1/4*np.pi,color=(243/255,133/255,36/255))

width=1*1/4*2*np.pi,y=4,left=1/4*np.pi

弧形就是圆周的截取,圆周长公式:d*2π,至今乘以2π

最开始,笔者一直以为直径应该是y值,也就是用2y* 2π 来算直径

后来我发现,我真的错,我一开始就不该想的这么简单

后来多次尝试后!

才发现,原来TM的每个圆都是单位圆,直径都是1!!!!!

所以你要长的弧长,就直接算就好!

比如,你要个半弧形

width就是1*1/2*2*np.pi

最后,去掉网格线就搞定啦!

或者你想要换个方向的弧形,比如例子

你就把width的值加个符号就好了

from matplotlib import pyplot as plt

import numpy as np

fig = plt.figure(figsize=[13.44,7.5],facecolor=(235/255,235/255,235/255))

ax1=fig.add_subplot(1,1,1,facecolor=(235/255,235/255,235/255),projection='polar')

ax1.axis('off')

ax1.barh(height=0.005,width=-0.4*3,y=0.4,color=(243/255,133/255,36/255))

ax1.scatter(-0.4*3,0.4,color=(243/255,133/255,36/255))

ax1.barh(height=0.005,width=-0.5*3,y=0.5,color=(243/255,10/255,36/255))

ax1.scatter(-0.5*3,0.5,color=(243/255,10/255,36/255))

ax1.barh(height=0.005,width=-2*2,y=0.6,color=(243/255,133/255,36/255))

ax1.scatter(-2*2,0.6,color=(243/255,133/255,36/255))

ax1.barh(height=0.005,width=-0.5*np.pi*2,y=0.7,color=(243/255,133/255,36/255))

ax1.scatter(-0.5*np.pi*2,y=0.7,color=(243/255,133/255,36/255))

至于这么画出这种效果

就当小作业了,多思考把

完毕,撒花*********

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值