22.盒须图(boxplot)
23.棉棒图(Stem Plot; Lollipop plot)
24.极坐标图
25.雷达图(Radar Chart)

22.盒须图(boxplot)

盒须图(也称为箱形图)是一种图表类型,通常用于说明性数据分析中,通过显示数据四分位数(或百分位数)和平均值来直观地显示数值数据的分布和偏度(skewness)。

箱形图于1977年由美国著名统计学家约翰·图基(John Tukey)发明。它能显示出一组数据的最大值、最小值、中位数、及上下四分位数。

最小值(minimum)
下四分位数(Q1)
中位数(Median,也就是Q2)
上四分位数(Q3)
最大值(maximum)
四分位间距(IQR)
箱形图将数据分为几个部分,每个部分包含该集中大约25%的数据。

请注意,上图代表的数据是完美的正态分布,大多数箱形图均不符合这种对称性(每个四分位数的长度相同)。
箱形图形状将显示统计数据集是正态分布还是偏斜。


箱形图很有用,因为它们显示了数据集中的异常值(outliers,离群值)。
离群值是在数值上与其余数据相距遥远的观测值。
查看箱形图时,离群值定义为位于箱形图whiskers之外的数据点。

import matplotlib
import matplotlib.pyplot as plt
import numpy as np# Fixing random state for reproducibility
np.random.seed(19680801)# fake up some data
spread = np.random.rand(50) * 100
center = np.ones(25) * 50
flier_high = np.random.rand(10) * 100 + 100
flier_low = np.random.rand(10) * -100
data = np.concatenate((spread, center, flier_high, flier_low))fig1, ax1 = plt.subplots()
ax1.set_title('Basic Plot')
ax1.boxplot(data)plt.show()

import matplotlib
import matplotlib.pyplot as plt
import numpy as np# Fixing random state for reproducibility
np.random.seed(19680801)# fake up some data
spread = np.random.rand(50) * 100
center = np.ones(25) * 50
flier_high = np.random.rand(10) * 100 + 100
flier_low = np.random.rand(10) * -100
data = np.concatenate((spread, center, flier_high, flier_low))fig2, ax2 = plt.subplots()
ax2.set_title('Notched boxes')
ax2.boxplot(data, notch=True)plt.show()

import matplotlib
import matplotlib.pyplot as plt
import numpy as np# Fixing random state for reproducibility
np.random.seed(19680801)# fake up some data
spread = np.random.rand(50) * 100
center = np.ones(25) * 50
flier_high = np.random.rand(10) * 100 + 100
flier_low = np.random.rand(10) * -100
data = np.concatenate((spread, center, flier_high, flier_low))green_diamond = dict(markerfacecolor='g', marker='D')
fig3, ax3 = plt.subplots()
ax3.set_title('Changed Outlier Symbols')
ax3.boxplot(data, flierprops=green_diamond)plt.show()

Fake up some more data

import matplotlib
import matplotlib.pyplot as plt
import numpy as np# Fixing random state for reproducibility
np.random.seed(19680801)# fake up some data
spread = np.random.rand(50) * 100
center = np.ones(25) * 50
flier_high = np.random.rand(10) * 100 + 100
flier_low = np.random.rand(10) * -100
data = np.concatenate((spread, center, flier_high, flier_low))spread = np.random.rand(50) * 100
center = np.ones(25) * 40
flier_high = np.random.rand(10) * 100 + 100
flier_low = np.random.rand(10) * -100
d2 = np.concatenate((spread, center, flier_high, flier_low))
data.shape = (-1, 1)
d2.shape = (-1, 1)plt.show()

23.棉棒图(Stem Plot; Lollipop plot)

棉棒图绘制从基线到y坐标的垂直线,并在尖端(tip)放置一个标记。

import matplotlib.pyplot as plt
import numpy as npx = np.linspace(0.1, 2 * np.pi, 41)
y = np.exp(np.sin(x))plt.stem(x, y, use_line_collection=True)
plt.show()


基线的位置可以使用bottom进行调整。 参数linefmt,markerfmt和basefmt控制plot的基本格式属性。 但是,并非所有属性都可以通过关键字参数进行配置。 对于更高级的控制,可调整pyplot返回的线对象。

