Matplotlib pyploy.plot()基础

目录

1.plt.plot()绘图参数

2.简单示例

3.点的形状:marker

3.1marker的值

3.2marker示例

4.线的形状:linestyle

4.1linestyle的值

4.2linestyle示例

5.线的颜色:color

5.1color的值

5.2color示例

6.color、marker、linestyle放一个字符串参数中使用

7.使用data参数

7.1使用DataFrame传入data

7.2使用字典传入data

7.3使用DataFrame传入data绘制多条线

8.x轴、y轴标签及刻度

8.1xy轴标签

8.2xy轴刻度及刻度标签

9.标签图例:label和legend()

10.画布和多个子图

10.1画布plt.figure()

10.2多个子图plt.subplot()

10.3画布子图示例

10.4plt.subplot()和 plt.subplots()区别

11.设置全局字体显示中文

12.综合示例1

13.综合示例2


画图的逻辑:
1.设置画布的大小
2.画几个图
3.画什么图:折线图、柱状图、饼图、散点图、条形图
4.参数调整

1.plt.plot()绘图参数

plot()官方解释

"""
import matplotlib.pyplot as plt

plot([x], y, [fmt], *, data=None, **kwargs)
plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)
其中,x和y是两个数组或列表,分别表示数据的x轴和y轴坐标。format_string是一个可选参数,
用于指定线条的样式和颜色。它由一个或多个字符组成,每个字符对应一个属性,
可以是颜色、线型、标记等。例如,'r--'表示红色虚线。
data参数支持所有可索引对象。例如,可以是 dict、 panda.DataFrame 或结构化 numpy 数组

plot()函数还支持一些常用的可选参数,通过**kwargs传递。常用的可选参数包括:

color or c:设置线条的颜色。
linewidth or lw:设置线条的宽度。
linestyle or ls:设置线条的样式。
alpha:设置线条或数据点的透明度。
label:设置线条的标签,用于生成图例。
marker:设置数据点的标记类型,及折点的形状
markersize or ms:设置数据点标记的大小,及折点的大小
markerfacecolor or mfc:折点的颜色
markeredgecolor or mec:折点边框的颜色
markeredgewidth or mew:折点边框宽度
"""

绘图的一些属性

2.简单示例

import matplotlib.pyplot as plt

# x轴坐标
x = range(0,11)
# y轴坐标
y = range(0,11)
# 绘制图形
plt.plot(x,y)
#显示图形
plt.show()

运行结果:

3.点的形状:marker

3.1marker的值

marker的值说明
'.'point marker(点标识)
','pixel marker(像素标识)
'o'circle marker(圆标识)
'v'triangle_down marker(倒三角形标识)
'^'triangle_up marker(正三角形标识)
'<'triangle_left marker(左三角形标识)
'>'triangle_right marker(右三角形标识)
'1'tri_down marker(向下Y形状)
'2'tri_up marker(向上Y形状)
'3'tri_left marker(向左Y形状)
'4'tri_right marker(向右Y形状)
'8'octagon marker(八边形形状)
's'square marker(正方形标识)
'p'pentagon marker(五边形标识)
'P'plus (filled) marker(填充的五边形)
'*'star marker(星型标识)
'h'hexagon1 marker(六角形标识)
'H'hexagon2 marker(六角形标识)
'+'plus marker(加号形状)
'x'x marker(x形状)
'X'x (filled) marker(填充的X形状)
'D'diamond marker(钻石形状.....其实就是菱形标识)
'd'thin_diamond marker(薄一点钻石形状)
'|'vline marker|形状)
'_'hline marker_形状)

和marker配套的参数

markeredgecolor or meccolor(点边框的颜色)
markeredgewidth or mewfloat (点边框的宽度)
markerfacecolor or mfccolor(点内部的颜色)
markersize or msfloat (点的大小)
markerfacecoloralt or mfcaltcolor(设置了值,但是不起作用,暂时还不知道怎么用,忽略它)

3.2marker示例

import matplotlib.pyplot as plt
import numpy as np

# x轴坐标
x = np.arange(0,11)
# y轴坐标
y = np.arange(0,11)
y1 = y+2
y2 = y+4
# 第一条线,点的形状*
plt.plot(x,y,marker='*')
# 第二条线,点的形状x
plt.plot(x,y1,marker='x')
# 第三条线,点的形状o
plt.plot(x,y2,marker='o')
plt.show()

 运行结果:

4.线的形状:linestyle

4.1linestyle的值

linestyle的值说明
'-'solid line style(实线风格)
'--'dashed line style(虚线风格)
'-.'dash-dot line style(点线风格)
':'dotted line style(虚线点风格)

4.2linestyle示例

import matplotlib.pyplot as plt
import numpy as np

# x轴坐标
x = np.arange(0,11)
# y轴坐标
y = np.arange(0,11)
y1 = y+2
y2 = y+4
# 第一条线,线的形状:虚线点
plt.plot(x,y,linestyle=':')
# 第二条线,线的形状:虚线
plt.plot(x,y1,linestyle='--')
# 第三条线,线的形状:点线
plt.plot(x,y2,linestyle='-.')
plt.show()

运行结果: 

5.线的颜色:color

5.1color的值

用于指定线条的颜色。可以接受多种颜色格式,例如:

  • 字符串名称,如 'green'。
  • RGB元组,如 (2.0,5.0,9.0)。
  • 十六进制颜色代码,如 '#2E8B57'。

matplotlib在参考文档说明中给的可以单个字母表示的颜色:

基础颜色说明
'b'blue蓝色
'g'green绿色
'r'red红色
'c'cyan青色
'm'magenta洋红色
'y'yellow黄色
'k'black黑色
'w'white白色

 平常中我们可以自己去寻找其他的颜色,下面的文章很好,大家可以去里面找颜色,在color中输入英文代码、十六进制、rgb元组其中一个就行!

关于颜色的十六进制对照表 - 菜鸟-传奇 - 博客园 (cnblogs.com)
1

5.2color示例

import matplotlib.pyplot as plt
import numpy as np

# x轴坐标
x = np.arange(0,11)
# y轴坐标
y = np.arange(0,11)
y1 = y+2
y2 = y+4
# 第一条线,线的颜色:绿色
plt.plot(x,y,color='g')
# 第二条线,线的颜色:红色
plt.plot(x,y1,color='r')
# 第三条线,线的颜色:黄色
plt.plot(x,y2,color='y')
plt.show()

运行结果:

6.color、marker、linestyle放一个字符串参数中使用

注意:此种方法颜色只能选择能单个字母表示的颜色

import matplotlib.pyplot as plt
import numpy as np

# x轴坐标
x = np.arange(0,11)
# y轴坐标
y = np.arange(0,11)
y1 = y+2
y2 = y+4
# 第一条线,点和线的颜色:绿色,点的形状:*,线的样式:虚线
plt.plot(x,y,'g*--')
# 第二条线,点和线的颜色:红色,点的形状:+,线的样式:点线
plt.plot(x,y1,'r+-.')
# 第三条线,点和线的颜色:黑色,点的形状:|,线的样式:虚线点
plt.plot(x,y2,'k|:')
plt.show()

运行结果:

7.使用data参数

7.1使用DataFrame传入data

import matplotlib.pyplot as plt

data = pd.DataFrame({'xlabel':[1,2,3,4],'ylabel':[1,4,9,16]})
plt.plot('xlabel','ylabel',data=data)
plt.show()

运行结果:

7.2使用字典传入data

import matplotlib.pyplot as plt

data = {'xlabel':[1,2,3,4],'ylabel':[1,4,28,49]}
plt.plot('xlabel','ylabel',data=data)
plt.show()

 运行结果:

7.3使用DataFrame传入data绘制多条线

import matplotlib.pyplot as plt

