Fork me on Github

Matplotlib

一、绘图标记

1.标记类型

y = np.arange(0, 5, 1)
plt.plot(y, marker='o')  # 绘图标记
plt.show()

 

2.fmt 参数

fmt 参数定义了基本格式,如标记、线条样式和颜色

#fmt = '[marker][line][color]'

plt.plot(y, 'o:r')

o:r,o 表示实心圆标记,: 表示虚线,r 表示颜色为红

 

3.标记大小与颜色

plt.plot(y, marker = 'o', ms = 20, mec = '#4CAF50', mfc = '#4CAF50')
  • markersize,简写为 ms:定义标记的大小
  • markerfacecolor,简写为 mfc:定义标记内部的颜色
  • markeredgecolor,简写为 mec:定义标记边框的颜色

 

二、绘图线

1.线的类型

线的类型可以使用 linestyle 参数来定义,简写为 ls

plt.plot(y, linestyle = 'dotted')

 

类型简写说明
'solid' (默认) '-' 实线
'dotted' ':' 点虚线
'dashed' '--' 破折线
'dashdot' '-.' 点划线
'None' '' 或 ' ' 不画线

 

2.线的颜色

线的颜色可以使用 color 参数来定义,简写为 c

plt.plot(y, color = 'r')

 

3.线的宽度

线的宽度可以使用 linewidth 参数来定义,简写为 lw,值可以是浮点数

plt.plot(y, linewidth = '5')

 

三、轴标签和标题

1.轴标签

使用 xlabel() 和 ylabel() 方法来设置 x 轴和 y 轴的标签

plt.plot(x, y)

plt.xlabel("x轴")
plt.ylabel("y轴")

 

2.标题

使用 title() 方法来设置标题

plt.title("标题")
plt.xlabel("x轴")
plt.ylabel("y轴")

 

3.图形中文显示

Matplotlib 默认情况不支持中文

方案1:

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

方案2:

从官网下载字体:https://source.typekit.com/source-han-serif/cn/

# fname 为下载的字体库路径,SourceHanSansSC-Bold.otf 字体的路径
zhfont = matplotlib.font_manager.FontProperties(fname="SourceHanSansSC-Bold.otf") 
 
plt.title("标题", fontproperties=zhfont) 
 
# fontproperties 设置中文显示,fontsize 设置字体大小
plt.xlabel("x 轴", fontproperties=zhfont)
plt.ylabel("y 轴", fontproperties=zhfont)

自定义字体的样式:

复制代码
# fname 为下载的字体库路径,SourceHanSansSC-Bold.otf 字体的路径,size 参数设置字体大小
zhfont = matplotlib.font_manager.FontProperties(fname="SourceHanSansSC-Bold.otf", size=18)
font1 = {'color':'blue','size':20}
font2 = {'color':'red','size':15}

# fontdict 可以使用 css 来设置字体样式
plt.title("标题", fontproperties=zhfont, fontdict = font1)
 
# fontproperties 设置中文显示,fontsize 设置字体大小
plt.xlabel("x 轴", fontproperties=zhfont)
plt.ylabel("y 轴", fontproperties=zhfont)
复制代码

 

4.标题与标签的定位

title() 方法提供了 loc 参数来设置标题显示的位置,可以设置为: 'left', 'right', 和 'center', 默认值为 'center'

xlabel() 方法提供了 loc 参数来设置 x 轴显示的位置,可以设置为: 'left', 'right', 和 'center', 默认值为 'center'

ylabel() 方法提供了 loc 参数来设置 y 轴显示的位置,可以设置为: 'bottom', 'top', 和 'center', 默认值为 'center'

plt.xlabel("x 轴", fontproperties=zhfont, loc="left")
plt.ylabel("y 轴", fontproperties=zhfont, loc="top")

 

四、网格线

1.设置网格线

matplotlib.pyplot.grid(b=None, which='major', axis='both', )
  • b:可选,默认为 None,可以设置布尔值,true 为显示网格线,false 为不显示,如果设置 **kwargs 参数,则值为 true
  • which:可选,可选值有 'major'、'minor' 和 'both',默认为 'major',表示应用更改的网格线
  • axis:可选,设置显示哪个方向的网格线,可以是取 'both'(默认),'x' 或 'y',分别表示两个方向,x 轴方向或 y 轴方向
  • **kwargs:可选,设置网格样式,可以是 color='r', linestyle='-' 和 linewidth=2,分别表示网格线的颜色,样式和宽度

 

