Matplotlib和Seaborn数据可视化

目录

Matplotlib图表绘制

准备工作

折线图line

柱状图bar

水平条形图barh

饼图pie

散点图scatter

气泡图csatter

箱线图boxplot

直方图hist

蜂巢图hexbin

Seaborn图表绘制

准备数据

关系散点图scatterplot

关系散点线形图replot

分类散点图stripplot

分类小提琴图violinplot

分类平均值分布图barplot

分类技计数图countplot

矩形热力图heatmap

成对关系图pairplot


Matplotlib图表绘制

准备工作

import pandas as pd

anscombe = pd.read_csv('../data/e_anscombe.csv') # 资料中提供了这份数据
print(anscombe)

df1 = anscombe[anscombe['dataset']=='I']
df2 = anscombe[anscombe['dataset']=='II']
df3 = anscombe[anscombe['dataset']=='III']
df4 = anscombe[anscombe['dataset']=='IV']

折线图line

  • 折线图适用于时间序列数据分析、不同变量变化趋势比较、科学研究实验数据分析以及趋势预测和未来规划等多个场景。

    df1.plot() # 默认折线图
    #df1.plot(kind='line') # 结果与df1.plot()
    #df1.plot.line() # 结果与df1.plot()

    x轴是索引值,y轴是各列的具体值

    也可以通过参数指定xy轴对应的列名

    df1.plot.line(x='x', y='y')
    plt.show()

柱状图bar

  • 柱状图可应用于销售和市场分析、人口统计、学术研究、项目管理等场景,直观展示不同类别数据大小差异及分布情况,方便比较和分析。

    df1.plot.bar() # 柱状图
    df1.plot.bar(stacked=True) # 柱状堆积

    也可以通过参数指定xy轴对应的列名

    df1.plot.bar(x='x', y='y')
    plt.show()

水平条形图barh

  • 条形柱状图适用于销售业绩对比、人口统计分布展示、学术研究成果呈现、项目进度管理等众多场景,以直观的方式展现不同类别数据的大小差异,便于比较和分析各类数据的分布情况。

    df1.plot.barh() # 水平条形图
    df1.plot.barh(stacked=True) # 水平条形堆积图

    也可以通过参数指定xy轴对应的列名

    df1.plot.barh(x='x', y='y')
    plt.show()

饼图pie

  • 饼图主要应用于展示各部分占总体的比例关系,常见于市场份额分析、财务报表展示、人口构成统计等场景,能让人直观地看出不同部分在整体中的相对重要程度。

    饼图,只能展示一维数据

    参数y指定列名

    参数autopct='%.2f%%'指定显示百分比 %.2f%%表示保留2位小数

    参数radius=0.9 指定饼图直径的比例,最大为1

    参数figsize=(16, 8) 设定图片大小

    df1.plot.pie(y='x', autopct='%.2f%%', radius=0.9, figsize=(16, 8))
    plt.show()

散点图scatter

  • 散点图适用于展示两个变量之间的关系,可用于科学研究中分析变量相关性、金融领域判断资产价格关系、市场调研中探索因素关联等场景。

    指定xy轴,grid=True开启背景辅助线

    df1.plot.scatter(x='x', y='y', grid=True)
    plt.show()

气泡图csatter

  • 气泡图通常用于展示三个变量之间的关系,在市场分析中呈现不同产品的多个指标关系、科学研究中展示数据的多维特征等场景有广泛应用。

    参数s表示每个点的大小,与普通散点图相比能够描述三维数据

    df1.plot.scatter(x='x', y='y', grid=True, s=df1['x']*100)
    plt.show()

箱线图boxplot

  • 箱线图用于显示多种统计信息:最小值,1/4分位,中位数,3/4分位,最大值,以及离群值(如果有)

  • 箱线图主要应用于显示数据的分布情况,可用于质量控制中监测生产数据的稳定性、统计分析中比较多组数据的分布差异、金融领域分析股票收益的波动等场景。

    df1.boxplot()

    df1.plot.boxplot() # 报错

    plt.show()

直方图hist

  • 直方图适用于展示数据的分布形态,常见于质量控制中分析产品指标分布、统计研究中判断数据集中趋势和离散程度、市场调研中了解消费者特征分布等场景。

    描述数据出现的次数

    df1['x'].plot.hist()
    plt.show()

蜂巢图hexbin

  • 蜂巢图主要应用于复杂数据的可视化展示,可在社交网络分析中呈现关系结构、生物信息学中展示基因网络、物流网络规划中展示节点连接关系等场景。

    gridsize=12设定蜂箱格子的大小,数字越小格子越大

    df1.plot.hexbin(x='x', y='y', gridsize=12)
    plt.show()

Seaborn图表绘制

准备数据

# 导包
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns # Anaconda内置,无需额外安装
# 加载数据
tips_df = pd.read_csv('../data/f_tips.csv')
print(tips_df)

关系散点图scatterplot

# 关系型散点图
# 指定数据集,指定x轴为消费订单金额,y轴为消费金额,
# 散点图通用的可选参数 hue='sex'通过颜色指定分组
# 散点图通用的可选参数 style='smoker' 通过形状指定分组
# 散点图通用的可选参数 size='time' 通过大小指定分组
sns.scatterplot(
    data=tips_df, 
    x='total_bill', 
    y='tip', 
    hue='sex', 
    style='smoker', 
    size='time'
)
plt.show()

