目录
6.color、marker、linestyle放一个字符串参数中使用
10.4plt.subplot()和 plt.subplots()区别
画图的逻辑: 1.设置画布的大小 2.画几个图 3.画什么图:折线图、柱状图、饼图、散点图、条形图 4.参数调整
1.plt.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 mec | color(点边框的颜色) |
markeredgewidth or mew | float (点边框的宽度) |
markerfacecolor or mfc | color(点内部的颜色) |
markersize or ms | float (点的大小) |
markerfacecoloralt or mfcalt | color(设置了值,但是不起作用,暂时还不知道怎么用,忽略它) |
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()一起使用
"""
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()
运行结果:
后续持续学习更新