Matplotlib是Python最著名的绘图库之一,提供了一整套和MATLAB相似的命令API,既适合交互式地进行制图,也可以作为绘图控件方便地嵌入GUI应用程序中。今天来记录一下一些基本的操作。我们可以用这些基本的操作来展开丰富的想象力,画出高大上的图。
首先要导入matplotlib模块和numpy
import matplotlib.pyplot as plt
import numpy as np
紧接着我们运行两行图像设置命令,用来正常显示中文标签和负号
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来显示正常的中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
首先,我们先定义范围和取值
x = np.linspace(1,10,10) #表示在1~10之间等间隔取10个数
接着定义函数,这里以余弦函数为例
y = np.cos(x)
展示一下图形
plt.plot(x,y)

可以看到是一个折线图,原因就在于上面linspace的第三个参数过小,也就是取得点太少,比如我们设置1000再看一下
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来显示正常的中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
x = np.linspace(1,10,1000)
y = np.cos(x)
plt.plot(x,y)

就是非常优雅的曲线啦!
我们在显示图形的时候可以对线进行小小的“打扮”一下。比如我想要它是蓝色的,想要它在每个取点处都有一个 * 的标记,就暂且是流畅的实线我们通过这样的方式来实现
plt.plot(x,y,'b*-')
b代表蓝色----blue
* 就代表每个点用这个记号来表示
- 就代表是 实线

这里附个链接,感兴趣的伙伴可以去研究一下
python中matplotlib的颜色及线条控制的示例
但是我感觉它还是不够精致,所以再介绍几个常用的参数
• linewidth #定义线条的宽度,可取任意实数
• alpha #定义线条的透明度,一般取值[0,1]之间
• drawstyle #定义描点方式
我们都使用一下看看效果
plt.plot(x,y,'b*-',linewidth = 10, alpha = 0.3, drawstyle = 'steps')

其中drawstyle中的参数有:default,steps,steps-pre,steps-mid,steps-post
不理解没关系,各种参数都运行一下就知道是怎么回事儿啦
(悄悄的说:linewidth = 10, alpha = 0.3 这个搭配还挺养眼)
接下来就是对图外面的一个展示
我想有个标题,想标注坐标轴,还想要网格线,方便看点。我们这样来实现
plt.title('我的matplotlib图')
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.grid()

其中,网格线也是有各种各样的(线条的样式和颜色)看你喜欢哪一款

比如我就选择了 点线 和 蓝色
这是一个完整的图,但是我想放大看局部怎么办呢?我们x轴就用xlim,y轴就用ylim。比如说我就放大x轴,看1~7的图像是什么样子的,我们这样来实现
plt.xlim(1,7)

y轴同理
在我们观察图像的时候,偶尔特别想要一个水平或者垂直的参考线,便于观察,清晰又直观。我们用axhline和axvline来实现
plt.axhline(0.5,color='blue',linewidth=6)

对应参数的意思分别是;
0.5----表示y=0.5的水平线,后面表示颜色和线的尺寸
这里有个小小的“偷懒”方法,很多单词都是可以简写的,比如:color----c, linewidth----lw, linestyle----ls。不信我们试试
plt.axvline(5,c='r',lw=5,ls='-.')

不建议初学者使用哦,还是踏踏实实好好背单词吧,熟练了之后再偷懒
光有参考线可能有不满足了,想有个区域来标记。可以借助axhspan和axvspan
plt.axhspan(2,3, facecolor='yellow', alpha=0.5)
plt.axvspan(3,5,facecolor='c',alpha=0.5)

(不经意间发现了很多养眼的颜色!!)
任何高大上的图都有个图例,咱们也不例外
还记得前面展示图形的plt.plot(x,y,'b*-',linewidth = 10, alpha = 0.3, drawstyle = 'steps')吗?在后面加个label="xxx"。xxx就写自己定义的内容。
然后用legend命令来显示图例。
plt.plot(x,y,'b*-',linewidth = 10, alpha = 0.3, drawstyle = 'steps',label="y=cos(x)")
plt.legend(loc= 1)

图例放置的位置也有很多,不想放在右上角也可以。

数字还是英文,两种方法随便选择
在坐标轴的个别点还想写点名字,x轴就用xticks,y轴用yticks
plt.xticks([3,4,5],['甲','乙','丙'])

在x轴的3,4,5 的点上就写上了 甲、乙、丙
图上好多线条之后容易混乱,想做个标记分清哪条线是什么,防止记混。我们可以用text来添加图形内容细节的无指向型注释文本。比如我想给y=cos(x)来标记一下
plt.text(7,-0.75,'y=cos(x)',weight='bold',color='b')
7,-0.5----表示位置
‘y=cos(x)’----表示标注的内容
weight=‘bold’-----表示对字体的粗细设置
weights=['ultralight', 'light', 'normal', 'regular', 'book', 'medium', 'roman', 'semibold', 'demibold', 'demi', 'bold', 'heavy', 'extra bold', 'black']
color=‘b’----表示字体颜色

之后相对图上某个点,或者某个区域进行标注。我们可以采用annotate添加图形内容细节的指向型注释文本
plt.annotate("最大值",xy=(5,1),xytext=(1,1.5),arrowprops=dict(arrowstyle="->"))
“最大值”----添加的文本内容
xy=(5,1)----被添加文本的位置
xytext=(1,1.5)----添加文本的位置
arrowprops=dict(arrowstyle="->")----以->的方式来添加

以下附上完整代码:
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来显示正常的中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
x = np.linspace(1,10,10)
y = np.cos(x)
plt.plot(x,y,'b*-',linewidth = 10, alpha = 0.3, drawstyle = 'steps',label="y=cos(x)")
plt.xlim(1,7) #显示哪一段
plt.ylim(1,8)
plt.title('我的matplotlib图')
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.grid(linestyle=':',color='b') #网格线
plt.axvline(5,c='r',lw=5,ls='-.') #竖直线
plt.axhline(0.5,color='blue',linewidth=6) #水平线
plt.axhspan(0,1, facecolor='yellow', alpha=0.5) #水平区域
plt.axvspan(3,5,facecolor='c',alpha=0.5) #竖直区域
plt.legend(loc= 1) #图例
plt.xticks([3,4,5],['甲','乙','丙']) #x轴的标签名称
plt.text(7,-0.75,'y=cos(x)',weight='bold',color='b') #添加图形内容细节的无指向型注释文本
plt.annotate("最大值",xy=(5,1),xytext=(1,1.5),arrowprops=dict(arrowstyle="->")) #添加图形内容细节的指向型注释文本
本文介绍了Python的matplotlib库的基本绘图操作,包括设置中文标签、绘制曲线、调整线条样式、添加图例、标注和网格线等。通过实例展示了如何绘制和美化图形,帮助读者掌握matplotlib的基础使用。
6万+

被折叠的 条评论
为什么被折叠?