2.网格线样式

plt.grid(color = 'color', linestyle = 'linestyle', linewidth = number)

color:'b' 蓝色,'m' 洋红色,'g' 绿色,'y' 黄色,'r' 红色,'k' 黑色,'w' 白色,'c' 青绿色,'#008000' RGB 颜色符串

linestyle:'‐' 实线,'‐‐' 破折线,'‐.' 点划线,':' 虚线

linewidth:设置线的宽度,可以设置一个数字

 

五、绘制多图

使用 pyplot 中的 subplot() 和 subplots() 方法来绘制多个子图

subplot() 方法在绘图时需要指定位置,subplots() 方法可以一次生成多个,在调用时只需要调用生成对象的 ax 即可

1.subplot

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

以上函数将整个绘图区域分成 nrows 行和 ncols 列,然后从左到右,从上到下的顺序对每个子区域进行编号 1...N ,左上的子区域的编号为 1、右下的区域编号为 N,编号可以通过参数 index 来设置

# plot1
plt.subplot(1, 2, 1)
plt.plot(y)

# plot2
plt.subplot(1, 2, 2)
plt.plot(y, marker='o', ms=10, ls='-', lw=3, color='r', mec='g', mfc='g')  # 线的类型 标记类型

 

2.subplots

plt.subplots(nrows=1, ncols=1, *, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
  • nrows:默认为 1,设置图表的行数
  • ncols:默认为 1,设置图表的列数
  • sharex、sharey:设置 x、y 轴是否共享属性,默认为 false,可设置为 'none'、'all'、'row' 或 'col'。 False 或 none 每个子图的 x 轴或 y 轴都是独立的,True 或 'all':所有子图共享 x 轴或 y 轴,'row' 设置每个子图行共享一个 x 轴或 y 轴,'col':设置每个子图列共享一个 x 轴或 y 轴
  • squeeze:布尔值,默认为 True,表示额外的维度从返回的 Axes(轴)对象中挤出,对于 N*1 或 1*N 个子图,返回一个 1 维数组,对于 N*M,N>1 和 M>1 返回一个 2 维数组。如果设置为 False,则不进行挤压操作,返回一个元素为 Axes 实例的2维数组,即使它最终是1x1
  • subplot_kw:可选,字典类型。把字典的关键字传递给 add_subplot() 来创建每个子图
  • gridspec_kw:可选,字典类型。把字典的关键字传递给 GridSpec 构造函数创建子图放在网格里(grid)
  • **fig_kw:把详细的关键字参数传给 figure() 函数
复制代码
# 共享 x 轴
plt.subplots(2, 2, sharex='col')

# 共享 y 轴
plt.subplots(2, 2, sharey='row')

# 共享 x 轴和 y 轴
plt.subplots(2, 2, sharex='all', sharey='all')

# 共享 x 轴和 y 轴
plt.subplots(2, 2, sharex=True, sharey=True)

# 创建标识为 10 的图,已经存在的则删除
fig, ax = plt.subplots(num=10, clear=True)
复制代码

 

六、散点图

1.scatter

使用 pyplot 中的 scatter() 方法来绘制散点图

plt.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, *, edgecolors=None, plotnonfinite=False, data=None, **kwargs)

x,y:长度相同的数组,也就是我们即将绘制散点图的数据点,输入数据。

s:点的大小,默认 20,也可以是个数组,数组每个参数为对应点的大小。

c:点的颜色,默认蓝色 'b',也可以是个 RGB 或 RGBA 二维行数组。

marker:点的样式,默认小圆圈 'o'。

cmap:Colormap,默认 None,标量或者是一个 colormap 的名字,只有 c 是一个浮点数数组的时才使用。如果没有申明就是 image.cmap。

norm:Normalize,默认 None,数据亮度在 0-1 之间,只有 c 是一个浮点数的数组的时才使用。

vmin,vmax::亮度设置,在 norm 参数存在时会忽略。

alpha::透明度设置,0-1 之间,默认 None,即不透明。

linewidths::标记点的长度。

edgecolors::颜色或颜色序列,默认为 'face',可选值有 'face', 'none', None。

plotnonfinite::布尔值,设置是否使用非限定的 c ( inf, -inf 或 nan) 绘制点。

**kwargs::其他参数。

 

随机数设置散点图:

复制代码
# 随机数生成器的种子
np.random.seed(19680801)

