https://datawhalechina.github.io/pms50/#/chapter7/chapter7

边缘箱形图 (Marginal Boxplot)

边缘箱图与边缘直方图具有相似的用途。 然而,箱线图有助于精确定位 X 和 Y 的中位数、第25和第75百分位数。

导入所需要的库

import numpy as np              # 导入numpy库
import pandas as pd # 导入pandas库
import matplotlib as mpl # 导入matplotlib库
import matplotlib.pyplot as plt
import seaborn as sns # 导入seaborn库
%matplotlib inline # 在jupyter notebook显示图像

设定图像各种属性

large = 22; med = 16; small = 12

params = {'axes.titlesize': large,    # 设置子图上的标题字体
'legend.fontsize': med, # 设置图例的字体
'figure.figsize': (16, 10), # 设置图像的画布
'axes.labelsize': med, # 设置标签的字体
'xtick.labelsize': med, # 设置x轴上的标尺的字体
'ytick.labelsize': med, # 设置整个画布的标题字体
'figure.titlesize': large}
plt.rcParams.update(params) # 更新默认属性
plt.style.use('seaborn-whitegrid') # 设定整体风格
sns.set_style("white") # 设定整体背景风格

程序代码

# step1:导入数据

df = pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/mpg_ggplot2.csv")

# step2:创建子图对象与网格

    # 画布
fig = plt.figure(figsize = (16, 10), # 画布大小_(16, 10)
dpi = 80) # 分辨率_80
# 网格
grid = plt.GridSpec(4, # 行数
4, # 列数
hspace = 0.5, # 行与行之间的间隔
wspace = 0.2) # 列与列之间的间隔

# step3:明确子图的位置

    # 确定如图所示散点图的位置
ax_main = fig.add_subplot(grid[:-1, :-1])
# 确定如图所示右边边缘箱形图的位置
ax_right = fig.add_subplot(grid[:-1, -1], xticklabels = [], yticklabels = [])
# 确定如图所示最底下边缘箱形图的位置
ax_bottom = fig.add_subplot(grid[-1, 0:-1], xticklabels = [], yticklabels = [])

# step4:散点图

ax_main.scatter('displ',                # 横坐标
'hwy', # 纵坐标
s= df.cty * 5, # 设置点的尺寸
c = df.manufacturer.astype('category').cat.codes, # 颜色类别
alpha = 0.9, # 透明度
data = df, # 所使用的数据
cmap = 'tab10', # 调色板
edgecolors = 'gray', # 边框颜色
linewidths = 0.5) # 线宽

# step5:右边的箱线图

sns.boxplot(df.hwy,         # 需要绘制的变量
ax = ax_right, # 绘制需要的子图
orient= 'v') # 方位__垂直

# step6:底部的箱线图

sns.boxplot(df.displ,       # 需要绘制的变量
ax = ax_bottom, # 绘制需要的子图
orient = 'h') # 方位__水平

# step7:装饰图像

ax_main.set(title = 'Scatterplot with Histograms \n displ vs hwy',   # 设置标题
xlabel = 'displ', # 横坐标名称
ylabel = 'hwy') # 纵坐标名称
ax_main.title.set_fontsize(20) # 设置标题字体大小 # xaxis.label__x坐标轴的标题
# yaxis.label__y坐标轴的标题
# xticklabel__x坐标轴的标尺
# yticklabel__y坐标轴的标尺
# 遍历每一个对象并且修改其字体大小
for item in ([ax_main.xaxis.label, ax_main.yaxis.label] + ax_main.get_xticklabels() + ax_main.get_yticklabels()):
item.set_fontsize(14) # 修改字体大小 xlabels = ax_main.get_xticks().tolist() # 将散点图上的x坐标轴上的标尺提取后转换为list(一位小数)
ax_main.set_xticklabels(xlabels) # 将xlabels中的数字设置为散点图上的坐标轴上的标尺
plt.show()

博文总结

seaborn.boxplot

seaborn.boxplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, 
orient=None, color=None, palette=None, saturation=0.75, width=0.8, dodge=True,
fliersize=5, linewidth=None, whis=1.5, notch=False, ax=None, **kwargs)

seaborn.boxplot 接口的作用是绘制箱形图以展现与类别相关的数据分布状况。

