matplotlib模块
绘图库,可以创建常用的统计图(条形图、箱型图、折线图、散点图和直方图)
bar() 条形图
# 由于该模块不识别中文,所以我们需要导入一个中文简体字文件 import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties font = FontProperties(fname='B:\\msyh.ttc') # 在文件B中找字体文件 # 修改背景为条纹 plt.style.use('ggplot') classes = ['1班','2班','3班','4班'] # 班级 classes_index = range(len(classes)) # 班级索引 # print(type(classes_index)) <class 'range'> # print(list(classes_index)) [0, 1, 2, 3] student_amounts = [43, 55, 60, 36] # 各班人数 # figure中的参数figsize 控制画布大小 # 生成画布 fig = plt.figure() # fig:打扮 figure:图形,画像 # 设置画布 # 1,1,1表示一张画布切割成1行1列共一张图的第1个; # 2,2,1表示一张画布切割成2行2列共4张图的第一个(左上角) axl = fig.add_subplot(1,1,1) # subplot:陪衬 axl:光束轴 # 生成柱状图,bar:条、棒 axl.bar(classes_index,student_amounts,align='center',color='blue') # 在底部生成x轴 axl.xaxis.set_ticks_position('bottom') #bottom:底部 xaxis:横轴 # 在左边生成y轴 axl.yaxis.set_ticks_position('left') # left:左边 yaxis:纵轴 # 将班级文字放在班级索引上 # xticks:设置柱的文字说明 #ticks:十字叉 plt.xticks(classes_index,classes,rotation=0,fontsize=13,fontproperties=font) # x轴上放班级 plt.xlabel('班级',FontProperties=font,fontsize=15) # y轴上放学生人数 plt.ylabel('学生人数',FontProperties=font,fontsize=15) # 画布标题 plt.title('班级-学生人数',FontProperties=font,fontsize=15) # 展示图形 plt.show()
hist() 直方图
import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties font = FontProperties(fname='B:\\msyh.ttc') import numpy as np plt.style.use('ggplot') # 自定义两个值 mu1,mu2 = 50,100 # 用于改造随机数,让它符合正态分布的需要 sigma = 10 # 构造均值为50的符合正态分布的数据 x1 = mu1 + sigma*np.random.randn(10000) x2 = mu2 + sigma*np.random.randn(10000) # 生成画布 fig = plt.figure() # 设置画布 # 将画布分成一行两列,取第一部分画图(也就是在左边画) axl1 = fig.add_subplot(121) #bins=50表示每个变量的值分成50份,即会有50根柱子 axl1.hist(x1, bins=50, color='darkgreen') # 深绿 # 将画布分成一行两列,取第二部分画图(也就是在右边画) axl2 = fig.add_subplot(122) axl2.hist(x2, bins=50, color='orange') # 橙色 # 大标题 fig.suptitle('两个正态分布', fontproperties=font, fontweight='bold', fontsize=15) # 第一个图的标题 axl1.set_title('绿色的正态分布', fontproperties=font) # 第二个图的标题 axl2.set_title('橙色的正态分布', fontproperties=font) # 展示 plt.show()
plot() 折线图
import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties font = FontProperties(fname='B:\\msyh.ttc') plt.style.use('ggplot') import numpy as np from numpy.random import randn # 随机数种子,固定一个变量的随机数永远不变,只能对同一个变量起作用 np.random.seed(1) # 使用numpy的累加和,保证数据取值范围不会在(0,1)内波动 # 定义足够的一维数组,每个数组都用于生成一条折线图 plot_data1 = randn(40).cumsum() plot_data2 = randn(40).cumsum() plot_data3 = randn(40).cumsum() plot_data4 = randn(40).cumsum() # 通过数据绘制折线图 plt.plot(plot_data1, marker='o', color='red', linestyle='-', label='红实线') plt.plot(plot_data2, marker='x', color='orange', linestyle='--', label='橙虚线') plt.plot(plot_data3, marker='*', color='yellow', linestyle='-.', label='黄点线') plt.plot(plot_data4, marker='s', color='green', linestyle=':', label='绿点图') # label :标签,就是标注 # loc = 'best'表示给label(标签)自动选择最好的位置 plt.legend(loc='best',prop=font) plt.show()
scatter() 散点图+直线图
import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties font = FontProperties(fname='B:\\msyh.ttc') # 设置画布背景为网格 plt.style.use('ggplot') import numpy as np from numpy.random import randn # 创建一个一维数组 x = np.arange(1,20,1) # 拟合一条水平散点线 # 合并两个一维数组,得到一个新的数组,用于绘图 np.random.seed(1) # 随机数种子 y_linear = x+10*np.random.randn(19) # 随机数组 # 拟合一条x²的散点线 # 第二个用于散点绘图和直线绘图的数组 y_quad = x**2+10*np.random.randn(19) # 生成画布 fig = plt.figure() # 设置画布 # 将画布分成一行两列,在第一个部分作图 ax1 = fig.add_subplot(121) # 生成散点图,x为横坐标数据,y_linear和y_quad为纵坐标数据 plt.scatter(x, y_linear, s=30, color='r', label='蓝点') plt.scatter(x, y_quad, s=100, color='b', label='红点') # 第二部分画直线图 ax2 = fig.add_subplot(122) # 生成直线图(折线图),x为横坐标数据,y_linear和y_quad为纵坐标数据 plt.plot(x, y_linear, color='r') plt.plot(x, y_quad, color='b') # 限制x轴和y轴的范围取值 plt.xlim(min(x)-1, max(x)+1) plt.ylim(min(y_quad)-10, max(y_quad)+10) # 画布大标题 fig.suptitle('散点图+直线图', fontproperties=font, fontsize=20) # 左画布标题 ax1.set_title('散点图', fontproperties=font) # 左画布图例,指label(标题),去掉的话将不显示 ax1.legend(prop=font) # 右画布标题 ax2.set_title('直线图', fontproperties=font) # 展示 plt.show()
来源:https://www.cnblogs.com/itboy-newking/p/11041720.html