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

边缘直方图 (Marginal Histogram)

边缘直方图具有沿 X 和 Y 轴变量的直方图。 这用于可视化 X 和 Y 之间的关系以及单独的 X 和 Y 的单变量分布。 这种图经常用于探索性数据分析(EDA)。

导入所需要的库

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

设定图像各种属性

large = 22; med = 16; small = 12
# 设置子图上的标题字体
params = {'axes.titlesize': large,
# 设置图例的字体
'legend.fontsize': med,
# 设置图像的画布
'figure.figsize': (16, 10),
# 设置标签的字体
'axes.labelsize': med,
# 设置x轴上的标尺的字体
'xtick.labelsize': med,
# 设置整个画布的标题字体
'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, # 分辨率
facecolor = 'white') # 背景颜色,默认为白色
# 网格 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:散点图

    # category__Category是pandas的一种数据类型
# astype__实现变量类型转换
# cat__获取分类变量的类别
# codes__按照类别编码
ax_main.scatter('displ', # 横坐标
'hwy', # 纵坐标
s = df.cty*4, # 设置点的尺寸
data = df, # 所使用的数据
c = df.manufacturer.astype('category').cat.codes, # 颜色类别
cmap = 'tab10', # 调色板
edgecolors = 'gray', # 边框颜色
linewidths = 0.5, # 线宽
alpha = 0.9) # 透明度

# step5:右边的直方图

ax_right.hist(df.hwy,                 # 需要绘图的变量
40, # 需要分为多少段
histtype = 'stepfilled', # 生成一个的线条轮廓
orientation = 'horizontal', # 方位__水平
color = 'deeppink') # 颜色__深粉色

# step6:底部的直方图

ax_bottom.hist(df.displ,                # 需要绘图的变量
40, # 需要分为多少段
histtype = 'stepfilled', # 生成一个的线条轮廓
orientation = 'vertical', # 方位__垂直
color = 'deeppink') # 颜色__深粉色
ax_bottom.invert_yaxis()

# 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() # 显示图像

博文总结

matplotlib.pyplot.hist(x,bins=None,range=None, density=None, bottom=None, histtype='bar', align='mid', 
log=False, color=None, label=None, stacked=False, normed=None)

关键参数

x: 数据集,最终的直方图将对数据集进行统计
bins: 统计的区间分布
range: tuple, 显示的区间,range在没有给出bins时生效
density: bool,默认为false,显示的是频数统计结果,为True则显示频率统计结果,这里需要注意,频率统计结果=区间数目/(总数*区间宽度),和normed效果一致,官方推荐使用density
histtype: 可选{'bar', 'barstacked', 'step', 'stepfilled'}之一,默认为bar,推荐使用默认配置,step使用的是梯状,stepfilled则会对梯状内部进行填充,效果与bar类似
align: 可选{'left', 'mid', 'right'}之一,默认为'mid',控制柱状图的水平分布,left或者right,会有部分空白区域,推荐使用默认
log: bool,默认False,即y坐标轴是否选择指数刻度
stacked: bool,默认为False,是否为堆积状图

数据可视化实例(八): 边缘直方图(matplotlib,pandas)的更多相关文章

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

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

  2. 数据可视化实例(九): 边缘箱形图(matplotlib,pandas)

    https://datawhalechina.github.io/pms50/#/chapter7/chapter7 边缘箱形图 (Marginal Boxplot) 边缘箱图与边缘直方图具有相似的用 ...

  3. 数据可视化实例(三): 散点图(pandas,matplotlib,numpy)

    关联 (Correlation) 关联图表用于可视化2个或更多变量之间的关系. 也就是说,一个变量如何相对于另一个变化. 散点图(Scatter plot) 散点图是用于研究两个变量之间关系的经典的和 ...

  4. 数据可视化实例(五): 气泡图(matplotlib,pandas)

    https://datawhalechina.github.io/pms50/#/chapter2/chapter2 关联 (Correlation) 关联图表用于可视化2个或更多变量之间的关系. 也 ...

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

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

  6. 数据可视化实例(十三): 发散型文本 (matplotlib,pandas)

    偏差 (Deviation) https://datawhalechina.github.io/pms50/#/chapter11/chapter11 发散型文本 (Diverging Texts) ...

  7. 数据可视化实例(十二): 发散型条形图 (matplotlib,pandas)

    https://datawhalechina.github.io/pms50/#/chapter10/chapter10 如果您想根据单个指标查看项目的变化情况,并可视化此差异的顺序和数量,那么散型条 ...

  8. 数据可视化实例(十一): 矩阵图(matplotlib,pandas)

    矩阵图 https://datawhalechina.github.io/pms50/#/chapter9/chapter9 导入所需要的库 import numpy as np # 导入numpy库 ...

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

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

随机推荐

  1. Visible Lattice Points(规律题)【数学规律】

    Visible Lattice Points 题目链接(点击) Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9031   ...

  2. Java——String类(常用类)

    一.String类——描述字符串 常用的方法简单介绍: 1.charAt() 获取对应位置的字符 2.length() 获取字符串的长度 3.concat() 在字符串的尾部追加内容-----相当于连 ...

  3. Python绘图之Turtle库详解(1)

    Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行 ...

  4. HTMLTestRunner生成html测试报告

    使用:把文件放到项目某个文件夹中,引入方式如下 import unittest import env import vendor.report.HTMLTestRunnerNew as HTMLTes ...

  5. ca77a_c++__一个打开并检查文件输入的程序_流对象_操作文件

    /*ca77a_c++__一个打开并检查文件输入的程序 习题:8.13 8.14*/ /*ca77a_c++__一个打开并检查文件输入的程序 习题:8.13 8.14 */ #include < ...

  6. vulstack红队评估(四)

    一.环境搭建: ①根据作者公开的靶机信息整理 虚拟机密码: ubuntu: ubuntu:ubuntu   win7: douser:Dotest123   Win2008 DC: administr ...

  7. Quartz.Net系列(六):Quartz五大构件Trigger之TriggerBuilder解析

    所有方法图: 1.Create.Build Create:创建一个TriggerBuilder Build:生成Trigger var trigger = TriggerBuilder.Create( ...

  8. 循序渐进VUE+Element 前端应用开发(11)--- 图标的维护和使用

    在VUE+Element 前端应用中,图标是必不可少点缀界面的元素,因此整合一些常用的图标是非常必要的,还好Element界面组件里面提供了很多常见的图标,不过数量不是很多,应该是300个左右吧,因此 ...

  9. Redis的常用配置

    1. 配置守护线程方式运行,修改damonize,使用yes启用守护线程,这样就可以后台运行了 damonize no 修改为 damonize yes 2. 手动指定redis的pid,可以通过pi ...

  10. 并发编程-CPU执行volatile原理探讨-可见性与原子性的深入理解

    volatile的定义 Java语言规范第3版中对volatile的定义如下:Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量.Jav ...