python用matplotlib画玫瑰_Python可视化:用Matplotlib画个玫瑰图

dce61fe696cd4bdcb1fefdf6835979be.jpeg

emmmm,差不多 差不多就行,哈哈哈 100%还原太麻烦了

文字的和其他的修饰,作者实在嫌麻烦,有兴趣的朋友,可以自己尝试一下

下面进入教学时间,大家鼓掌

1.什么是玫瑰图

玫瑰图,玫瑰图,就是长得像玫瑰一样美丽的图(一耳光,pia扇飞了,不要说废话)

emmm,玫瑰图其实就是被掰弯了的柱状图(o(*▽*)q的捂脸)

2.怎么掰弯了个笔直的柱状图

用爱(又是一耳光,能不能正经点这位作者)

emmm, 把在笛卡尔坐标系里的柱状图,画到极坐标系去

3.什么是极坐标

长这样:

2cff1c3715664fc592df64da65a89759.jpeg

一个装逼的圆形

传统的笛卡尔坐标是这样的:

031d0143b11b4d3a8bc7b405e0dd8be1.jpeg

最熟悉的陌生人

笛卡尔坐标系中,靠x,y两个值能确定一个点的位置,而在极坐标中,考的是r(半径),θ(角度)来确定一个点的位置。

知识点:想把柱状图从笛卡尔家搬到极坐标家去,重要的就是算好θ

4.先画一个90度半圆

为了能打好基础,我们先来画个如下半圆。

86e0b320565d44fa9a1f1b1208aea59a.jpeg

importnumpyasnp

importmatplotlib.pyplotasplt

y=20

x=np.pi/2

w=np.pi/2

color=(206/255,32/255,69/255)

edgecolor=(206/255,32/255,69/255)

fig=plt.figure(figsize=(13.44,7.5))#建立一个画布

ax=fig.add_subplot(111,projection='polar')#建立一个坐标系,projection='polar'表示极坐标

ax.bar(left=x,height=y,width=w,bottom=10,color=color,edgecolor=color)

fig.savefig('E:test.png',dpi=400,bbox_inches='tight',transparent=True)

可以很清楚的发现

在笛卡尔坐标系中,一个柱状图由left,bottom,height,width四个参数决定位置和大小left决定了左边界,bottom决定了下边界,height决定了长度,width决定了宽度.

对应到笛卡尔坐标系中,left决定了扇形的中线位置,然后height决定扇形的长度,bottom决定了下边界,width决定了扇形的宽度。

能在目标位置画上一个扇形,基本上我们就能开始画玫瑰图辣!回到我们的例子中来

3f85d19d9bb04f93b5dca218aeab185d.jpeg

我们来分析一下

这个图由十个大扇形构成底图,然后中间在加上2个小的扇形。

所以先计算,十个大扇形的位置,思路大概是,把一个圆分成十份,然后找到十个扇形中线对应的θ。

x1=[np.pi/10+np.pi*i/5 for i in range(1,11)]

然后在计算20个小扇形的位置

x2=[np.pi/20+np.pi*i/5 for i in range(1,11)]x3=[3*np.pi/20+np.pi*i/5 for i in range(1,11)]

由于作者很怕麻烦,所以y值就随机生成了

先画第一层,最外圈的放文字的位置。

为了能画出线来,作者用重叠的方式,先画个半径是7000,在画个半径是6000,然后

x1=[np.pi/10+np.pi*i/5 for i in range(1,11)]x2=[np.pi/20+np.pi*i/5 for i in range(1,11)]x3=[3*np.pi/20+np.pi*i/5 for i in range(1,11)]y1=[7000 for i in range(0,10)]y2=[6000 for i in range(0,10)]fig=plt.figure(figsize=(13.44,7.5))ax = fig.add_subplot(111,projection='polar')ax.axis('off')ax.bar(left=x1, height=y1,width=np.pi/5,color=(220/255,222/255,221/255),edgecolor=(204/255,206/255,205/255))ax.bar(left=x1, height=y2,width=np.pi/5,color='w',edgecolor=(204/255,206/255,205/255))

86d96cc9904448b49b1c7d5ba57f736c.jpeg

random.seed(100)y4=[random.randint(4000,5500) for i in range(10)]y5=[random.randint(3000,5000) for i in range(10)]ax.bar(left=x2, height=y4,width=np.pi/10,color=(206/255,32/255,69/255),edgecolor=(206/255,32/255,69/255))ax.bar(left=x3, height=y5,width=np.pi/10,color=(34/255,66/255,123/255),edgecolor=(34/255,66/255,123/255))

然后我们在画中间的

658ac8ba865f4a029e3a53ce48f4ffb3.jpeg

最后在在中间画一个白色的小圆

y6=[2000 for i in range(0,10)]ax.bar(left=x1, height=y6,width=np.pi/5,color='w',edgecolor='w')

7fdf5f872f604cdb929b378b61f1a996.jpeg

大功告成,撒花

本文已由原作者授权

如需转载请联系EasyCharts团队!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值