matplotlib学习笔记

这篇博客详细介绍了matplotlib库在Python中的应用,包括API介绍和实例演示。内容涵盖设置图片大小、轴刻度、标签,以及创建折线图、条形图、饼图、散点图和堆积柱形图的方法。通过案例展示了不同类型的图表绘制,帮助读者掌握matplotlib的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

matplotlitb1

应用

  • 可以用来绘制各种静态,动态,交互式的图表
  • 可以绘制线图、散点图、等高线图、条形图、柱状图、3D 图形、甚至是图形动画等等

API介绍

设置图片大小
fig = plt.figure(figsize=(,),dpi= )
x,y轴刻度大小
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
from matplotlib.ticker import MultipleLocator
# 设置多个刻度范围
plt.figure(figsize=(10, 10))
ran = []
x = [1, 21, 23, 25, 60, 70]
y = [10, 20, 30, 40, 50, 60]
# 设置两个刻度范围
ran.extend(range(0, 30, 5))
ran.extend(range(30, 90, 10))
plt.xticks(ran, rotation=70,fontsize=10)
plt.yticks(range(0, 90, 10), fontsize=10)
plt.xlim(0, 80)
plt.ylim(0, 80)
plt.plot(x, y, color='green', marker='o', linestyle='dashed', linewidth=1, markersize=6)
plt.legend(["test"], loc="best")
plt.show()

设置横纵坐标的标签

plt.xlabel(), plt.ylabel()

#先在开头添加如下代码,防止中文乱码
import seaborn as sns
sns.set_style({'font.sans-serif':['simhei','Arial']})


matplotlib.pyplot.xlabel(xlabel, fontdict=None, labelpad=None, *, loc=None, **kwargs)
matplotlib.pyplot.ylabel(ylabel, fontdict=None, labelpad=None, *, loc=None, **kwargs)

上述参数描述:

xlabel / ylabel: 字符串,横坐标标签,
fontdict: 将字体的属性存储在字典,传递给函数
c or color: 字体颜色
labelpad: 标签距离轴的长度,默认为4.0
fontfamily or family: 字体种类
fontsize or size:字体的大小, float or {‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’, ‘x-large’, ‘xx-large’}
fontweight or weigh: 字体的加粗程度 ,可选的值为{0-1000之间的数, ‘ultralight’, ‘light’, ‘normal’, ‘regular’, ‘book’, ‘medium’, ‘roman’, ‘semibold’, ‘demibold’, ‘demi’, ‘bold’, ‘heavy’, ‘extra bold’, ‘black’}

设置标题plt.title()
matplotlib.pyplot.title(label, fontdict=None, loc='center', pad=None, **kwargs)
#label: str 标题内容
#fontdict: dict 将文字属性存储在字典中
#loc: 标题的水平位置,{‘center’, ‘left’, ‘right’},默认为center
#pad: 标题离上轴的距离,默认的值参考rcParams[‘axes.titlepad’]
#y: 标题的垂直位置,为负数时,会在图的下方 参考 绘制子图的代码
添加图例 plt.legend()
matplotlib.pyplot.legend(*args, **kwargs)
#labels: 字符串列表,图列的名称
#loc: 图例的位置,用多种可选的位置,默认自适应调整,具体参考下面的链接
#fontsize: 文字大小 int or {‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’, ‘x-large’, ‘xx-large’},通过该参数可以调整图例的大小。
#labelcolor: str or list, 图例的颜色
#markerscale:float, 相对于图中数据标记的大小,default: rcParams[“legend.markerscale”] (default: 1.0)

实例

折线图

  • 案例1:实现温度变化(折线图)绘制

    • 步骤:

      1.先生成figure

      2.准备数据,折线图点,x,y坐标个数一一对应

      3.显示调用show()

      import matplotlib.pyplot as plt
      plt.figure() # 画幕布
      plt.plot([1,2,3,4,5,6,7],[17,17,18,15,11,11,13])# 横坐标,纵坐标
      plt.savefig("./test.png") # 保存位置
      plt.show()# 显示
      

      效果如下

      a

    • 案例2:显示上海和北京的温度变化

      import matplotlib.pyplot as plt
      import random
      plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
      plt.rcParams['axes.unicode_minus']=False
      plt.figure(figsize=(20,10),dpi=80) # 画幕布
      # 准备数据
      x = range(60)
      x_ch = ['11点{}分'.format(i) for i in x]
      y_shanghai = [random.uniform(15,18) for i in range(60)] # 变化范围15~18
      # 准备北京的温度
      y_beijing = [random.uniform(1,3) for i in range(60)] # 变化范围1~3
      y_ticks = range(40)
      plt.plot(x,y_shanghai,label = '上海')
      # 显示北京的温度
      plt.plot(x,y_beijing,color = 'r',linestyle = '--',label = '北京')
      # 修改刻度值
      # 指定显示的x刻度的列表
      # 第一个参数:必须是指
      # 第二个参数:指定跟第一个参数对应的中文
      plt.xticks(x[::5],x_ch[::5])
      plt.yticks(y_ticks[::5])
      # 增加标题,坐标描述
      plt.xlabel('时间')
      plt.ylabel('温度')
      plt.title('北京和上海:从11点~12点的温度变化情况')
      # 增加图例的显示
      plt.legend(loc = 'best')
      plt.savefig("./test2.png")
      plt.show()
      
      

      效果如下:

      b

      c

    • 显示北京和上海的温度变化(不同图)
      import matplotlib.pyplot as plt
      import random
      plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
      plt.rcParams['axes.unicode_minus']=False
      # plt.figure(figsize=(20,10),dpi=80) # 画幕布
      # 当在多个ax里面画图的时候,标签,刻度,在相应的坐标系里指定
      fig,ax=plt.subplots(nrows=1,ncols=2,figsize=(20,8))
      # 准备数据
      x = range(60)
      x_ch = ['11点{}分'.format(i) for i in x]
      y_shanghai = [random.uniform(15,18) for i in range(60)] # 变化范围15~18
      # 准备北京的温度
      y_beijing = [random.uniform(1,3) for i in range(60)] # 变化范围1~3
      y_ticks = range(40)
      # plt.plot(x,y_shanghai,label = '上海')
      ax[0].plot(x,y_shanghai,label = '上海')
      # 显示北京的温度
      # plt.plot(x,y_beijing,color = 'r',linestyle = '--',label = '北京')
      ax[1].plot(x,y_beijing,color = 'r',linestyle = '--',label = '北京')
      # 修改刻度值
      # 指定显示的x刻度的列表
      # 第一个参数:必须是指
      # 第二个参数:指定跟第一个参数对应的中文
      # plt是对整理坐标系处理,ax是对每个坐标系处理
      # plt.xticks(x[::5],x_ch[::5])
      ax[0].set_xticks(x[::5],x_ch[::5])
      ax[1].set_xticks(x[::5],x_ch[::5])
      # plt.yticks(y_ticks[::5])
      ax[0].set_yticks(y_ticks[::5])
      ax[1].set_yticks(y_ticks[::5])
      # 增加标题,坐标描述
      # plt.xlabel('时间')
      ax[0].set_xlabel('时间')
      ax[1].set_xlabel('时间')
      # plt.ylabel('温度')
      ax[0].set_ylabel('温度')
      ax[1].set_ylabel('温度')
      # plt.title('北京和上海:从11点~12点的温度变化情况')
      ax[0].set_title('中午从11点~12点的温度变化情况')
      ax[1].set_title('中午从11点~12点的温度变化情况')
      # 增加图例的显示
      # plt.legend(loc = 'best')
      ax[0].legend(loc = 'best')
      ax[1].legend(loc = 'best')
      plt.savefig("./test3.png")
      plt.show()
      
      

      效果如下:

      d

条形图

plt.bar(*x**,* *height**,* *width=0.8**,* *bottom=None**, ***,* *align='center'**,* *data=None**, ****kwargs*)

e

  • 实例

    • 显示每部电影的票房
      import matplotlib.pyplot as plt
      plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
      plt.rcParams['axes.unicode_minus']=False
      # 柱状图
      plt.figure(figsize=(20,8))
      # 电影名字,每部电影对应的票房
      movie_name = ['战狼2','哪吒之魔童降世','流浪地球','复仇者联盟4:终局之战','红海行动']
      x = range(len(movie_name))
      y = [5639,4934,4618,4205,3622]
      # 使用plt.bar显示
      # plt.bar 填入的x坐标必须全是数字
      plt.bar(x,y,0.2,color = ['b','r','g','y','c','m'])
      # 修改刻度,以及电影名字显示
      plt.xticks(x,movie_name)
      plt.savefig('./test4')
      plt.show()
      
      

      效果如下f

    • 显示每日票房与每周票房的对比

      import matplotlib.pyplot as plt
      plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
      plt.rcParams['axes.unicode_minus']=False
      # 柱状图
      plt.figure(figsize=(20,8))
      movie_name = ['战狼2','哪吒之魔童降世','流浪地球']
      first_day = [10587.6,10062.5,1275.7]
      first_weekend = [36224.9,34479.6,11830]
      x = range(len(movie_name))
      # 使用plt.bar显示
      plt.bar(x,first_day,width=0.2,label='首日票房')
      plt.bar([i+0.2 for i in x],first_weekend,width=0.2,label='首周票房')
      plt.xticks([i+0.1 for i in x],movie_name)
      plt.legend(loc='best')
      plt.title('首日票房与首周票房对比')
      plt.savefig('./test5')
      plt.show()
      
      

      效果如下:g

饼图

plt.pie(x,labels=,autopct=,colors)

  • 显示每个电影的场次占比

    # 电影的排片占比显示
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
    plt.rcParams['axes.unicode_minus']=False
    # 创建figure
    plt.figure(figsize=(20,8))
    movie_name = ['战狼2','哪吒之魔童降世','流浪地球','复仇者联盟4:终局之战','红海行动']
    # 场次
    place_count = [60605,54546,45819,28243,13270]
    # 显示饼图
    plt.pie(place_count,labels=movie_name,autopct='%1.2f%%',colors=['b','r','y','g','c'])
    plt.legend(loc='best')# 添加图例
    plt.axis('equal')# 变成圆形
    plt.savefig('./test7')
    plt.show()
    
    

    效果如下:

    n

散点图

  • # 散点图
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.scatter(df['Age'], df['Sales'])
    plt.show()
    

    a1

堆积柱形图

# 堆积柱形图
var = df.groupby(['BMI', 'Gender']).Sales.sum()
var.unstack().plot(kind='bar', stacked=True, color=['red', 'blue'])
plt.show()

fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(df[‘Age’], df[‘Sales’])
plt.show()


[外链图片转存中...(img-CGNBjCd7-1667046115224)]

### 堆积柱形图

```py
# 堆积柱形图
var = df.groupby(['BMI', 'Gender']).Sales.sum()
var.unstack().plot(kind='bar', stacked=True, color=['red', 'blue'])
plt.show()

b1


  1. Python 的绘图库 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值