Matplotlib 是 Python 的一个2D绘图库,可以帮助我们绘制各种图形,下面介绍一些最常见的数学图形绘制方法。
1.直线图
import numpy as np import matplotlib.pyplot as plt x = np.arange(1,6) y = 2 * x plt.title("LineGraph") #标题名 plt.xlabel("x axis") #x轴标注 plt.ylabel("y axis") #y轴标注 plt.plot(x,y) #以x为横坐标,y为纵坐标,按照(x,y)的顺序绘图 plt.show() #显示图像
运行结果:
关于上述代码中的plot函数,调用形式一般为:
plot([x], y, [fmt], data=None, **kwargs)
plot([x], y, [fmt], [x2], y2, [fmt2], …, **kwargs)
其中,fmt = [color][marker][linestyle],用于定义图的基本属性:颜色(color)、点型(marker)、线型(linestyle)。
**kwargs参数包括:x轴数据、y轴数据、线宽(linewidth)、线条颜色(color)。
通常,如果需要在一张图中绘制不同类别的数据点时,可以通过设置plot()参数来区分不同类别的点和相应的直线。
例如,我们可以将上述代码改为:
import numpy as np import matplotlib.pyplot as plt import matplotlib # 设置matplotlib显示中文和负号 matplotlib.rcParams['font.sans-serif']=['SimHei'] # 显示中文为黑体 matplotlib.rcParams['axes.unicode_minus']=False # 正常显示负号 x1 = np.arange(-5,6) y1 = 2 * x x2 = np.arange(-5,6) y2 = x / 2 plt.title("直线图") plt.xlabel("x轴") plt.ylabel("y轴") plt.plot(x1,y1,'-.ro') #线形为点横线,数据点形状为圆圈,线条和数据点颜色为红色 plt.plot(x2,y2,':b+') #线形为点线,数据点形状为加号,线条和数据点颜色为蓝色 plt.show()
运行结果:
2.sin、cos函数图
import numpy as np import matplotlib.pyplot as plt x = np.linspace(-np.pi, np.pi, 256, endpoint=True) #获取x坐标 s, c = np.sin(x), np.cos(x) #获取y坐标 plt.plot(x, s,"r-") plt.plot(x, c,"g-") plt.show()
运行结果:
3.条形图
pyplot 子模块提供 bar() 函数来生成条形图。
import numpy as np import matplotlib.pyplot as plt from matplotlib import pyplot as plt x1 = [1,3,5] y1 = [1,2,3] x2 = [2,4,6] y2 = [3,2,1] plt.bar(x1, y1, facecolor='#9999ff', edgecolor='r') plt.bar(x2, y2, facecolor='c', edgecolor='k') plt.title('条形图') plt.xlabel('x轴') plt.ylabel('y轴') plt.show()
运行结果:
4.折线图
import matplotlib.pyplot as plt x = [1,3,6,7,9,12] y = [8,2,4,1,9,9] plt.plot(x, y, 'rp-', markersize=10) plt.title('折线图') plt.xlabel('x轴') plt.ylabel('y轴') plt.show()
运行结果:
5.直方图
import matplotlib.pyplot as plt import numpy as np import matplotlib # 随机生成(10000,)服从正态分布的数据 data = np.random.randn(10000) # data:绘图数据 # bins:直方图的长条形数目,默认为10。 # density:是否将得到的直方图向量归一化,density默认为0代表不归一化,显示频数;density=1表示归一化,显示频率。 # facecolor:长条形的颜色 # edgecolor:长条形边框的颜色 # alpha:透明度 plt.hist(data, bins=50, density=1, facecolor="m", edgecolor="k", alpha=0.5) plt.title('直方图') plt.xlabel('区间') plt.ylabel('频率') plt.show()
运行结果:
6.饼图
import matplotlib.pyplot as plt import matplotlib #以一个人数为60的班的学生考试成绩为例 label_list = ["0-59分", "60-70分", "70-80分", "80-90分", "90-100分"] #饼图各部分标签,对成绩划分区间 size = [3, 12, 15, 25, 5] #饼图各部分大小,各区间对应人数 color = ["#EB7AD4", "#76BFF0", "c", "#EFAA98", "#AA8ADC"] #饼图各部分颜色 explode = [0, 0, 0, 0.1, 0] # 设置突出值 # labeldistance:设置标签文本距圆心位置,1.1表示1.1倍半径 # autopct:设置圆里面文本 # shadow:设置是否有阴影 # startangle:起始角度,默认从0开始逆时针转 # pctdistance:设置圆内文本距圆心距离 # patches:返回值 # l_text:圆内部文本 # p_text:圆外部文本 patches, l_text, p_text = plt.pie(size, explode=explode, colors=color, labels=label_list, labeldistance=1.12, autopct="%1.1f%%", shadow=True, startangle=90, pctdistance=0.8) plt.axis("equal") # 设置横轴和纵轴大小相等,这样饼才是圆的 plt.legend() plt.show()
运行结果: