python中使用matplotlib画图(Python绘图库Matplotlib)
python中使用matplotlib画图(Python绘图库Matplotlib)6、plt.xlabel("x")设置x轴的名称 5、# 通过xticks或yticks来设置轴的刻度。 2、plt.plot(x y,"线的样式" label="标记")# 前两个参数时x y的取值,第三个参数是线的样式,第四个参数是右上角的标记,和plt.legend()配套使用 3、plt.title("****)设置标题 4、plt.xlim()或plt.ylim()设置x坐标轴或者y坐标轴的范围
使用Matplotlib,能够轻易生成各种图像,例如:直方图、波谱图、条形图、散点图等。
入门代码实例
import matplotlib.pyplot as plt import numpy as np # 用np.linspace生成50个元素的数组,均匀的分布在(0 2*pi)区间上面 x = np.linspace(0 2 * np.pi 50) y = np.sin(x) # 把x;y函数画出来,用黄色的*-线 plt.plot(x y "y*-" label="y=sin(x)") # 把x y*2函数画出来,用品红的--线 plt.plot(x y * 2 "m--" label="y=2sin(x)") plt.legend() # plt.legend(loc="best") plt.title("sin(x) & 2sin(x)") # 设置标题 plt.xlim(0 6) # 设置x坐标轴的范围 plt.ylim(-3 3) # 设置y坐标轴的范围 # 通过xticks或yticks来设置轴的刻度。 plt.xticks((0 np.pi * 0.5 np.pi np.pi * 1.5 np.pi * 2)) plt.xlabel("x") # 设置x轴的名称 plt.ylabel("y") # 设置y轴的名称 # 展现 plt.show()
代码解析:
1、通过np.linspace生成50个元素均匀的分布在[0 2pi]区间的数组,
2、plt.plot(x y,"线的样式" label="标记")# 前两个参数时x y的取值,第三个参数是线的样式,第四个参数是右上角的标记,和plt.legend()配套使用
3、plt.title("****)设置标题
4、plt.xlim()或plt.ylim()设置x坐标轴或者y坐标轴的范围
5、# 通过xticks或yticks来设置轴的刻度。
6、plt.xlabel("x")设置x轴的名称
常见的颜色:
蓝色:b青色:c红色:r黑色:k
绿色:g品红:r黄色:y白色:w
常见的点:
点:.方形:s圆:o像素: 三角形:^
常见的线:
直线:-虚线: - -点线::点划线:-.星号:*
运行结果如下:
添加注释
先上代码;
import matplotlib.pyplot as plt import numpy as np x = np.linspace(0 2 * np.pi 50) y = np.sin(x) plt.plot(x y) x0 = np.pi y0 = 0 # 画出标注点 plt.scatter(x0 y0 s=50) # 右边的 plt.annotate('sin(np.pi)=%s' % y0 xy=(np.pi 0) xycoords='data' xytext=( 30 -30) textcoords='offset points' fontsize=16 arrowprops=dict(arrowstyle='->' connectionstyle="arc3 rad=.2")) # 左边的 plt.text(0.5 -0.25 "sin(np.pi) = 0" fontdict={'size': 16 'color': 'r'}) plt.show()
有时候我们需要对特定的点进行标注,我们可以使用 plt.annotate 函数来实现。
这里我们要标注的点是 (x0 y0) = (π 0)。
我们也可以使用 plt.text 函数来添加注释。
对于 annotate 函数的参数,做一个简单解释:
- 'sin(np.pi)=%s' % y0 代表标注的内容,可以通过字符串 %s 将 y0 的值传入字符串;
- 参数 xycoords='data' 是说基于数据的值来选位置;
- xytext=( 30 -30) 和 textcoords='offset points' 表示对于标注位置的描述 和 xy 偏差值,即标注位置是 xy 位置向右移动 30,向下移动30;
- arrowprops 是对图中箭头类型和箭头弧度的设置,需要用 dict 形式传入。
一次性绘制多个图形
当需要两组数据进行对比,或者一组数据的不同展示方式,我们就可以在一个窗口中绘制多个图形。
多个图形窗口——figure
一个figure就是一个图形窗口,matplotlib.pyplot会有一个默认的figure,
import matplotlib.pyplot as plt import numpy as np data = np.arange(100 201) # 生成一组100到200,步长为1的数组 # 在第一个默认窗口画 plt.plot(data) # 绘制data data2 = np.arange(200 301) plt.figure(figsize=(6 3)) # 生成一个图形窗口 设置窗口的大小为(6 3) # 在第二个窗口画 plt.plot(data2) # 绘制data2 plt.show() # 展现
代码解析:
1、matplotlib在绘制图形的时候都在一个默认的figure中。我们可以通过plt.figure()再创建一个窗口
2、plt.figure()有figsize参数,以数组形式控制窗口的大小
运行结果如下:
多个子图——subplot
有时候我们需要将多张子图展示在一起,可以使用 plt.subplot()实现。即在调用plot()函数之前需要先调用 subplot()函数。该函数的第一个参数代表子图的总行数,第二个参数代表子图的总列数,第三个参数代表活跃区域。下面绑定了实例,也可以不绑定。
import matplotlib.pyplot as plt import numpy as np x = np.linspace(0 2 * np.pi 50) y = np.sin(x) ax1 = plt.subplot(2 2 1) # (行,列,活跃区) plt.plot(x np.sin(x) 'r') ax2 = plt.subplot(2 2 2 sharey=ax1) # 与 ax1 共享y轴 plt.plot(x 2 * np.sin(x) 'g') ax3 = plt.subplot(2 1 2) # 将窗口分为两行1列,这个图形占第二列 plt.plot(x np.cos(x) 'b') plt.show()
代码解析:
1、subplot(2 2 x)表示将图像窗口分为2行2列。x表示当前子图所在的活跃区域。
2、subplot(2 1 2)将窗口分为两行一列,这个图形画在第二列
3、plt.subplot(2 2 2 sharey=ax1)# 是与ax1函数共享受一个y轴。
运行结果如下:
注意;subplot函数的参数不仅仅支持上面的这种形式,还可以将三个整数(10之内的)合并一个整数。例如:plt.subplot(2 2 1)可以写成plt.subplot(221) 结果是一样的。
常用的图形实例
Matplotlib可以生成非常多的图形,常用的有:线形图、散点图、饼状图、条形图、直方图。我们来依次了解一下。
线形图——plot
先上代码
import matplotlib.pyplot as plt plt.plot([1 2 3] [3 6 9] "-r") plt.plot([1 2 3] [2 4 9] ":g") plt.show()
代码解析:
1、plot函数的第一个数组是横轴的值,第二个数组是纵轴的值,
2、最后一个参数是由两个字符构成,分别是线条的样式和颜色。前者是红色的直线,后者是绿色的点线,关于样式和颜色的说明请参见plor函数的APIDoc:matplotlib.pyplot.plot
运行结果如下:
散点图——scatter
先上代码:
import matplotlib.pyplot as plt import numpy as np plt.subplot(2 1 1) k = 500 x = np.random.rand(k) y = np.random.rand(k) size = np.random.rand(k) * 50 # 生成每个点的大小 colour = np.arctan2(x y) # 生成每个点的颜色 plt.scatter(x y s=size c=colour) plt.colorbar() # 添加颜色栏 N = 20 # 参数c表示点的颜色,s是点的大小,alpha是透明度 plt.subplot(2 3 4) plt.scatter(np.random.rand(N) * 100 np.random.rand(N) * 100 c="r" s=100 alpha=0.5) # 红色 plt.subplot(2 3 5) plt.scatter(np.random.rand(N) * 100 np.random.rand(N) * 100 c="g" s=200 alpha=0.5) # 绿色 plt.subplot(2 3 6) plt.scatter(np.random.rand(N) * 100 np.random.rand(N) * 100 c="b" s=300 alpha=0.5) # 蓝色 plt.show()
代码解析:
1、这幅图包含三组数据,每组数据都包含了20个随机坐标的位置
2、参数c表示点的颜色,s是点的大小,alpha是透明度
3、plt.colorbar()添加右边的颜色栏
运行结果:
饼状图——pie
先上代码:
import matplotlib.pyplot as plt import numpy as np labels = ["linuxidc" "Ubuntu" "Fedora" "CentOS" "Debian" "SUSE" "linux"] data = np.random.rand(7) * 100 # 生成7组随机数 # labels指定标签,autopct指定数值的精度 plt.pie(data labels=labels autopct="%1.1f%%") plt.axis("equal") # 设置了坐标大小一致 plt.legend() # 指明要绘制的图例 plt.show()
代码解析:
1、data是一个包含7个数据的随机数值
2、图中的标签通过labels来指定
3、autopct指定了数值的精度格式
4、plt.axis('equal')设置了坐标轴大小一致
5、plt.legend()指明要绘制图例(见下图的右上角)
运行结果:
柱形图——bar
先上代码:
import matplotlib.pyplot as plt import numpy as np N = 7 x = np.arange(N) # randint是不是就是去随机的整数呢 # 柱形的高度随机生成 data = np.random.randint(low=0 high=100 size=N) # 随机生成颜色 colors = np.random.rand(N * 3).reshape(N -1) # labels指定了标签 labels = ["Linux" "Ubuntu" "CentOS" "Fedora" "openSUSE" "Linuxidc.com" "Debian"] # title指定了图形的标题, plt.title("Weekday Data") # alpha是透明度 plt.bar(x data alpha=0.8 color=colors tick_label=labels) # 增加数值 for x y in zip(x data): plt.text(x y '%.2f' % y ha='center' va='bottom') plt.show()
代码解析:
1、绘制了7个随机值的高度在[0:100]之间的柱形。
2、colors = np.random.rand(N * 3).reshape(N -1)表示先生成21(Nx3)个随机数,然后将他们组装成7行,那么每行就是三个数,这对应了颜色的三个组成部分。(这里7行-1列是什么意思呀)
3、title是指图形的标题,labels指定了标签,alpha是透明度
4、plt.text()标记柱形的数值
运行结果:
直方图——hist
直方图是描述数据中某范围内数据出现的频率,
先上代码:
import matplotlib.pyplot as plt import numpy as np # 生成3组数据 data = [np.random.randint(0 n n) for n in [3000 4000 5000]] labels = ['3K' '4K' '5K'] # 设置标签 # 设置数据点 bins = [0 100 500 1000 2000 3000 4000 5000] plt.hist(data bins=bins label=labels) plt.legend() plt.show()
代码解析:
[np.random.randint(0 n n) for n in [3000 4000 5000]]生成了包含三个数组的列表。
第一个数组包含了3000个随机数,这些随机数的范围是 [0 3000)
第二个数组包含了4000个随机数,这些随机数的范围是 [0 4000)
第三个数组包含了5000个随机数,这些随机数的范围是 [0 5000)
2、bins数组用来指定我们显示的直方图的边界,即:[0 100) 会有一个数据点,[100 500)会有一个数据点,以此类推。所以最终结果一共会显示7个数据点。
运行结果:
我们看到,三组数据在3000以下都有数据,并且频度是差不多的。但蓝色条只有3000以下的数据,橙色条只有4000以下的数据。这与我们的随机数组数据刚好吻合。
记得关注小编后私信【学习】领取Python学习教程哦。