import matplotlib.pyplot as plt
import numpy as npx = np.linspace(0.1, 2 * np.pi, 41)
y = np.exp(np.sin(x))markerline, stemlines, baseline = plt.stem(x, y, linefmt='grey', markerfmt='D', bottom=1.1, use_line_collection=True)
plt.show()

import numpy as np
import pandas as pd
import matplotlib.pyplot as pltdf = pd.DataFrame({'Product':['Apple', 'Banana', 'Beer', 'Juice', 'Cheese','Coffee', 'Red wine', 'Hotdog'],'Turnover':[30, 59, 92, 43, 123, 93, 103, 37]},columns=['Product', 'Turnover'])
print(df)

输出结果:

    Product  Turnover
0     Apple        30
1    Banana        59
2      Beer        92
3     Juice        43
4    Cheese       123
5    Coffee        93
6  Red wine       103
7    Hotdog        37

import numpy as np
import pandas as pd
import matplotlib.pyplot as pltdf = pd.DataFrame({'Product':['Apple', 'Banana', 'Beer', 'Juice', 'Cheese','Coffee', 'Red wine', 'Hotdog'],'Turnover':[30, 59, 92, 43, 123, 93, 103, 37]},columns=['Product', 'Turnover'])
print(df)plt.figure(figsize=(9, 6))(markerline, stemlines, baseline) = plt.stem(df['Product'], df['Turnover'], use_line_collection=True)
plt.setp(markerline, marker='*', markersize=15, markeredgewidth=2, color='gold')
plt.setp(stemlines, color='gold')
plt.setp(baseline, visible=False)plt.tick_params(labelsize=12)
plt.xlabel('Product', size=12)
plt.ylabel('Turnover(k dollars)', size=12)
plt.ylim(bottom=0)plt.show()

该图描述了每种产品的营业额。 在八种产品中,奶酪的销售额带来了最大的营业额。

import pandas as pd
import matplotlib.pyplot as pltdf = pd.DataFrame({'Product':['Apple', 'Banana', 'Beer', 'Juice', 'Cheese','Coffee', 'Red wine', 'Hotdog'],'Turnover':[30, 59, 92, 43, 123, 93, 103, 37]},columns=['Product', 'Turnover'])
print(df)ordered_df = df.sort_values(by='Turnover').reset_index(drop=True)
my_range = range(1, len(df.index) + 1)plt.figure(figsize=(9, 6))plt.hlines(y=my_range, xmin=0, xmax=ordered_df['Turnover'], color='skyblue')
plt.plot(ordered_df['Turnover'], my_range, 'o', markersize=11)plt.yticks(ordered_df.index+1, ordered_df['Product'])
plt.tick_params(labelsize=12)
plt.xlabel('Turnover(k dollars)', size=12)
plt.ylabel('Product', size=12)
plt.xlim(left=0)plt.show()

24.极坐标图

调用subplot()创建子图时通过设置projection=’polar’,便可创建一个极坐标子图,然后调用plot()在极坐标子图中绘图。

import numpy as np
import matplotlib.pyplot as plt# 极坐标下需要的数据有极径和角度
r = np.arange(1, 6, 1)  # 极径
theta = [i * np.pi / 2 for i in range(5)]  # 角度# 指定画图坐标为极坐标,projection='polar'
ax = plt.subplot(111, projection='polar')
ax.plot(theta, r, linewidth=3, color='r')ax.grid(True)plt.show()

import numpy as np
import matplotlib.pyplot as plt# 极坐标参数设置
theta=np.arange(0,2*np.pi,0.02)
plt.figure(figsize=(8,4))
ax1= plt.subplot(121, projection='polar')
ax2= plt.subplot(122, projection='polar')
ax1.plot(theta,theta/6,'--',lw=2)
ax2.plot(theta,theta/6,'--',lw=2)
# 创建极坐标子图axax2.set_theta_direction(-1) # 坐标轴正方向改为顺时针
# set_theta_direction():坐标轴正方向,默认逆时针ax2.set_thetagrids(np.arange(0.0, 360.0, 90),['a','b','c','d'])
ax2.set_rgrids(np.arange(0.2,2,0.4))
# set_thetagrids():设置极坐标角度网格线显示及标签 → 网格和标签数量一致
# set_rgrids():设置极径网格线显示,其中参数必须是正数ax2.set_theta_offset(np.pi/2)
# set_theta_offset():设置角度偏移,逆时针,弧度制ax2.set_rlim(0.2,1.2)
ax2.set_rmax(2)
ax2.set_rticks(np.arange(0.1, 1.5, 0.2))
# set_rlim():设置显示的极径范围
# set_rmax():设置显示的极径最大值
# set_rticks():设置极径网格线的显示范围plt.show()

