matplotlib和seaborn画图

Matplotlib

Matplotlib是⼀个Python 2D绘图库,与numpy、pandas共享数据科学三剑客的美誉,也是很多⾼级可视化库的基础。
从简单的折线图到复杂的三维图或者是符合图,matplotlib都可以完成。在科学计算里,常见的图有以下这些:

名称 使用场景
折线图 展示数据随时间的变化趋势。<br /> 比较多个数据系列的变化趋势。 <br />适合连续数据。
柱状图 比较不同类别的数据量。 <br />展示分类数据的分布。 <br />适合离散数据
直方图 展示数据的分布情况。<br />适合连续数据。
饼图 展示各部分在整体中所占的比例。 <br />适合分类数据,且类别不多。
散点图 展示两个变量之间的关系。<br /> 识别数据的模式和趋势。 <br />适合连续数据。
箱线图 展示数据的分布情况,<br />特别是中位数、四分位数和异常值。 |<br />适合连续数据。
热力图 展示二维数据矩阵。 <br />适合大量数据的可视化。
雷达图 展示多维度数据的比较。 <br />适合分类数据。
气泡图 展示三个变量之间的关系。 <br />适合连续数据。
地图 展示地理数据的分布。<br />适合地理位置相关的数据。
饼图堆叠柱状图 展示多个类别在总体中的贡献。<br /> 适合分类数据。
南丁格尔玫瑰图 展示多维度数据的比较,类似于雷达图,但以圆形布局。 <br />适合分类数据。

下面通过示例了解matplotlib的使用

折线图

from matplotlib import pyplot  as plt
months  = ['January','February','March','April','May','June','July','August','September','October','November','December']
xiaoshoue = [300,240,270,310,300,350,310,316,323,307,420,370]

# 设置字体
plt.rcParams['font.family'] = 'SimHei'  # windows系统-- SimHei
plt.rcParams['font.size'] = 11

# 指定画布大小
plt.figure(figsize=(12,4),dpi=100,facecolor='yellow')
# <dots per inch> 每英寸的像素点数
# 引入折线图的方法
plt.plot(
    months,  # X轴数据
    xiaoshoue, # Y轴数据
    marker='o', # 标点的形状
    markerfacecolor='yellow', # 标点的颜色
    markeredgecolor='red', # 标点边框的颜色
    markersize='10', # 标点大小
    linestyle='-.', # 线段样式
    color = 'red', # 线段的颜色
    linewidth = 2,   # 也可以用lw = 2,  线段的粗细
    alpha = 0.5 # 线段的透明度  0-1 之间
)
# x轴的标签
plt.xlabel('月份')
# y轴的标签
plt.ylabel('销量/万')
# 标题
plt.title('全年销售趋势-折线图')
# 网格
plt.grid(color='gray',linestyle=':',alpha=0.5,linewidth=1)
# 图片的保存
plt.savefig('全年销售趋势-折线图.png')

# 显示   pycharm 中 必须要要写显示方法
plt.show()
image.png

柱状图

months  = ['January','February','March','April','May','June','July','August','September','October','November','December']
xiaoshoue = [300,240,270,310,300,350,310,316,323,307,420,370]

# 指定画布大小
plt.figure(figsize=(12,4),dpi=100,facecolor='blue')

plt.bar(months,xiaoshoue,width=0.5)

plt.show()
image.png

水平条形图

months  = ['January','February','March','April','May','June','July','August','September','October','November','December']
xiaoshoue = [300,240,270,310,300,350,310,316,323,307,420,370]

# 指定画布大小
plt.figure(figsize=(12,4),dpi=100,facecolor='blue')

plt.barh(months,xiaoshoue)

plt.show()
image.png

散点图

months  = ['January','February','March','April','May','June','July','August','September','October','November','December']
xiaoshoue = [300,240,270,310,300,350,310,316,323,307,420,370]

# 指定画布大小
plt.figure(figsize=(12,4),dpi=100,facecolor='blue')

plt.scatter(months,xiaoshoue)

plt.show()
image.png

直方图

from matplotlib import pyplot  as plt
import numpy as np

data = np.random.randn(10000)
plt.figure(figsize=(8,4),dpi=100,facecolor=(0.5,1,0))
plt.hist(data,bins=100,color='blue',label='随机数')
plt.show()
image.png

图表与子图

在个别场景下,需要一些复合图表,如两条曲线的趋势走向在同一个坐标轴里显示,这样可以直观观察两条曲线的客观关系或者映射关系。在matplotlib里,一份数据展示一个图表,如果要在一个图表里展示两份数据的分布关系,则是通过子图实现。plt.subplots()用于创建包含多个子图的图形布局。它允许在一个图形窗口中组织和排列多个图表,非常适合用于数据可视化和科学绘图。
而更直观的图标关系除了多个子表展示外,还有单轴图变双轴或者四轴图
示例:

多子图

image.png

e.g:

# 创建新的图表
fig,axl = plt.subplots(nrows=2,ncols=2)

plt.show()
image.png

双y轴图

image.png
from matplotlib import pyplot  as plt
fig, ax = plt.subplots(nrows, ncols, figsize=(width, height))
  • fig:返回的Figure对象,代表整个图形
  • ax:返回的Axes对象或Axes对象的数组,代表子图
  • nrows:子图的行数
  • ncols:子图的列数
  • figsize:整个图形的大小,以英寸为单位

e.g:

#两份数据,一份是年份和对应的逾期率,一份是年份和对应的金额
年份 = [2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023]
逾期率 = [0.0136, 0.0135, 0.0125, 0.0118, 0.0147, 0.0108, 0.0101, 0.0098, 0.0123]
金额 = [388.8, 406.6, 459.7, 788.6, 837.9, 838.6, 858.6, 917.1, 990.04]

