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()
原文地址:https://www.cnblogs.com/itboy-newking/p/11041720.html
时间: 2024-11-06 07:25:12