关系散点线形图replot

# replot关系散点图
sns.relplot(data=tips_df, x='total_bill', y='tip') # 默认 kind='scatter'
sns.relplot(data=tips_df, x='total_bill', y='tip', kind='line')
plt.show()

分类散点图stripplot

# stripplot分类散点图
f = plt.figure()
f.add_subplot(2,1,1)
# 按照x属性所对应的类别分别展示y属性的值,适用于分类数据
# 不同饭点的账单总金额的散点图
sns.stripplot(data=tips_df, x='time', y='total_bill')
f.add_subplot(2,1,2)
# hue通用参数按颜色划分
# jitter=True 当数据点重合较多时,尽量分散的展示数据点
# dodge=True 拆分分类
sns.stripplot(data=tips_df, x='time', y='total_bill', jitter=True, dodge=True, hue='day')
plt.show()
# 下边的代码只能输出一张图表
sns.stripplot(data=tips_df, x='time', y='total_bill')
sns.stripplot(data=tips_df, x='time', y='total_bill', jitter=True, dodge=True, hue='day')
plt.show()
# 所以我们使用下面的方法进行多图的输出
# f = plt.figure() # 创建画布
# f.add_subplot(2,1,1) # 在画布上申请图表空间,参数2,1,1表示2行1列中的第1个
# 图1 # sns.stripplot(data=tips_df, x='time', y='total_bill')
# f.add_subplot(2,1,2) # 在画布上申请图表空间,参数2,1,2表示2行1列中的第2个
# 图2 # sns.stripplot(data=tips_df, x='time', y='total_bill', jitter=True, dodge=True, hue='day')
# plt.show()

分类小提琴图violinplot

# violinplot分类小提琴
# 下图分别描述午餐账单、晚餐账单的最大值、最小值、三个四分位数,以及所有账单金额出现的次数(频率)
sns.violinplot(data=tips_df, x='time', y='total_bill')
plt.show()

分类平均值分布图barplot

# 下图中黑色的粗线条展示了数据的分布(误差线), 线条越短, 数据分布越均匀
# 下图中每个柱的顶点就是该分类y指定列的平均值
sns.barplot(data=tips_df, x='day', y='total_bill')
plt.show()

分类技计数图countplot

# 按x指定的列值分组统计出现次数
sns.countplot(data=tips_df, x='day')
plt.show()

矩形热力图heatmap

# 热力图
# 男女在午餐晚餐的平均消费
new_df = tips_df.pivot_table(index='sex', columns='time', values='total_bill', aggfunc='mean')
print(new_df)
# 输出为热力图:男性在晚餐花费最多
sns.heatmap(data=new_df)
plt.show()

成对关系图pairplot

# pairplot成对比关系图
sns.pairplot(tips_df)
#sns.pairplot(df) # 全部数值列进行两两组合
#sns.pairplot(df, vars=['列名1', '列名2']) # 指定要组合展示的列名
plt.show()
  • 按右上、左下、中间轴线(左上至右下)的方式分别设置图表类型

    pair_grid = sns.PairGrid(tips_df)

    中间轴线上的图设为kdeplot

    pair_grid.map_diag(sns.kdeplot)

    右上设为lineplot

    pair_grid.map_upper(sns.lineplot)

    左下设为scatterplot

    pair_grid.map_lower(sns.scatterplot)
    plt.show()

  • 将 Seaborn 提供的样式声明代码 sns.set() 放置在绘图前,就可以设置图像的样式

    sns.set(
    context='paper',
    style='darkgrid',
    palette='deep',
    font='sans-serif',
    font_scale=1
    )

    context: 参数控制着默认的画幅大小,分别有 {paper, notebook, talk, poster} 四个值。其中,poster > talk > notebook > paper。

    style:参数控制默认样式,分别有 {darkgrid, whitegrid, dark, white, ticks},你可以自行更改查看它们之间的不同。

    palette:参数为预设的调色板。分别有 {deep, muted, bright, pastel, dark, colorblind} 等,你可以自行更改查看它们之间的不同。

    font:用于设置字体

    font_scale:设置字体大小

    sns.scatterplot(data=tips_df, x='total_bill', y='tip', hue='sex', style='smoker', size='time')
    plt.show()

相关推荐
程序猿000001号14 小时前
探索数据可视化的利器:Matplotlib
信息可视化·matplotlib
dundunmm21 小时前
数据挖掘之认识数据
人工智能·机器学习·信息可视化·数据挖掘
江南野栀子1 天前
数据可视化-1. 折线图
信息可视化·数据挖掘·数据分析
drbool2 天前
AI驱动的数据分析:利用自然语言实现数据查询到可视化呈现
人工智能·信息可视化·数据分析
m0_748256142 天前
前端图表与数据可视化 - 2024 年实战与面试重点
前端·信息可视化·面试
萧鼎2 天前
Altair: 轻松创建交互式数据可视化
信息可视化
江南野栀子2 天前
数据可视化-4. 漏斗图
信息可视化·数据挖掘·数据分析
江南野栀子2 天前
数据可视化-2. 条形图
信息可视化·数据挖掘·数据分析
Aliano2172 天前
ES对比Hbase
elasticsearch·信息可视化·hbase
萧鼎2 天前
使用 Dash 构建交互式数据可视化应用
信息可视化·dash