N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = (30 * np.random.rand(N))**2  # 0 to 15 point radi

plt.scatter(x, y, s=area, c=colors, alpha=0.5) # 设置颜色及透明度
plt.show()
复制代码

 

2.颜色条Colormap

设置颜色条需要使用 cmap 参数,默认值为 'viridis',之后颜色值设置为 0 到 100 的数组

 显示颜色条,需要使用 plt.colorbar() 方法:

colors = np.array([0, 10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])

plt.scatter(x, y, c=colors, cmap='viridis')
plt.colorbar()

实例:

复制代码
# 随机数生成器的种子
np.random.seed(19680801)

N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = (30 * np.random.rand(N))**2  # 0 to 15 point radi

plt.scatter(x, y, s=area, c=colors, alpha=0.5)  # 设置颜色及透明度
plt.show()

plt.scatter(x, y, c=colors, cmap='viridis')
plt.colorbar()
plt.show()
复制代码

 

七、柱形图

使用 pyplot 中的 bar() 方法来绘制柱形图

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

x:浮点型数组,柱形图的 x 轴数据

height:浮点型数组,柱形图的高度

width:浮点型数组,柱形图的宽度

bottom:浮点型数组,底座的 y 坐标,默认 0

align:柱形图与 x 坐标的对齐方式,'center' 以 x 位置为中心,这是默认值。 'edge':将柱形图的左边缘与 x 位置对齐。要对齐右边缘的条形,可以传递负数的宽度值及 align='edge'

**kwargs::其他参数

纵向:

plt.bar(x, y, width=0.5, color=["#4CAF50", "red", "hotpink", "#556B2F"])

横向:

plt.barh(x, y, height=0.5, color=["#4CAF50", "red", "hotpink", "#556B2F"])

实例:

复制代码
x = np.arange(5)
y = np.arange(5)

plt.subplot(1, 2, 1)
plt.bar(x, y, width=0.5, color=["#4CAF50", "red", "hotpink", "#556B2F"])

plt.subplot(1, 2, 2)
plt.barh(x, y, height=0.5, color=["#4CAF50", "red", "hotpink", "#556B2F"])
plt.show()
复制代码

 

八、饼图

使用 pyplot 中的 pie() 方法来绘制饼图

plt.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=0, 0, frame=False, rotatelabels=False, *, normalize=None, data=None)[source]

x:浮点型数组,表示每个扇形的面积

explode:数组,表示各个扇形之间的间隔,默认值为0

labels:列表,各个扇形的标签,默认值为 None

colors:数组,表示各个扇形的颜色,默认值为 None。

autopct:设置饼图内各个扇形百分比显示格式,%d%% 整数百分比,%0.1f 一位小数, %0.1f%% 一位小数百分比, %0.2f%% 两位小数百分比

labeldistance:标签标记的绘制位置,相对于半径的比例,默认值为 1.1,如 <1则绘制在饼图内侧

pctdistance::类似于 labeldistance,指定 autopct 的位置刻度,默认值为 0.6

shadow::布尔值 True 或 False,设置饼图的阴影,默认为 False,不设置阴影

radius::设置饼图的半径,默认为 1

startangle::起始绘制饼图的角度,默认为从 x 轴正方向逆时针画起,如设定 =90 则从 y 轴正方向画起

counterclock:布尔值,设置指针方向,默认为 True,即逆时针,False 为顺时针

wedgeprops :字典类型,默认值 None。参数字典传递给 wedge 对象用来画一个饼图。例如:wedgeprops={'linewidth':5} 设置 wedge 线宽为5

textprops :字典类型,默认值为:None。传递给 text 对象的字典参数,用于设置标签(labels)和比例文字的格式

center :浮点类型的列表,默认值:(0,0)。用于设置图标中心位置

frame :布尔类型,默认值:False。如果是 True,绘制带有表的轴框架

rotatelabels :布尔类型,默认为 False。如果为 True,旋转每个 label 到指定的角度

 

实例:

复制代码
y = np.array([1, 2, 3, 4])

plt.pie(y, labels=['A', 'B', 'C', 'D'],  # 设置饼图标签
        colors=["r", "y", "g", "b"],  # 设置饼图颜色
        explode=(0, 0.1, 0, 0),  # 第二部分突出显示,值越大,距离中心越远
        autopct='%.2f%%'  # 格式化输出百分比
        )

plt.show()
复制代码

 

posted @   菜鸟昂  阅读(193)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示