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()

相关推荐
jie*3 小时前
小杰深度学习(sixteen)——视觉-经典神经网络——MobileNetV2
人工智能·python·深度学习·神经网络·tensorflow·numpy·matplotlib
熊猫比分管理员4 小时前
熊猫比分 APP:开启体育赛事观赛新“姿势”
信息可视化
Allen_LVyingbo8 小时前
2025.10月报 Cherry Stuido 1.6.4、Ollama 0.12.5、Dify 1.9.1升级使用摘要
信息可视化·数据分析·健康医疗
生信小窝9 小时前
068B-基于R语言平台Biomod2集成模型的物种分布模型构建和数据可视化教程【2027】
开发语言·信息可视化·r语言
gddkxc9 小时前
悟空 AI CRM 的回款功能:加速资金回流,保障企业财务健康
大数据·人工智能·信息可视化
派可数据BI可视化9 小时前
商业智能BI与业务结构分析
大数据·数据仓库·信息可视化·数据分析·商业智能bi
山海鲸可视化19 小时前
简单聊聊数据可视化大屏制作的前端设计与后端开发
前端·信息可视化·数字孪生·数据可视化·3d模型·三维渲染
HashTang1 天前
2025年10月实时最新获取地图边界数据方法,省市区县街道多级联动【文末附实时geoJson数据下载】
信息可视化·echarts·geojson·乡镇geojson·街道边界·geomap·街道geo
~~李木子~~1 天前
用 Matplotlib 实现数据可视化3 个案例实战
信息可视化·matplotlib
计算机毕业设计木哥2 天前
计算机毕设选题推荐:基于Hadoop和Python的游戏销售大数据可视化分析系统
大数据·开发语言·hadoop·python·信息可视化·spark·课程设计