25.雷达图(Radar Chart)

雷达图是一种由一系列等角辐条(称为radii)组成的图表,每个辐条代表一个变量。 轮辐的数据长度与数据点变量的大小(magnitude )相对于所有数据点上变量的最大大小(maximum magnitude)成正比。 绘制一条线连接每个辐条的数据值。 这使该图块具有星形外观,并且是该图块的流行名称之一的起源。

适用时机:
比较两个或两个以上具有不同特征的items或groups。
检查一个个数据点的相对值。
在一张雷达图上显示少于十个因素。

没有内置函数允许使用Matplotlib制作雷达图。 因此,我们必须使用基本函数来构建它。

输入数据是pandas data frame,其中每行代表一个个体,每列代表一个变量。

import matplotlib.pyplot as plt
import pandas as pd
from math import pi# Set data
df = pd.DataFrame({'group': ['A', 'B', 'C', 'D'],'var1': [38, 1.5, 30, 4],'var2': [29, 10, 9, 34],'var3': [8, 39, 23, 24],'var4': [7, 31, 33, 14],'var5': [28, 15, 32, 14]
})# number of variable
categories = list(df)[1:]
N = len(categories)
print(N)# We are going to plot the first line of the data frame.
# But we need to repeat the first value to close the circular graph:
values=df.loc[0].drop('group').values.flatten().tolist()
values += values[:1]
print(values)# What will be the angle of each axis in the plot? (we divide the plot / number of variable)
angles = [n / float(N) * 2 * pi for n in range(N)]
angles += angles[:1]
print(angles)# Initialise the spider plot
ax = plt.subplot(111, polar=True)# Draw one axe per variable + add labels labels yet
plt.xticks(angles[:-1], categories, color='grey', size=8)# Draw ylabels
ax.set_rlabel_position(0)
plt.yticks([10, 20, 30], ["10", "20", "30"], color="grey", size=7)
plt.ylim(0, 40)# Plot data
ax.plot(angles, values, linewidth=1, linestyle='solid')# Fill area
ax.fill(angles, values, 'b', alpha=0.1)plt.show()

25.1.Radar chart with several individuals

# Libraries
import matplotlib.pyplot as plt
import pandas as pd
from math import pi# Set data
df = pd.DataFrame({'group': ['A', 'B', 'C', 'D'],'var1': [38, 1.5, 30, 4],'var2': [29, 10, 9, 34],'var3': [8, 39, 23, 24],'var4': [7, 31, 33, 14],'var5': [28, 15, 32, 14]
})# ------- PART 1: Create background# number of variable
categories = list(df)[1:]
N = len(categories)# What will be the angle of each axis in the plot? (we divide the plot / number of variable)
angles = [n / float(N) * 2 * pi for n in range(N)]
angles += angles[:1]# Initialise the spider plot
ax = plt.subplot(111, polar=True)# If you want the first axis to be on top:
ax.set_theta_offset(pi / 2)
ax.set_theta_direction(-1)# Draw one axe per variable + add labels labels yet
plt.xticks(angles[:-1], categories)# Draw ylabels
ax.set_rlabel_position(0)
plt.yticks([10, 20, 30], ["10", "20", "30"], color="grey", size=7)
plt.ylim(0, 40)# ------- PART 2: Add plots# Plot each individual = each line of the data
# I don't do a loop, because plotting more than 3 groups makes the chart unreadable# Ind1
values = df.loc[0].drop('group').values.flatten().tolist()
values += values[:1]
ax.plot(angles, values, linewidth=1, linestyle='solid', label="group A")
ax.fill(angles, values, 'b', alpha=0.1)# Ind2
values = df.loc[1].drop('group').values.flatten().tolist()
values += values[:1]
ax.plot(angles, values, linewidth=1, linestyle='solid', label="group B")
ax.fill(angles, values, 'r', alpha=0.1)# Add legend
plt.legend(loc='upper right', bbox_to_anchor=(0.1, 0.1))plt.show()

