- 导入matplotlib 、numpy,在jupyter_notebook中设置图形显示,设置中文显示,设置减号显示
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
- 折线图
x = np.linspace(0,100,1000) # 构建x轴数据,0到100,一共1000个数
y = np.sin(x) # 构建y轴数据
# c折线颜色,lw线宽,ls线型,marker每个点的样式,label图例名称
plt.plot(x,y,c='red',lw=2,ls='-',marker='',label='y = sin(x)')
plt.legend(loc='center') # 图例显示位置
plt.show() # 显示图形
- 折线图2
# 画布
x = np.arange(0,1,0.01) # 构建x轴数据,0到1,每0.01构建一个数
y = x**2 # 构建y轴数据
# 设置画布大小,分辨率,画布颜色
plt.figure(figsize=(6.4,4.84),dpi=100,facecolor='white')
# 图像名称
plt.title('这是一幅图')
# x轴标题
plt.xlabel('这是x轴')
# y轴标题
plt.ylabel('这是y轴')
# 设置x,y轴范围
plt.xlim([0,1])
plt.ylim([0,1])
# x,y轴刻度设置,最小0,最大1.2,间距0.2
plt.xticks(np.arange(0,1.2,0.2))
plt.yticks(np.arange(0,1.2,0.2))
# 画图,label图例
plt.plot(x,y,label='y = x^2')
plt.legend(loc='best') # 图例位置
# 先保存图片
plt.savefig('./y等于x的平方.png')
# 后显示图片
plt.show()
4.链接数据库获取学生成绩数据
from sqlalchemy import create_engine # 导入包
# 设置链接参数
conn = create_engine("mysql+pymysql://root:password@url:port/database?charset=utf8")
# 使用pandas执行sql查询语句,查询score表中全部数据
score = pd.read_sql("SELECT * FROM score",conn)
# 删除degree为空的数据
score.dropna(subset=['degree'],inplace=True)
# 计算每个班级的学生人数,作为x轴数据
x_data = score.groupby(by='cno')['sno'].count()
# 获得班级名称,作为y轴数据
y_data = score[~score.duplicated(subset=['cno'],keep = 'last')]['cno'].values
5.绘制各班级人数饼图
explode=[0,0.1,0,0.2] # 设置每个扇形弹出的距离
colors = ['red','yellow','blue','green'] # 设置每个扇形颜色
# 绘制饼图,labels是班级名称,atuopct是百分比显示格式,pctdistance显示距离,labeldistance标签显示距离,startangle开始绘图的角度位置
plt.pie(x = x_data,explode=explode,labels=y_data,colors=colors,\ autopct='%1.1f%%',pctdistance=0.5,labeldistance=1.1,startangle=120)
# 图片名称,pad显示距离
plt.title('班级人数分布饼图',pad=30)
# 绘图
plt.show()
6.班级人数柱状图
# 条形图,每个班级人数统计
plt.bar(y_data,x_data)
plt.xlabel('班级')
plt.ylabel('人数')
plt.title('班级人数统计')
plt.show()
7.班级人数直方图
# 直方图
plt.hist(x = y_data,bins=8)
8.班级人数散点图
# 散点图
plt.scatter(y_data,x_data)
9.折线图添加参考线和参考区域
plt.plot(y_data,x_data,label='sdfsdf')
plt.legend(loc='best',fontsize=18,frameon=True) # 图例
# 返回一个图像对象
# fig = plt.gcf()
plt.gcf().set_size_inches(5,3) # 改变图像大小
plt.grid(ls='--',c = 'grey') # 绘制网格线
plt.axhline(y = 5,c = 'red',ls='--',lw=1) # 绘制水平参考线
plt.axvline(x = 2,c = 'red',ls='--',lw=1) # 绘制垂直参考线
plt.axvspan(xmin=1,xmax=2,facecolor='blue',alpha=0.3) # 绘制水平参考区域
plt.axhspan(ymin=3,ymax=8,facecolor='blue',alpha=0.3) # 绘制水平参考区域
10.获取每个班级男生和女生数量生成堆叠柱状图
# 堆叠图
students = pd.read_sql("SELECT * FROM student",conn)
boy = students[students['ssex']=='男'].groupby(by='class')['sno'].count()
girl = students[students['ssex']=='女'].groupby(by='class')['sno'].count()
# 绝对数量堆叠图
plt.bar(boy.index, boy, width=0.4, label= '男生')
plt.bar(girl.index, girl, width=0.4, bottom=boy,label= '女生')
plt.legend(loc='best', shadow=True)
plt.show()
11.接上例,百分比堆叠柱图
# 百分比堆叠图
summ = boy+girl
percent1 = boy/summ
percent2 = girl/summ
plt.bar(boy.index, percent1, width=0.4, label= '男生')
plt.bar(girl.index, percent2, width=0.4, bottom=percent1,label= '女生'