箱形图(或盒须图)以一种利于变量之间比较或不同分类变量层次之间比较的方式来展示定量数据的分布。图中矩形框显示数据集的上下四分位数,而矩形框中延伸出的线段(触须)则用于显示其余数据的分布位置,剩下超过上下四分位间距的数据点则被视为“异常值”。

输入数据可以通过多种格式传入,包括:

  • 格式为列表,numpy数组或pandas Series对象的数据向量可以直接传递给xyhue参数。
  • 对于长格式的DataFrame,xy,和hue参数会决定如何绘制数据。
  • 对于宽格式的DataFrame,每一列数值列都会被绘制。
  • 一个数组或向量的列表。

在大多数情况下,可以使用numpy或Python对象,但更推荐使用pandas对象,因为与数据关联的列名/行名可以用于标注横轴/纵轴的名称。此外,您可以使用分类类型对变量进行分组以控制绘图元素的顺序。

此函数始终将其中一个变量视为分类,并在相关轴上的序数位置(0,1,... n)处绘制数据,即使数据属于数值类型或日期类型也是如此。

更多信息请参阅 教程

参数:x, y, hue数据或向量数据中的变量名称,可选

用于绘制长格式数据的输入。查看样例以进一步理解。

data:DataFrame,数组,数组列表,可选

用于绘图的数据集。如果xy都缺失,那么数据将被视为宽格式。否则数据被视为长格式。

order, hue_order:字符串列表,可选

控制分类变量(对应的条形图)的绘制顺序,若缺失则从数据中推断分类变量的顺序。

orient:“v” | “h”,可选

控制绘图的方向(垂直或水平)。这通常是从输入变量的dtype推断出来的,但是当“分类”变量为数值型或绘制宽格式数据时可用于指定绘图的方向。

color:matplotlib颜色,可选

所有元素的颜色,或渐变调色板的种子颜色。

palette:调色板名称,列表或字典,可选

用于hue变量的不同级别的颜色。可以从 color_palette() 得到一些解释,或者将色调级别映射到matplotlib颜色的字典。

saturation:float,可选

控制用于绘制颜色的原始饱和度的比例。通常大幅填充在轻微不饱和的颜色下看起来更好,如果您希望绘图颜色与输入颜色规格完美匹配可将其设置为1

width:float,可选

不使用色调嵌套时完整元素的宽度,或主要分组变量一个级别的所有元素的宽度。

dodge:bool,可选

使用色调嵌套时,元素是否应沿分类轴移动。

fliersize:float,可选

用于表示异常值观察的标记的大小。

linewidth:float,可选

构图元素的灰线宽度。

whis:float,可选

控制在超过高低四分位数时IQR的比例,因此需要延长绘制的触须线段。超出此范围的点将被识别为异常值。

notch:boolean,可选

是否使矩形框“凹陷”以指示中位数的置信区间。还有其他几个参数可以控制凹槽的绘制方式;参见 plt.boxplot 以查看关于此问题的更多帮助信息。

ax:matplotlib轴,可选

绘图时使用的Axes轴对象,否则使用当前Axes轴对象。

kwargs:键,值映射

其他在绘图时传给 plt.boxplot 的参数。

返回值:ax:matplotlib轴

返回Axes对轴象,并在其上绘制绘图。

https://www.cntofu.com/book/172/docs/16.md

