第三十九篇 matplotlib模块

Posted itboy-newking

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三十九篇 matplotlib模块相关的知识,希望对你有一定的参考价值。

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)   # 随机数组

# 拟合一条x2的散点线
# 第二个用于散点绘图和直线绘图的数组
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()

以上是关于第三十九篇 matplotlib模块的主要内容,如果未能解决你的问题,请参考以下文章

第三十九篇 vue

Python之路(第三十九篇)管道进程间数据共享Manager

python学习[第十九篇] 模块

Python进阶(三十九)-数据可视化の使用matplotlib进行绘图分析数据

Python之路第十九篇:sys与os模块

Python开发第十九篇:Python操作MySQL