df = pd.DataFrame({'x': [1, 2, 3, 4], 'y1': [1, 4, 9, 16], 'y2': [2, 4, 6, 8]})
plt.plot('x', 'y1', data=df)
plt.plot('x', 'y2', data=df)
plt.show()

 运行结果:

8.x轴、y轴标签及刻度

8.1xy轴标签

"""
import matplotlib.pyplot as plt

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

xlabel或ylabel:指的是你输入x轴或y轴的名称
labelpad:类型为浮点数,默认值为None,即标签与坐标轴的距离
loc:指的是x或y轴名称的位置,例如:针对x轴为'center','left','right';针对y轴为'center','top','bottom'
**kwargs:指的是Text对象关键字属性,用于控制文本的外观属性,如字体、文本颜色等
"""

 xy轴标签设置示例

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(1,10)
y = np.arange(1,10)
plt.plot(x, y)

#xy轴标签
plt.xlabel('time(h)',loc='right',fontsize=20, color="red")
plt.ylabel('temperature(℃)',loc='top',fontsize=18, color="red")
plt.show()

运行结果:

8.2xy轴刻度及刻度标签

"""
xticks(ticks: ArrayLike | None = None,
labels: Sequence[str] | None = None,
*,
minor: bool = False,
**kwargs)

Get or set the current tick locations and labels of the x-axis.
    获取或设置x轴的当前刻度位置和标签。
    Call signatures::
        locs, labels = xticks()           # Get locations and labels
        获取位置和标签
        xticks(ticks,[labels],minor=False,**kwargs)#Set locations and labels
        设置位置和标签

    Parameters
    ----------
    ticks : array_like
        A list of positions at which ticks should be placed. 
        You can pass an empty list to disable xticks.
        应当放置刻度的位置列表。 您可以传递一个空列表来禁用xticks。

    labels : array_like, optional
        A list of explicit labels to place at the given *locs*.
        放置在给定* locs *处的显式标签的列表。
        
    minor : bool, default: False
        If ``False``, get/set the major ticks/labels; if ``True``, the minor
        ticks/labels.
        次级刻度/标签

    **kwargs
        :class:`.Text` properties can be used to control the appearance of 
        the labels.
        Text属性可以用来控制标签的外观。

    Returns
    -------
    locs
        An array of label locations.
    labels
        A list of `.Text` objects.


    Examples
    --------
    Get the current locations and labels:

        >>> locs, labels = xticks()

    Set label locations:

        >>> xticks(np.arange(0, 1, step=0.2))

    Set text labels:

        >>> xticks(np.arange(5), ('Tom', 'Dick', 'Harry', 'Sally', 'Sue'))

    Set text labels and properties:

        >>> xticks(np.arange(12), calendar.month_name[1:13], rotation=20)

    Disable xticks:

        >>> xticks([])
"""

示例 

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(1,10)
y = np.arange(1,10)
plt.plot(x, y)

#刻度标签列表,同一轴的刻度数和刻度标签数要保持一致
xticks_label = [f'{i}:00' for i in x]
yticks_label = [f'{i}℃' for i in y]

#设置刻度个数和刻度标签数数量要保持一致,rotation=45旋转45度,fontsize=16字体大小16
plt.xticks(x,xticks_label,rotation=45,fontsize=16,color='red')
plt.yticks(y,yticks_label,rotation=20,fontsize=18,color='yellow')
plt.show()

运行结果:

9.标签图例:label和legend()

label要和plt.legend()一起使用

legend()官方解释