df = pd.DataFrame({'client_id': ['c1','c2','c3','c4'],'cheese': [2, 5, 4, 3],'beer': [2, 1, 3, 5],'chicken': [5, 3, 3, 4],'bread': [4, 3, 2, 1],'coffee': [2, 3, 5, 3]},columns=['client_id', 'cheese', 'beer', 'chicken', 'bread', 'coffee'])
df

# Libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from math import pi# Set data
df = pd.DataFrame({'client_id': ['c1','c2','c3','c4'],'cheese': [2, 5, 4, 3],'beer': [2, 1, 3, 5],'chicken': [5, 3, 3, 4],'bread': [4, 3, 2, 1],'coffee': [2, 3, 5, 3]},columns=['client_id', 'cheese', 'beer', 'chicken', 'bread', 'coffee'])categories = list(df)[1:]values = df.mean().values.flatten().tolist()
values += values[:1] # repeat the first value to close the circular graphangles = [n / float(len(categories)) * 2 * pi for n in range(len(categories))]
angles += angles[:1]fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(8, 8), subplot_kw=dict(polar=True))plt.xticks(angles[:-1], categories, color='grey', size=12)
plt.yticks(np.arange(1, 6), ['1', '2', '3', '4', '5'], color='grey', size=12)
plt.ylim(0, 5)
ax.set_rlabel_position(30)ax.plot(angles, values, linewidth=1, linestyle='solid')
ax.fill(angles, values, 'skyblue', alpha=0.4)plt.show()

该雷达图描述了4个客户的平均产品偏好。 chicken是最受欢迎的产品.

# Libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from math import pi# Set data
df = pd.DataFrame({'client_id': ['c1','c2','c3','c4'],'cheese': [2, 5, 4, 3],'beer': [2, 1, 3, 5],'chicken': [5, 3, 3, 4],'bread': [4, 3, 2, 1],'coffee': [2, 3, 5, 3]},columns=['client_id', 'cheese', 'beer', 'chicken', 'bread', 'coffee'])categories = list(df)[1:]values = df.mean().values.flatten().tolist()
values += values[:1] # repeat the first value to close the circular graphangles = [n / float(len(categories)) * 2 * pi for n in range(len(categories))]
angles += angles[:1]fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(8, 8), subplot_kw=dict(polar=True))plt.xticks(angles[:-1], categories, color='grey', size=12)
plt.yticks(np.arange(1, 6), ['1', '2', '3', '4', '5'], color='grey', size=12)
plt.ylim(0, 5)
ax.set_rlabel_position(30)# part 1
val_c1 = df.loc[0].drop('client_id').values.flatten().tolist()
val_c1 += val_c1[:1]
ax.plot(angles, val_c1, linewidth=1, linestyle='solid', label='Client c1')
ax.fill(angles, val_c1, 'skyblue', alpha=0.4)# part 2
val_c2 = df.loc[1].drop('client_id').values.flatten().tolist()
val_c2 += val_c2[:1]
ax.plot(angles, val_c2, linewidth=1, linestyle='solid', label='Client c2')
ax.fill(angles, val_c2, 'lightpink', alpha=0.4)plt.legend(loc='upper right', bbox_to_anchor=(0.1, 0.1))plt.show()

该雷达图显示了4个客户中2个客户的偏好。客户c1喜欢鸡肉和面包,不那么喜欢奶酪。 但是,客户c2比其他4种产品更喜欢奶酪,并且不喜欢啤酒。

