Matplotlib笔记3----------常用视图

发布于:2025-07-06 ⋅ 阅读:(14) ⋅ 点赞:(0)

1.折线图

折线图(line chart)是日常工作中经常使用的一种图表,可以直观的反应数据的变化趋势

  • 绘制一条线
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(5,3))
x = ["Mon","Tues","Wed","Thur","Fri","Sat","Sun"]
y = [20,40,35,55,45,80,50]
plt.plot(x,y,c='g',marker='D',markersize=5)
plt.xlabel('week')
plt.ylabel('Activity level')
plt.title('Daily activity level')
for a,b in zip(x,y):
    plt.text(a,b,b,ha='center',va='bottom')

  • 绘制多条线
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(5,3))
x = np.random.randint(0,10,size=15)
plt.plot(x,marker='*',c='r')
plt.plot(x.cumsum(),marker='o',c='b')

2. 柱状图和条形图(bar,barh)

柱状图是一种用矩形柱来表示数据分类的图表,柱状图可以垂直绘制,也可以水平绘制,它的高度与其所表示的数值成正比

  • 简单柱状图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(5,3))
x = ['Python','c','Java','C++','C#']
y = [80,70,98,75,64]
plt.bar(x,y)
plt.title('Programming language test scores')
plt.xlabel('Programming language')
plt.ylabel('Exam score')
for a,b in zip(x,y):
    plt.text(
        x=a,
        y=b,
        s=b,
        ha='center'
    )

  • 簇状柱形图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.figure(figsize=(5,3))
x = [2021,2022,2023,2024,2025]
y1 = [80,70,98,75,64]
y2 = [100,66,57,104,21]
y3 = [87,92,98,109,38]
plt.title('Annual sales volume')
plt.xlabel('Year')
plt.ylabel('Sales volume')
w = 0.2
plt.bar([i - w for i in x],y1,width=w,label='Monster Hunter')
plt.bar(x,y2,width=w,label='Resident Evil')
plt.bar([i + w for i in x],y3,width=w,label='GTA5')
plt.legend()

  • 堆叠柱状图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.figure(figsize=(5,3))
x = [2021,2022,2023,2024,2025]
y1 = [80,70,98,75,64]
y2 = [100,66,57,104,21]
y3 = [87,92,98,109,38]
plt.title('Annual sales volume')
plt.xlabel('Year')
plt.ylabel('Sales volume')
plt.bar(x,y1,label='Monster Hunter')
plt.bar(x,y2,label='Resident Evil',bottom=y1)
plt.bar(x,y3,label='GTA5',bottom=np.array(y1) + np.array(y2))
plt.legend()

  • 条形图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.figure(figsize=(5,3))
x = [2021,2022,2023,2024,2025]
y = [80,70,98,75,64]
plt.barh(x,y)

3.直方图(hits)

直方图(Histogram),又称质量分布图,他是条形图的一种,由一系列高度不等的纵向线段来表示数据分布的情况。直方图的横轴表示数据类型,纵轴表示分布情况。直方图用于概率分布,它显示了一组数值序列的数值范围内出现的概率

  • 参数bins:组数,可以是固定数字,也可以是范围 
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
x = np.random.randint(0,10,100)
plt.hist(x)
plt.xticks(range(10))
plt.show()
基础直方图题
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
x = np.random.randint(0,10,100)
plt.hist(x,bins=5)
plt.xticks(range(10))
plt.show()
bins为数值
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
x = np.random.randint(0,10,100)
plt.hist(x,bins=[0,3,6,9,10])
plt.xticks(range(10))
plt.show()
bins为范围

4.箱型图(boxplot)

箱型图,能显示出一组数据的最大值、最小值、中位数以及上下四分位数

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data = np.random.normal(size=(500,4))
labels = ['A','B','c','D']
plt.boxplot(
    data,
    labels=labels,
    sym='g*' #颜色和marker
)
plt.show()

5.散点图(scatter) 

散点图用于在水平轴和垂直轴上绘制数据点,表示了因变量随自变量变化的趋势。

  •  散点图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
x = range(1,7,1)
y = range(10,70,10)
plt.scatter(x,y)

  • 气泡图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.figure(figsize=(5,3))
data = np.random.randn(100,2)
s = np.random.randint(50,200,size=100)
c = np.random.randn(100)
plt.scatter(data[:,0],data[:,1],s=s,c=c,alpha=0.6)

6.饼图(pie) 