"""
import matplotlib.pyplot as plt

plt.legend()常用参数:

loc:图例位置,
可取(‘best’, ‘upper right’, ‘upper left’, 
‘lower left’, ‘lower right’, ‘right’, ‘center left’, 
‘center , right’, ‘lower center’, ‘upper center’, ‘center’);
若是使用了bbox_to_anchor,则这项就无效了

fontsize:int或float或{‘xx-small’, ‘x-small’, ‘small’, ‘medium’,
 ‘large’, ‘x-large’, ‘xx-large’},字体大小;
 
frameon: 是否显示图例边框,
ncol: 图例的列的数量,默认为1,
title: 为图例添加标题
shadow: 是否为图例边框添加阴影,
markerfirst: True表示图例标签在句柄右侧,false反之,
markerscale: 图例标记为原图标记中的多少倍大小,
numpoints: 表示图例中的句柄上的标记点的个数,一般设为1,
fancybox: 是否将图例框的边角设为圆形
framealpha: 控制图例框的透明度
borderpad: 图例框内边距
labelspacing: 图例中条目之间的距离
handlelength: 图例句柄的长度

bbox_to_anchor: (横向看右,纵向看下),如果要自定义图例位置或者将图例画在坐标外边,用它,
比如bbox_to_anchor=(1.4,0.8),这个一般配合着ax.get_position(),
set_position([box.x0, box.y0, box.width*0.8 , box.height])使用
用不到的参数可以直接去掉,有的参数没写进去,用得到的话加进去 , bbox_to_anchor=(1.11,0)

参数默认值(fontsize没有默认值):
plt.legend(loc='best', 
fontsize=12, 
frameon=True, 
fancybox=True, 
framealpha=0.8, 
borderpad=0.4,
ncol=1, 
markerfirst=True, 
markerscale=1.0, 
numpoints=1, 
handlelength=2.0)
"""

示例 

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(1,10)
y1 = np.arange(1,10)
y2 = y1+2

#设置线标签
plt.plot(x, y1,label='line1')
plt.plot(x, y2,label='line2')

#设置点标签
plt.scatter(x, y1, label='Scatter Points1')
plt.scatter(x, y2, label='Scatter Points2')

#显示标签图例,label需要和plt.legend()一起使用,plt.legend()有很多参数,用到时查资料
plt.legend()
plt.show()

运行结果:

10.画布和多个子图

10.1画布plt.figure()

在matplotlib库中,figure是一个画布对象,它是绘制图形的基础。figure对象提供了一个空白的画布,你可以在上面创建和绘制图形。

plt.figure()这个函数可以接受一些可选参数来自定义画布的大小、分辨率、背景色等。

"""
import matplotlib.pyplot as plt
plt.figure()创建一个新的画布,通过figure()函数来实例化Figure对象。
plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)

参数介绍:
num: 图像编号或名称,数字为编号默认1开始,字符串为画布名称。
figsize: 指定figure的宽和高,单位为英寸。
dpi:参数指定绘图对象的分辨率。
facecolor:背景颜色。默认为:rc:figre.facecolor‘=’w‘
edgecolor:边框颜色。如果未提供,默认为:rc:figre.edgecolor‘=’w‘
frameon:是否显示边框(图形框架)
"""

10.2多个子图plt.subplot()

在Matplotlib中,plt.subplot()函数用于在单个图形窗口中创建多个子图,它提供了一种方便的方式来排列和管理多个图形。

它添加一个子图到当前画布,会删除前面覆盖的子图。

"""
import matplotlib.pyplot as plt

subplot(nrows, ncols, index, **kwargs)
subplot(pos, **kwargs)
subplot(**kwargs)
subplot(ax)

参数介绍:
*args:三个整数或一个三位数(自动解析成三个整数),用于分别对应 nrows, ncols, index
    - nrows:在画布纵轴上分隔成几个子图
    - ncols:在画布横轴上分隔成几个子图
    - index:子图索引,从左上角开始,从左到右、从上到下递增。
**kwargs:可选参数,一些涉及子图属性的关键字参数,如标题、轴标签等。此方法还接受返回AXIS基类的关键字参数。
    以下是一些可选的常用的参数:
    
    projection:用于指定子图的投影类型,如'3d'(3D子图)。
    title:用于设置子图的标题。
    xlabel和ylabel:用于设置子图的轴标签。
    xlim和ylim:用于设置子图的轴范围。
    xticks和yticks:用于设置子图的刻度值。
    grid:如果设置为True,子图会显示网格线。
"""

10.3画布子图示例