22.23.24.25.盒须图(boxplot)、棉棒图(Stem Plot; Lollipop plot)、极坐标图、雷达图(Radar Chart)相关推荐

  1. Python 数据分析三剑客之 Matplotlib(九):极区图 / 极坐标图 / 雷达图的绘制

    CSDN 课程推荐:<Python 数据分析与挖掘>,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务.曾与联想.亨氏.网 ...

  2. Qt图表绘制(QtCharts)-绘制简单的极坐标图[雷达图](11)

    Qt图表绘制(QtCharts)-绘制简单的极坐标图[雷达图](11)

  3. 韩顺平循序渐进学java 第21.22.23.24讲 集合

    21.1 引出问题 一个问题? 前面我们学习了数组,充分体会到数组的优越性,就是可以存储同一类型的数据,但是我们假设有这样的需求,大家看看如何解决? 请做一个公司职员薪水管理系统,要求完成如下功能: ...

  4. matlab怎么画极轴,matplotlib常见图表绘制——极坐标图-雷达图、极轴图

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:斑点鱼 极坐标轴 调用subplot()创建子图时通过设置proje ...

  5. Matplotlib:极坐标图/雷达图

    文章目录 创建极坐标轴 极坐标参数设置 雷达图1 - 极坐标的折线图/填图 - plt.plot() 雷达图2 - 极坐标的折线图/填图 - plt.polar() 极轴图 - 极坐标的柱状图 调用s ...

  6. 多维度雷达图怎么做_数据可视化:柱状图、雷达图等六种基本图表的特点和适用场合...

    序言 进入正题之前,先纠正一种误解. 有人觉得,基本图表太简单.太原始,不高端,不大气,因此追求更复杂的图表.但是,越简单的图表,越容易理解,而快速易懂地理解数据,不正是"数据可视化&quo ...

  7. QtChart实现极坐标图(雷达图)——QtWidgets

    1. 前言 突然好奇极坐标图(雷达图)是怎么实现的,就查了一下资料,发现有几种实现方法:一是QtChart实现:二是QCustomPlot实现:三是自绘.前两者都给了示例,所以我就学了学,后者自绘我尽 ...

  8. 4.21 LNMP环境介绍 4.22/23/24 Mariadb安装 4.25 服务管理

    2019独角兽企业重金招聘Python工程师标准>>> LNMP环境介绍 Mariadb安装 服务管理 LNMP环境介绍 Linux+Nginx+Mysql/mariadb+php ...

  9. [置顶] Android自定义控件 芝麻信用分雷达图

    [置顶] Android自定义控件 芝麻信用分雷达图 标签: android自定义雷达芝麻信用 2016-10-23 20:11  3548人阅读  评论(24)  收藏  举报   分类: 自定义控 ...

最新文章

  1. 端口偷窃(Port Stealing)技术
  2. vb链接mysql登录界面_求大神!有谁会用VB设计用户登陆界面连接到数据库
  3. Go tcp客户端、服务端编程
  4. python腾讯语音合成
  5. 对应到对象 数据库驼峰_SpringJPA底层DAO查询的写法归类总结
  6. 联想成为中国女排主赞助商,却被自媒体攻击?网友:还好没赞助国足
  7. CentOS中zip压缩和unzip解压缩命令详解
  8. Linux 系统常用命令
  9. Ubuntu 禁止集成noueavu驱动并安装NVIDIA显卡驱动
  10. mysql 脏读 不可重复读 幻读_mysql事务隔离级别/脏读/不可重复读/幻读详解
  11. 微信对接推送模板消息
  12. 【人工智能数学基础(三)】数学优化
  13. CUDA编程: GPU与CPU之间使用全局统一内存的完整代码及编译
  14. 被误解最大的基础学科——统计学,到底是个啥?
  15. python两列时间间隔计算器_python时间差计算器时分秒_python 实现日期计算器
  16. Spark基础练习系列
  17. 台式计算机的CPU上安装有小风扇,台式机风扇声音大怎么办 台式机cpu风扇怎么拆【步骤】...
  18. 如何完美卸载pads 9.5/vx
  19. google chrome支持建行网银
  20. 判断二叉树是否为完全二叉树

热门文章

  1. 《西瓜书》-11.特征选择与稀疏学习
  2. 浅谈移动端——前端适配详解
  3. sql server 2008 R2 与 sql server 2012 下载地址(包括x86、x64)
  4. 中软国际(深圳)招聘FPGA开发工程师
  5. 学Linux有哪些就业方向?
  6. 基于QT搭建的网易云音乐
  7. 获取token的一些方法
  8. 微型计算机原理实验二,微机原理实验2
  9. CreateWindowW函数
  10. 如何制作Gif动态图