饼图用来显示一个数据系列中各项的占比

  • 基础饼图
    • 参数autopct:显示百分比
    • 参数pctdistance:百分比文字显示位置
    • 参数labels:标签
    • 参数labeldistance:标签位置
    • 参数shadow:是否有阴影,默认False
    • 参数textprops:文字样式
    • 参数explode:分裂效果控制
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.figure(figsize=(5,3))
x = [10,20,30,40]
labels = ['apple','banner','orange','pear']
plt.pie(
    x,
    autopct='%.2f%%',
    pctdistance=0.7,
    labels=labels,
    labeldistance=1.3,
    shadow=True,
    textprops={'fontsize':8,'color':'blue'},
    explode=[0.2,0,0,0]
)
plt.show()

  • 单个圆环:甜甜圈
    • 参数wedgeprops:单个圆环
      • 参数width:圆环厚度
      • 参数edgecolor:圆环边缘颜色
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.figure(figsize=(4,4))
x = [10,20,30,40]
labels = ['apple','banner','orange','pear']
plt.pie(
    x,
    autopct='%.2f%%',
    pctdistance=0.8,
    labels=labels,
    textprops={'fontsize':8,'color':'k'},
    wedgeprops={'width':0.4,'edgecolor':'b'}
)
plt.show()

  • 多个圆环
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.figure(figsize=(6,6))
x1 = [10,20,30,40]
x2 = [12,22,32,42]
labels1 = ['apple','banner','orange','pear']
labels2 = ['strawberry','watermelon','grape','peach']
#外层圆环
plt.pie(
    x1,
    autopct='%.2f%%',
    pctdistance=0.8,
    labels=labels1,
    textprops={'fontsize':8,'color':'k'},
    wedgeprops={'width':0.4,'edgecolor':'w'}
)
#内层饼图
plt.pie(
    x2,
    autopct='%.1f%%',
    pctdistance=0.8,
    radius=0.4, #半径
    labels=labels2,
    textprops={'fontsize':8,'color':'b'},
    wedgeprops={'width':0.4,'edgecolor':'w'}
)
plt.show()

7.面积图(stackplot)

面积图又称区域图,强调y轴随x轴而变化的程度 

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
y = np.random.randint(10,100,5)
plt.stackplot(x,y)
plt.show

8.热力图(imshow)

热力图是一种通过色块来显示数据的统计图表,绘图时,需要指定颜色映射规则

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.figure(figsize=(8,8))
data = np.random.randint(0,100,size=(12, 10))
x = ['A','B','C','D','E','F','G','H','I','J']
y = ['data1','data2','data3','data4','data5','data6','data7','data8','data9','data10','data11','data12']
plt.imshow(data)
# 修改坐标
plt.xticks(ticks=np.arange(len(x)), labels=x)
plt.yticks(ticks=np.arange(len(y)), labels=y)
# 添加文字
for i in range(len(x)):
    for j in range(len(y)):
        plt.text(
            x=i,
            y=j,
            s=data[j,i],
            ha='center',
            va='center',
            fontsize=10,
            c='orange'
        )
#颜色条
plt.colorbar()
plt.show

9.极坐标图 

极坐标系是一个二维坐标系统,该坐标系统中任意位置可由一个夹角和一段相对原点到极点的距离来表示

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
N = 8
x = np.linspace(0,2*np.pi,N,endpoint=False)
height = np.random.randint(3,15,size=N)
width = 2*np.pi / N
color = np.random.rand(8,3)
axes = plt.subplot(111,projection='polar')
axes.bar(x=x,height=height,width=width,bottom=0,color=color)

10.雷达图

雷达图是从同一个点开始的轴上表示的三个或更多个变量的二维图表的形式显示多变量数据的图形方法 

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.figure(figsize=(5,5))
x = np.linspace(0,2*np.pi,6,endpoint=False)
y = [80,60,90,70,75,100]
# 首位相连
x = np.concatenate((x,[x[0]]))
y = np.concatenate((y,[y[0]]))
axes = plt.subplot(111,polar=True)
axes.plot(x,y,'o-',lw=2) #连线
axes.fill(x,y,alpha=0.3) #填充

11.等高线图

也称水平图,是一种在二维平面上显示3D图像的方法 

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.figure(figsize=(5,4))
x = np.linspace(-5,5,100)
y = np.linspace(-5,5,100)
# 将x和y变成网格形式
X,Y = np.meshgrid(x,y)
Z = np.sqrt(X**2 + Y**2)
# 画等高线
cb = plt.contourf(X,Y,Z)
plt.colorbar(cb)
plt.show()

12.3D图 

  • 三维折线图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D
fig = plt.figure(figsize=(5,3))
x = np.linspace(0,100,400)
y = np.sin(x)
z = np.cos(x)
axes = Axes3D(fig,auto_add_to_figure=False)
fig.add_axes(axes)
axes.plot(x,y,z)

  • 三维散点图 
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D
fig = plt.figure(figsize=(5,3))
x = np.random.rand(50)
y = np.random.rand(50)
z = np.random.rand(50)
axes = Axes3D(fig,auto_add_to_figure=False)
fig.add_axes(axes)
axes.scatter(x,y,z,color='red',s=50)

  • 三维柱形图 
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D
fig = plt.figure(figsize=(10,10))
x = np.arange(1,5)
axes = Axes3D(fig,auto_add_to_figure=False)
fig.add_axes(axes)
for m in x:
    axes.bar(
        np.arange(4), # y轴值
        np.random.randint(10,100,size=4), # z轴值
        zs=m, # 在x轴的第几个
        zdir ='x', # 在哪个方向上排列
        width=0.6,
        alpha=0.7
    )
axes.set_xlabel('X',fontsize=8,color='r')
axes.set_ylabel('Y',fontsize=8,color='g')
axes.set_zlabel('Z',fontsize=8,color='b')
plt.show()

 

知识点为听课总结笔记,课程为B站“千锋教育python数据可视化Matplotlib绘图教程,Matplotlib柱状图|Matplotlib动态图|Matplotlib散点图”:千锋教育python数据可视化Matplotlib绘图教程,Matplotlib柱状图|Matplotlib动态图|Matplotlib散点图_哔哩哔哩_bilibili