要在一个2x2的网格画布中创建四个子图,可以按照如下方式调用subplot函数

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(1,100)
y = np.arange(1,100)
# 设置画布,名字为MyFig,大小为1000*600
fig = plt.figure('MyFig',figsize=(10,6),dpi=100,facecolor='yellow')

#设置子图,总行是2行2列,第一行第一列的图,3d图,图标题为my
plt.subplot(2,2,1,projection='3d',title='my')
plt.plot(x,y)

#第一行第二列的图
plt.subplot(2,2,2)
plt.plot(x,y**2)

# 子图的标题
plt.title('Subplot 1')

# 子图的轴标签
plt.xlabel('X')
plt.ylabel('Y')

# 子图的轴范围
plt.xlim(0, 10)
plt.ylim(0, 20)

# 子图的刻度值
plt.xticks([0, 5, 10])
plt.yticks([0, 10, 20])

#子图显示网格线
plt.grid(True)

#第二行第一列的图
plt.subplot(2,2,3)
plt.plot(x,y**3)

#第二行第二列的图
plt.subplot(2,2,4)  #总行是2行2列,第四个图
plt.plot(x,y**4)

plt.show()

运行结果:

10.4plt.subplot()和 plt.subplots()区别

plt.subplots()创建一个画布和一个或多个子图返回。

"""
subplots(nrows=1, 
        ncols=1, 
        sharex=False, 
        sharey=False, 
        squeeze=True, 
        subplot_kw=None, 
        gridspec_kw=None, 
        **fig_kw)

参数介绍:
nrows,ncols:子图的行列数。
sharex, sharey:是否共轴。可选:'none', 'all', 'row','col', 'True', 'False'。
        True 或者 'all'时,所有子图共享 x 轴或者 y 轴;
        False or 'none' 时,所有子图的 x,y 轴均为独立;
        'row' 时,每一行的子图会共享 x 或者 y 轴;
        'col' 时,每一列的子图会共享 x 或者 y 轴。

squeeze:默认为 True,是设置返回的子图对象的数组格式。当为 False 时,不论返回的子图是只有一个还是只有一行,都会用二维数组格式返回他的对象。当为 True 时,如果设置的子图是(nrows=ncols=1),即子图只有一个,则返回的子图对象是一个标量的形式,如果子图有(N×1)或者(1×N)个,则返回的子图对象是一个一维数组的格式,如果是(N×M)则是返回二位格式。
subplot_kw:字典格式,传递给 add_subplot() ,用于创建子图。
gridspec_kw:字典格式,传递给 GridSpec 的构造函数,用于创建子图所摆放的网格。如,设置 gridspec_kw={‘height_ratios’: [3, 1]} 则子图在列上的分布比例是3比1。
**fig_kw :所有其他关键字参数都传递给 figure()调用。如,设置 figsize=(21, 12) ,则设置了图像大小。

返回值:fig: matplotlib.figure.Figure 对象;ax:子图对象( matplotlib.axes.Axes)或者是他的数组。
"""

 示例

import matplotlib.pyplot as plt
import numpy as np

x1 = [np.random.randint(1, 50) for i in range(20)]
y1 = [np.random.randint(1, 50) for i in range(20)]
x2 = [np.random.randint(50, 101) for i in range(20)]
y2 = [np.random.randint(50, 101) for i in range(20)]

# 该方法会返回画图对象和坐标对象ax,2*2个图,figsize是设置子图长宽(1200,800)
fig, ax = plt.subplots(figsize=(12, 8), nrows=2, ncols=2)  
# print(fig)
# print(ax)
#画第一个图
ax[0,0].scatter(x1, y1, s=50, marker='x', label='x1')
ax[0,0].scatter(x2, y2, s=50, marker='o', label='o1')
ax[0,0].legend()  # 添加图列就是右上角的点说明

#画第四个图
ax[1,1].scatter(x1, y1, s=50, marker='x', label='x1')
ax[1,1].scatter(x2, y2, s=50, marker='o', label='o1')
ax[1,1].legend()  # 添加图列就是右上角的点说明