数据可视化实例(九): 边缘箱形图(matplotlib,pandas)的更多相关文章

  1. 【Matplotlib】数据可视化实例分析

    数据可视化实例分析 作者:白宁超 2017年7月19日09:09:07 摘要:数据可视化主要旨在借助于图形化手段,清晰有效地传达与沟通信息.但是,这并不就意味着数据可视化就一定因为要实现其功能用途而令 ...

  2. 数据可视化实例(七): 计数图(matplotlib,pandas)

    https://datawhalechina.github.io/pms50/#/chapter5/chapter5 计数图 (Counts Plot) 避免点重叠问题的另一个选择是增加点的大小,这取 ...

  3. 数据可视化实例(十七):包点图 (matplotlib,pandas)

    排序 (Ranking) 包点图 (Dot Plot) 包点图表传达了项目的排名顺序,并且由于它沿水平轴对齐,因此您可以更容易地看到点彼此之间的距离. https://datawhalechina.g ...

  4. Qt数据可视化(散点图、折线图、柱状图、盒须图、饼状图、雷达图)开发实例

    ​  目录 散点图 折线图 柱状图 水平柱状图 水平堆叠图 水平百分比柱状图 盒须图 饼状图 雷达图 Qt散点图.折线图.柱状图.盒须图.饼状图.雷达图开发实例. 在开发过程中我们会使用多各种各样的图 ...

  5. 数据可视化实例(十六):有序条形图(matplotlib,pandas)

    排序 (Ranking) 棒棒糖图 (Lollipop Chart) 棒棒糖图表以一种视觉上令人愉悦的方式提供与有序条形图类似的目的. https://datawhalechina.github.io ...

  6. 数据可视化基础专题(四):Pandas基础(三) mysql导入与导出

    转载(有添加.修改)作者:但盼风雨来_jc链接:https://www.jianshu.com/p/238a13995b2b來源:简书著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处 ...

  7. 数据可视化基础专题(八):Pandas基础(七) 数据清洗与预处理相关

    1.数据概览 第一步当然是把缺失的数据找出来, Pandas 找缺失数据可以使用 info() 这个方法(这里选用的数据源还是前面一篇文章所使用的 Excel ,小编这里简单的随机删除掉几个数据) i ...

  8. 数据可视化实例(八): 边缘直方图(matplotlib,pandas)

    https://datawhalechina.github.io/pms50/#/chapter6/chapter6 边缘直方图 (Marginal Histogram) 边缘直方图具有沿 X 和 Y ...

  9. 数据可视化实例(十四):带标记的发散型棒棒糖图 (matplotlib,pandas)

    偏差 (Deviation) 带标记的发散型棒棒糖图 (Diverging Lollipop Chart with Markers) 带标记的棒棒糖图通过强调您想要引起注意的任何重要数据点并在图表中适 ...

随机推荐

  1. 包子凑数(dp 0-1、完全背包)【背包问题】

    包子凑数(蓝桥杯) 感谢:@ Statusrank 题目链接(点击) 题目描述 小明几乎每天早晨都会在一家包子铺吃早餐.他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子.每种蒸笼都有非常多 ...

  2. Swift Core Data 图片存储与读取

    1.首先推出选择拍照还是相册的alert,代码如下: UIAlertController *alert = [UIAlertController alertControllerWithTitle:ni ...

  3. Py中去除列表中小于某个数的值

    ### Py去除列表中小于某个数的值 print('*'*10,'Py去除列表中小于某个数的值','*'*10) nums = [2,3,4,10,9,11,19,14] print('*'*10,' ...

  4. shutil模块的使用

    shutil模块 高级的文件,文件夹,压缩包处理模块 shutil.copyfileobj(fsrc,fdst,length) 将文件内容拷贝到另外一个文件中,可以部分.fdst目标length长度( ...

  5. [每日一题2020.06.09] leetcode #97 交错字符串 dp

    题目链接 利用动态规划的思想, 对于每种状态(i, j)来说都有(i-1, j) 和 (i,j-1) 需要注意的问题 : 初始化的问题,先把i=0和j=0的状态都初始化后才可以进行dp否则发生数组越界 ...

  6. LeetCode 77,组合挑战,你能想出不用递归的解法吗?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode第46篇文章,我们一起来LeetCode中的77题,Combinations(组合). 这个题目可以说是很精辟了,仅仅 ...

  7. Paper templates for Word(Word论文模板)

    经常看论文的朋友可能会发现,像一些大的会议的论文格式都是相同的,他们的格式一般都十分固定,这些论文是用什么软件做出来的呢?一开始我想当然的认为是用LaTeX,因为LaTeX提供了一些文类,我自然而然的 ...

  8. ULVAC爱发科皮拉尼真空计SW1-N说明书-手册

    ULVAC爱发科皮拉尼真空计SW1-N1/N2/N SWP-16-N/传感器单元规管 https://wenku.baidu.com/view/cff03803a6c30c2259019ef5.htm ...

  9. 1169A+B问题终结版(高精度计算)

    描述 给定两个整数A和B,输出A+B的值.A和B的值可能会很大很大,甚至达到100位.现在请你解决这一问题. 输入 两行,分别是两个整数A,B,换行隔开.A和B会很大很大. 输出 一个整数,即A+B的 ...

  10. IWAB0398E Error in generating WSDL from Java: java.lang.ClassNotFoundException

    今天想用Eclipse创建WebService,报错信息 IWAB0398E Error in generating WSDL from Java: java.lang.ClassNotFoundEx ...