下文主要内容来自课堂讲义,由本人整理。
1. 画图前准备
1.1 pip安装pandas、numpy、plt库;
1.2 中文显示问题:
win系统直接添加:
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
但是在MAC系统下中文字体显示问题报错:
Font family [‘sans-serif‘] not found.Falling back to DejaVu Sans.
解决方法:
- 在python下输入代码获取自己mac内字体存放路径:matplotlib.matplotlib_fname()
-
下载黑体字体后拷贝到第1步中找到到路径中存放字体文件夹
大致路径如下
/Users/********/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf
-
需要在Finder根目录下,按shift+command+. (.是英文句号),开启隐藏目录后删除下图中Fontlist文件。重启python即可。
2. 引例——文件读取
数据,存为.csv文件:
,语文 ,数学 ,英语 ,计算机 ,物理 ,化学 ,体育
宋丽英 ,86,64,85,88,90,55,98
王大伟 ,92,99,95,94,92,94,90
顾亦菲 ,91,87,99,95,95,92,85
鲁一平 ,78,99,75,81,83,88,92
潘晓雯 ,88,78,98,84,70,95,98
分析每门课的成绩,制作箱型图。
import matplotlib.pyplot as plt
import pandas as pd
scores=pd.read_csv("data1.csv",index_col=0)
plt.rcParams['font.sans-serif']=['SimHei']
scores.boxplot()
plt.show()
-|-
3. 【例1】 条形图的绘制步骤
第一步:导入必要的库
import matplotlib.pyplot as plt
import numpy as np
第二步:新建绘图区或子绘图区
plt.figure(figsize=(4,3),facecolor='b')
或者:
fig,ax=plt.subplots(figsize=(4,3))
第三步:准备数据
kc=('语文', '数学', '英语') # 课程信息
cj= (70, 95, 80) # 成绩数据
第四步:设置图表属性
ax.set_xlabel('课程') #设置X轴的标题
ax.set_ylabel('成绩') #设置Y轴的标题
ax.set_title('成绩示例') #设置图表标题
ax.set_xticks(np.arange(3)) #设置分类轴的刻度[0,1,2]
ax.set_xticklabels(kc) #设置分类轴的显示标签
第五步:绘制图表
rt = plt.bar(np.arange(3) , cj , label='刘芸')
#参数1指定分类轴的刻度,参数2指定作图用的数据,参数3指定图例的标签文本
第六步:显示图例
ax.legend(bbox_to_anchor=(1,0.8)) #显示图例文字
第七步:显示图表
plt.show()
3.1 绘图区
Matplotlib的图表区主要包括绘图区、图像和辅助显示对象
1 绘图区:包含Canvas、Figure和Axes三个对象,既可以由系统自动创建,也可以根据需要调用Figure()函数创建;
2 图像:调用各个绘图函数绘制的柱状图、折线图、饼图和散点图等;
3 辅助显示对象:包括标题、坐标轴、坐标轴名称、坐标轴刻度、坐标轴刻度 标签、图表边框线、网格线、图例、前景色等内容;
- ·创建绘图区
(1)自动创建绘图区:直接调用绘图函数,系统自动创建一个默认大小的绘图区
(2)手动创建绘图区:如下
import matplotlib.pyplot as plt
plt.figure(figsize=(6,4),dpi=72) #绘图区指定为6*4英寸,分辨率为72
plt.plot((3,6)) #绘制一条从顶点(0,3)到顶点(1,6)的直线
- ·绘图区函数
(1)figure( )函数 用于生成一个全局绘图区
figure([num=None, figsize=None, dpi=None, facecolor=None......, **kwargs])
注意:当前绘图区上没有建立坐标轴,默认不显示该全局绘图区。
如:plt.figure()
plt.figure(figsize=(6,6),facecolor=‘g')
(2)axes( )函数 生成坐标系风格的绘图区并显示
plt.axes(arg=None, **kwargs)
plt.axes(rect, projection=None, polar=False, **kwargs)如:plt.axes((0.1,0.3,0.5,0.8),facecolor='y')
注意:参数1对应(left,bottom,width,height),坐标原点默认为左下角的(0,0)
- ·创建子绘图区
(1)subplot( )函数 在全局绘图区创建子绘图区并显示
subplot(nrows, ncols, index, **kwargs)
注意:如果nrows、ncols和index都小于10缩写为一个整数
subplot(323)等价于subplot(3,2,3)
plt.subplot(1,1,1) #表示有1行1列,绘制在第1个子绘图区
plt.subplot(232) #有2行3列共6个子绘图区,只显示第2个(2)add_subplot(nrows, ncols, index[, **kwargs])
用于给已有全局绘图区添加子绘图区
import matplotlib.pyplot as plt
import numpy as np
fig1=plt.figure( )
fig1.add_subplot(222)
plt.plot((5,3,5),c='b',marker='D')
fig1.add_subplot(223)
x=np.random.randint(0,100,50)
y=np.random.normal(0,100,50)
plt.scatter(x,y,c='r')
plt.show()
(3)subplots(nrows, ncols, **fig_kw)函数
创建全局绘图区,然后添加多个子绘图区并显示所有子绘图区
import matplotlib.pyplot as plt
import numpy as np
fig,ax = plt.subplots(nrows=2,ncols=3,figsize=(6,4),dpi=72)
plt.subplots_adjust(wspace=0.3,hspace=0.3) #调整子绘图区之间的间隔
ax[0][1].plot((5),'y^') #在第0行第1列的子绘图区绘制一个黄色三角标记
ax[1][2].plot((3,8),'g') #在第1行第2列的子绘图区绘制一条绿色线条
plt.show()
注意:
[1]当行数与列数值均大于1时,用ax[i][j]访问;
[2]当行数或列数只有一个值等于1时,用ax[i]访问;
[3]当行数与列数值均等于1时,用plt或ax访问;
3.2 常见图表函数
函数 | 描述 |
---|---|
plt.plot(x,y,color,linewidth,linestyle,label) |
根据x,y数组绘制直线或曲线 |
plt.boxplot(data,label) |
绘制一个箱型图 |
plt.bar(x, height, width, bottom, *, align='center', **kwargs) |
绘制一个条形图(即柱状图) |
plt.barh(y, width, height, left, *, align='center', **kwargs) |
绘制一个横向条形图 |
plt.polar(theta,r) |
绘制极坐标图 |
plt.pie(data,explode) |
绘制饼图 |
plt.scatter(x,y) |
绘制散点图 |
plt.hist(x,bins,normed) |
绘制直方图 |
plt.contour(X,Y,Z,N) |
绘制等高线 |