plt.show()

运行结果:

可以看出来两者都可以实现画子图功能,只不过subplots帮我们把画板规划好了,返回一个坐标数组对象,而subplot每次只能返回一个坐标对象,subplots可以直接指定画板的大小。

如果想一次性地创建多个子图,就使用subplots()函数,如果想一个一个地添加子图,就使用subplot()函数,这是它们的主要区别。

11.设置全局字体显示中文

设置字体和中文相关的其他详细信息,查询其他资料

"""
import matplotlib.pyplot as plt

# 用来正常显示中文标签
plt.rcParams['font.family']=['SimHei'] 

#设置全局字体大小
plt.rcParams['font.size'] = 12 

#显示负号-
plt.rcParams['axes.unicode_minus'] = False 
"""

 常用字体

黑体SimHei
仿宋FangSong
楷体KaiTi
微软雅黑体Microsoft YaHei
宋体SimSun

12.综合示例1

# 用来正常显示中文标签,全局设置
plt.rcParams['font.family']=['SimHei']
#设置全局字体大小
plt.rcParams['font.size'] = 12
#显示负号-
plt.rcParams['axes.unicode_minus'] = False

# x轴坐标
x = range(0,11)
# y轴坐标
y = range(0,11)

plt.plot(
    x,
    y,
    color='pink',   #线的颜色
    alpha=0.9, #透明度,范围是0-1
    linestyle='--',  #线的样式
    linewidth=3, #线的粗细
    marker='D',  #点的形状
    markeredgecolor='red',   #点边框的颜色
    markersize='5',     #点的大小
    markerfacecolor='yellow',    #点的颜色
    label ='线条一',   #线条标签说明,需要plt.legend()来显示
    markeredgewidth=1   #点边框宽度
    )
plt.xlabel('X轴标签')  #x轴标签
plt.ylabel('Y轴标签')  #y轴标签
plt.title('年度销量变化情况')   #图形标题
plt.legend()    #显示生成图例
plt.show()  #显示图形

运行结果:

13.综合示例2

import matplotlib.pyplot as plt
import numpy as np

# 用来正常显示中文标签
plt.rcParams['font.family']=['KaiTi']
#设置全局字体大小
plt.rcParams['font.size'] = 12
#显示负号-
plt.rcParams['axes.unicode_minus'] = False

#x坐标
x = range(2,26,2)
#保证y的数量和x一致
y = [random.randint(16,32) for i in x]

# 设置画布大小
plt.figure(figsize=(10,8),dpi=80)

#画图,color='DarkOrange'深橙色,markerfacecolor='#40E0D0'绿宝石色
plt.plot(x,y,color='DarkOrange',marker='o',markerfacecolor='#40E0D0',label='温度变化曲线')

# x轴的刻度标签
xticks_label = [f'{i}:00' for i in x]
# print('xticks_label',len(x),len(xticks_label))
# 在图上设置x轴刻度及刻度标签,rotation=45刻度标签旋转45度
plt.xticks(x,xticks_label,rotation=45)

# y轴的刻度标签,xy的刻度标签的刻度个数可以不一样
yticks_label = [f'{i}℃' for i in range(min(y),max(y)+1)]
print('yticks_label',len(range(min(y),max(y)+1)),len(yticks_label))

# 在图上设置y轴刻度及刻度标签,fontsize=14标签字体大小为14
plt.yticks(range(min(y),max(y)+1),yticks_label,fontsize=14) #刻度个数和刻度标签要保持一致

#xy轴标签
plt.xlabel('时间(h)',loc='center',fontsize=16, color="red")
plt.ylabel('温度(℃)')

#图形标题
plt.title('一天的温度变化情况')

# 保存图片
plt.savefig(r'D:\zhangsan.png')

# 显示标签图例
plt.legend()

#show放最后,show之后,图片缓存就没有了,保存就会为空
plt.show()

运行结果:

后续持续学习更新

  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值