查看原文
其他

数据呈现 丨用python绘制极坐标图形

威武哥 数据Seminar 2021-06-03

古希腊毕达哥拉斯学派曾称


一切平面图形中,圆是最美的。


如是所言,圆是几何中最讲究对称的图形,也是最别致的曲线。相信大家在论文、报告的写作中,柱状图、条形图露脸次数应该是最多的。虽然说柱状图、条形图可以清晰的展现出数据的变化趋势,但对于视觉动物的我们,出现的次数多了,终究还是会有审美疲劳。
倘若我们能够把柱状图、条形图“掰弯”,让它以圆的形式展示,相信会给人耳目一新的感觉。
能绘制极坐标图的工具不少,今天为大家带来它三种图形的绘制,分别为散点图、柱状图、雷达图,所用工具是我们的老朋友 python自带的 matplotlib 包。
下面展示了极坐标散点图、极坐标饼状图、极坐标雷达图三种图形的画法示例,并详解每种画法代码的含义。




极坐标散点图


在画之前,首先导入所用包及相关设置。
import pandas as pd import numpy as npimport matplotlib.pyplot as plt%matplotlib inline
左右滑动查看更多
散点图将所有的数据以点的形式展现在坐标系上,可以观察数据点的分布情况,在直角坐标系,可以推断变量间的相关性,而在极坐标上,更侧重数据的分布及离散情况
#生成范例数据r = 2 * np.random.rand(100) #生成100个服从“0~1”均匀分布的随机样本值theta = 2 * np.pi * np.random.rand(100) #生成角度 area = 100 * r**2 #面积colors = theta #颜色 ax = plt.subplot(111, projection='polar') #projection为画图样式,除'polar'外还有'aitoff', 'hammer', 'lambert'等c = ax.scatter(theta, r, c=colors, s=area, cmap='cool', alpha=0.75)#ax.scatter为绘制散点图函数 plt.show()
左右滑动查看更多
所作图形如下所示,可以看到散点在极坐标上的分布情况,以及散点自身特点(如大小、颜色等)情况。

图一

注:上图为随机数据生成的图,每次运行得到的图形会有所不同。matplot的色彩映射请参考官方文档:

https://www.matplotlib.org.cn/tutorials/colors/colormaps.html

散点图plt.scatter相关参数详解:




极坐标柱状图


柱状图是一种以长方形长度为变量的统计报告图,由一系列高度不等的纵向条纹表示数据分布的情况。极坐标柱状图则是将柱形条显示在极坐标中,其不仅保留了直角坐标系中数据变化趋势的优点,而且图形表达形式也更加美观。
N = 20theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False) # 从0到2pi生成均匀间隔的20个数,endpoint为Flase表示不包含末尾数字2pi,默认为True,这里指的是角度

R = 10 * np.random.rand(N) # 随机生成20个半径width = np.pi / 8 * np.random.rand(N) # 线的宽度ax = plt.subplot(111, projection = 'polar') # 极坐标图'polar'bars = ax.bar(theta,R, width = width, bottom = 0.0) # 绘制柱子 # 利用循环设置每个柱子的颜色、透明度for r, bar in zip(radii, bars): bar.set_facecolor(plt.cm.viridis(r / 10.)) # 设置颜色 bar.set_alpha(0.5) # 设置透明度plt.show()
左右滑动查看更多
所作图形如下所示,可以看到,图形可以很清楚地传达数据的大小,一如你在柱状图(条形图)上看到的,你还可以尝试在圆外添加标签,使得柱条与标签一一对应起来(不会的话请继续阅读下文极坐标雷达图的绘制)。


图二
条形图函数plt.bar参数详解:




极坐标雷达图


雷达图也称网络图,蜘蛛图等,用于比较和评估多个指标之间的强弱关系。
#生成数据,注意第一组与最后一组数据是相同的,确保可以连成一个闭合多边形country = ["CHINA", "USA", "JAPAN", "KOREA", "ENGLAND"]index1= [4.5, 4.9, 3.9, 2.8, 2.6, 4.5]index2= [4.9, 4.7, 4.5, 3.9, 3.8, 4.9] plt.figure(figsize = (10, 6)) #设置图形大小plt.subplot(polar = True) #设置图形为极坐标图 theta = np.linspace(0, 2 * np.pi, len(index1)) #根据index1的数量将圆均分#设置网格,标签 lines, labels = plt.thetagrids(range(0, 360, int(360/len(country))), (country)) #绘制index1 plt.plot(theta,index1 )plt.fill(theta,index1 , 'g', alpha=0.1) #设置颜色与透明度#绘制index2plt.plot(theta, index2) # 添加图例和标题plt.legend(labels=('index1', 'index2'), loc = 'best',frameon = True) # loc为图例位置plt.title("index1 vs index2");
左右滑动查看更多
所作图形如下所示,我们不仅可以看到同一个国家两个指标index1index2的大小关系,还可以看到不同国度同一个指标的大小情况。


图三
图例绘制函数plt.legend参数详解:








►往期推荐

回复【Python】👉简单有用易上手

回复【学术前沿】👉机器学习丨大数据

回复【数据资源】👉公开数据

回复【可视化】👉你心心念念的数据呈现

回复【老姚专栏】👉老姚趣谈值得一看


►一周热文

数据呈现 | R语言绘图包大全(共40个包)

特别推荐丨老姚专栏:利用实验方法进行因果识别的效度问题

工具&方法 | 黑科技!Excel中的rept函数也能绘图

数据呈现 | 用 pyecharts 绘制时间线动图

特别推荐 | “正则表达式”在工业企业数据库匹配中的运用(二)




数据Seminar

这里是大数据、分析技术与学术研究的三叉路口


作者:威武哥(叶武威)
审阅:杨奇明编辑:青酱






    欢迎扫描👇二维码添加关注    


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存