#两份数据,使用一个图表,一份主图和一份子表
# 创建新的图表
_,axl = plt.subplots(figsize=(12,4))

# 绘制逾期率的折线图
axl.plot(年份,逾期率,'b-o',label='逾期率')

"""
b-o
b 代表的是颜色
- 代表的是线条的样式
o 代表的是标点的形状
"""
axl.set_xlabel('年份')
axl.set_ylabel('逾期率',color='b')

# 创建右边的y轴
raxl= axl.twinx()
# 绘制金额的折线图
raxl.plot(年份,金额,'g:^',label='金额')
raxl.set_ylabel('逾期金额/亿元',color='g')

# 为每一个标点添加上数据标注
for i in range(len(年份)):
    axl.text(年份[i],逾期率[i],f'{逾期率[i]*100:.2f}%',color='b',ha='left')
    raxl.text(年份[i],金额[i],f'{金额[i]:.2f}亿',color='g',ha='right')

# 标题
plt.title('2015-2023年信用卡逾期数据')
# 网格
plt.grid(color='gray',linestyle=':',alpha=0.5,linewidth=1)

# 添加图例
lines1, aaa = axl.get_legend_handles_labels()
lines2, bbb = raxl.get_legend_handles_labels()
axl.legend(lines1+lines2, aaa+bbb, loc='upper left')

plt.show()
image.png

饼图

import matplotlib.pyplot as plt


x = [0.25,0.25,0.25,0.1,0.15]
y = ['A','B','C','D','E']


plt.pie(
    x=x,
    labels=y,
    autopct='%1.1f%%',  #   第一个%声明的是格式化输出  1 只少有一位 .1f  %%
    pctdistance=0.8,
)
plt.show()
image.png

seaborn

matplotlib与seaborn对比:

  • 美观
    Matplotlib:默认样式较为普通,但通过自定义可以创造出高度个性化的图表。
    Seaborn:内置多种美观的颜色主题和绘图样式,可以快速生成视觉吸引力强的图表。

  • 易用性
    Matplotlib:较为复杂和冗长的语法,需要编写更多的代码来绘制同样效果的图表。
    Seaborn:简化了Matplotlib的操作,使得代码更简洁,一行代码便能实现一个清晰好看的可视化输出。

  • 可拓展性
    Matplotlib:提供灵活的绘图控制选项,用户可以自定义图表的各个方面,如大小、颜色、字体等。
    Seaborn:虽然简化了绘图过程,但在一些复杂的定制化需求上可能不如Matplotlib灵活。

  • 数据处理
    Matplotlib:有效地处理数据框和数组,将图形和轴视为对象。
    Seaborn:更适合处理Pandas数据帧,通常将整个数据集视为一个单元进行操作。

seaborn支持画图类型有茫茫多,详情可以参考官网:https://seaborn.pydata.org/examples/index.html

这里只示例常用的几种

散点图

e.g:

import seaborn as sns
import pandas as pd
from matplotlib import pyplot as plt

# 这里读取的是本地的csv文件获取展示数据,数据不重要,任意构造也可以
iris = pd.read_csv(r'iris.csv')

#画图准备
plt.figure(figsize=(10,5))

# seaborn里的散点图函数,x轴,y轴,data 引入二维表格对象,hue 指分类字段,可以自行了解函数,参数也很多
sns.scatterplot(x='sepal_length',y='sepal_width',data=iris,hue='species') 
         
plt.show()
image.png

箱型图

import seaborn as sns
import pandas as pd
from matplotlib import pyplot as plt

# 这里读取的是本地的csv文件获取展示数据,数据不重要,任意构造也可以
iris = pd.read_csv(r'iris.csv')

#画图准备
plt.figure(figsize=(10,5))

# seaborn里的散点图函数,x轴,y轴,data 引入二维表格对象,hue 指分类字段,可以自行了解函数,参数也很多
sns.boxplot(x='sepal_length',y='sepal_width',data=iris,hue='species') 
         
plt.show()
image.png

直方图

import seaborn as sns
import pandas as pd
from matplotlib import pyplot as plt

iris = pd.read_csv(r'iris.csv')
plt.figure(figsize=(10,5))
# x指定花萼的长度字段,y指定花萼宽度的字段,data 引入二维表格对象,hue 指明鸢尾花的物种进行分类
sns.histplot(x='sepal_length',y='sepal_width',data=iris,hue='species')          
plt.show()
image.png

成对图

import seaborn as sns
import pandas as pd
from matplotlib import pyplot as plt

iris = pd.read_csv(r'iris.csv')
plt.figure(figsize=(10,5))
# x指定花萼的长度字段,y指定花萼宽度的字段,data 引入二维表格对象,hue 指明鸢尾花的物种进行分类
sns.pairplot(data=iris,hue='species')          
plt.show()
image.png

热力图

import seaborn as sns
import pandas as pd
from matplotlib import pyplot as plt

iris = pd.read_csv(r'iris.csv')
plt.figure(figsize=(10,5))

# 热力图只能针对数字类型,在本地数据里有字符串列,需要切片排除掉
my_data = iris.iloc[:,0:-1].corr()
sns.heatmap(data=my_data)          
plt.show()
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,084评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,623评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,450评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,322评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,370评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,274评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,126评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,980评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,414评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,599评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,773评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,470评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,080评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,713评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,852评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,865评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,689评论 2 354

推荐阅读更多精彩内容