使用极坐标图进行数据展示,相比于传统的笛卡尔坐标系(横纵坐标x,y),可以将普通的图表变得更加有视觉冲击力,极坐标图也称南丁格尔玫瑰图,本质就是极坐标系中的柱状图。本次采用一个案例展示各国的制造业指数数据(数据为测试用例数据,不具有分析价值)
源数据是一张Excel图表,包括国家和制造指数两个字段:
一、将本次数据可视化需要用到的第三方库导入:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import math
二、将Excel文件导入生成一个dataframe数组,将数组按照制造指数从小到大排列(提升数据展示效果的美观性),并将后续需要用到的变量进行赋值
data=pd.read_excel(r'D:python学习网易微专业数据分析课程python数据分析基础各国制造指数.xlsx')
data.sort_values(by='制造指数',inplace=True)
country=data['国家']
PMI=data['制造指数']
N=len(data)
三、matplotlib不默认支持中文字符,需要通过修改字体的方式实现对中文的展示
plt.rcParams['font.sans-serif']=['SimHei'] #设置字体为黑体,可以支持中文显示
四、通过设置绘图区域,创建一个极坐标系,并进行展示效果的相关设置
ax=plt.subplot(111,projection='polar') #设置一个绘图区域,建立极坐标图
ax.set_theta_zero_location('E')
#表示绘图开始的方位,分别为N, NW, W, SW, S, SE, E, NE(由东西南北组成的八个方向)
ax.set_thetagrids([]) #不显示外圈的角度值
ax.set_axis_off() #隐藏坐标轴
ax.tick_params(labelleft=False) #内圈的各个刻度线不显示
五、生成一组弧度数据,并以此绘制极坐标图
theta = np.arange(0, 2*np.pi, 2*np.pi/N) #生成一组弧度数据
bars=ax.bar(theta,PMI,bottom=30,width=1.8*np.pi/N)
#对应的参数分别是left(可以视为x坐标),height(可以视为y坐标),bottom(可以视为中间的空洞,用来添加文字说明等)width就是柱形的弧度(适当比例缩小宽度提升美观性)
六、对形成的极坐标图各个扇形进行颜色自定义设置
for i,bar in zip(PMI, bars):
bar.set_facecolor(plt.cm.CMRmap_r(i)) #CMRmap_r是一个数据集,用PMI指数作为索引值可以对应一个颜色,通过这种方式实现给各个柱形分配不同的颜色(同一色系从浅到深)
bar.set_alpha(0.5) #设置色彩的透明度(降低可以提升美观性)
七、对形成的极坐标图各个扇形增加数据和标签展示
for i,j,k in zip(theta,PMI,country):
if 90<math.degrees(i) < 270:
ax.text(i,j+70,str(k),rotation=math.degrees(i)-180)
#对每个扇形添加对应标签,参数为弧度,标签的y轴坐标(在扇形外部),标签的内容以及标签放置的角度,标签放置方向与扇形的方向保持一致(90~270度反向调换提升数据可读性)
else:
ax.text(i, j + 70, str(k), rotation=math.degrees(i))
ax.text(i, j-5, str(j)) #对每个扇形添加对应数据,参数为弧度,数据的y轴坐标,数据的内容
八、最后进行图表效果展示
plt.show()
最终效果如下: