matplotlib
ipython的境况下,使用%matplotlib
只要不使用plot.show()和plot.savefig()方法就不会结束画布,一旦使用就视为结束当前绘画。
对画布的操作
创建一张画布figure()方法
plot.figure(
['num=None', 'figsize=None', 'dpi=None', 'facecolor=None', 'edgecolor=None', 'frameon=True', "FigureClass=<class 'matplotlib.figure.Figure'>", 'clear=False', '**kwargs'],
)
常用参数
- figsize:画布的大小,传入一个元组
- dpi:分辨率(像素点数),默认像素点数为100
- facecolor:背景颜色,默认为黑
- edgecolor:边框颜色,默认为黑
常用方法
方法名称 | 作用 |
---|---|
title | 传入字符串,添加表图的标题 |
legend | 添加图例,若添加图形的时候指定了的话,就无需传入参数,否则传入相应个数的参数,按照图形创建的顺序 |
xlabel | 添加x轴的名称,传入字符串 |
ylabel | 添加y轴的名称,传入字符串 |
xlim | 修改x轴范围,传入一个区间,例如[0,5] |
ylim | 修改y轴范围,传入一个区间,例如[0,25] |
xticks | 修改x轴的刻度 |
yticks | 修改y轴的刻度 |
- legend里的参数font-size:{‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’, ‘x-large’, ‘xx-large’}
- xticks里的参数:第一位是间隔刻度,第二个是每点的名称,rotation是旋转的角度
label图例的中文显示
- 设置当前画布支持中文:使用font.sans-serif或font.family
- pyplot.rcParameters[‘font.sans-serif’] = ‘Simhei’:使用rc参数
- pyplot.rcParameters[‘font.family’] = ‘Simhei’:使用rc参数
- plot.plot(font-properties=‘Simhei’)
对图形的操作
创建一个图形plot()方法
plot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)
# 多次调用plot方法,建立新的图形
# 可一次创建多个图形,两个数据为一组
plot.plot(data1,data2,data1,data3,data1,data4)
# 可以创建的时候指定图形的线条的类型,颜色,点的颜色,顺序不限定,还有图形的图例名称。多个图形的话,一样按此顺序
plot.plot(data1,data2,'r--o','bigdata')
常用参数
- 第一个参数,传入x轴的数据
- 第二个参数,传入y轴的数据
- label:传入图例名称,可不写
- color:指定图形的颜色,传入颜色名称,可传入缩写
- linestyle:图形线条的类型,传入指定缩写,默认为【’-’】
- marker:点的类型,每个点的类型,传入指定缩写
- font-properties:改为中文支持
常用方法
- show:显示画图结果,使用后就不可以在当前画布添加新的图形了
- savefig:保存图像,传入路径,jpg格式不支持,使用后就不可以在当前画布添加新的图形了
rc参数
pyplot.rcParameters[‘参数名称’] = value
- font.sans-serif
- font.family
- axes.unicode-minus ==>False 用来正常显示负号
子图
subplot
plt.subplot(nrows, ncols, plot_number)
plt.subplot(3,2,4)
plt.subplot(324)
# 效果一样,建立一个3x2的图形,共六份,现在画第4份,即(2,1)
subplots
同subplot不同的是,此方法一次创建完成
plt.figure(figsize=(8,7))
fig,ax = plt.subplots(2,2) # 会一次创建4个子图对象,系统默认大小640x480
fig # 画布
ax # 子图对象多维数组
ax[0][0].plot(d,np.sin(d))
subplot2grid
plt.subplot2grid(GridSpec, CurSpec, conspan=1,rowspan=1)
# 创建表格图形,GridSpec传入元组,表示图像的个数及分布,CurSpec传入元组,表示当前要画的区域,
# conspan:跨列合并,rowspan跨行合并
上课代码
数据资源链接
提取码:1ol9
ipython的代码
import numpy as np
from matplotlib import pyplot as plt
data = np.load('dataset/国民经济核算季度数据.npz')
list(data)
columns = data['columns']
values = data['values']
columns
values[:5,1]
values[:5,:5]
values[:5,:5]
values[range(0,69,4),:]
# =======
columns
values[:5,3:6]
# ====
import matplotlib.pyplot as plt
plt.figure(figsize=(8,7))
%matplotlib
plt.subplot(2,2,1)# 分成2行2列的区域,用第一个区域绘画
plt.plot(d,np.sin(d),color='r',linestyle='-')
plt.subplot(2,2,2)# 分成2行2列的区域,用第二个区域绘画
plt.plot(d,np.cos(d),color='b',linestyle='--')
plt.subplot(223)# 分成2行2列的区域,用第三个区域绘画
plt.plot(d,np.np.arcsin(d),color='green')
plt.subplot(224)# 分成2行2列的区域,用第四个区域绘画
plt.plot(d,np.np.arccos(d))
# =======
plt.figure(figsize=(8,7))
fig,ax = plt.subplots(2,2) # 会一次创建4个子图对象,系统默认大小640x480
fig
ax # 子图对象多维数组
ax[0][0].plot(d,np.sin(d))
# =======
for i in range(6,len(columns)):
print(i, columns[i])
columns[6].find("增加值")
columns[6][:columns[6].find("增加值")]
python的代码
创建图形
import numpy as np
from matplotlib import pyplot as plt
# 数据准备
data = np.load('dataset/国民经济核算季度数据.npz')
columns = data['columns']
values = data['values']
values[:,0]
# 创建画布
plt.figure(figsize=(8,7))
plt.rcParams['font.sans-serif'] = 'Simhei'
# plt.rcParams['font.family'] = 'Simhei'
plt.rcParams['axes.unicode_minus'] = False
plt.plot(values[:,0],values[:,2],color='r',linestyle='-',marker='o')
plt.xlim([0,70])
plt.ylim([0,225000])
plt.xlabel('年份')
plt.ylabel('生产总值(亿元)')
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.title('2000-2017年国民生产总值')
plt.show()
import numpy as np
from matplotlib import pyplot as plt
# 数据准备
data = np.load('dataset/国民经济核算季度数据.npz')
columns = data['columns']
values = data['values']
values[:,0]
# 创建画布
plt.figure(figsize=(8,7))
plt.rcParams['font.sans-serif'] = 'Simhei'
# plt.rcParams['font.family'] = 'Simhei'
plt.rcParams['axes.unicode_minus'] = False
plt.plot(values[:,0],values[:,3],color='r',linestyle='-',marker='o',label='第一产业')
plt.plot(values[:,0],values[:,4],color='g',linestyle='-.',marker='d',label='第二产业')
plt.plot(values[:,0],values[:,5],color='b',linestyle='--',marker='s',label='第三产业')
plt.legend()
# plt.plot(values[:,0],values[:,3],'r-o',values[:,0],values[:,4],'g-.d',values[:,0],values[:,5],'b--s')
# plt.legend(label=['第一产业','第二产业','第三产业'])
plt.xlabel('年份')
plt.ylabel('生产总值(亿元)')
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.title('2000-2017年国民生产总值')
plt.show()
创建子图
import numpy as np
from matplotlib import pyplot as plt
# 数据准备
data = np.load('dataset/国民经济核算季度数据.npz')
columns = data['columns']
values = data['values']
values[:,0]
# 创建画布
plt.figure(figsize=(8,7))
plt.rcParams['font.sans-serif'] = 'Simhei'
# plt.rcParams['font.family'] = 'Simhei'
plt.rcParams['axes.unicode_minus'] = False
# 第一个表
plt.subplot(2,1,1)
plt.plot(values[:,0],values[:,3],'r-o',values[:,0],values[:,4],'g-.d',values[:,0],values[:,5],'b--s')
plt.legend(labels=['第一产业','第二产业','第三产业'])
plt.xlabel('年份')
plt.ylabel('生产总值(亿元)')
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.title('2000-2017年国民生产总值')
# 第二个表
plt.subplot(2,1,2)
for i in range(6, len(columns)):
plt.plot(values[:,0],values[:,i],'g-.d',label=columns[6][:columns[6].find("增加值")])
# plt.plot(values[:,0],values[:,6],'g-.d',label='渔业')
# plt.plot(values[:,0],values[:,7],'g-.d',label='工业')
# plt.plot(values[:,0],values[:,8],'g-.d',label='建筑业')
# plt.plot(values[:,0],values[:,9],'g-.d',label='批发和零售业')
plt.legend()
plt.xlabel('年份')
plt.ylabel('生产总值(亿元)')
# 第一个是间隔刻度,第二个是每点的名称,rotation是旋转的角度
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.title('2000-2017年国民生产总值')
plt.show()
安装opencv_python,里面有cv2
散点图
scatter方法
绘制散点图的
- 参数x:x轴的数据
- 参数y:y轴的数据
- 参数s:点的半径大小
- 参数c:点的颜色
- 参数alpha:点的透明度
colorbar方法
生成一个渐变色的颜色棒
import numpy as np
import matplotlib.pyplot as plt
x=np.random.randn(100)
y=np.random.randn(100)
colors=np.random.rand(100)
size=1000*np.random.rand(100)
# 设置size的2大小可以变成冒泡图像
plt.scatter(x,y,c=colors,s=size,alpha=0.3,cmap="viridis")
plt.colorbar()
plt.show()
参数名称 | 说明 |
---|---|
x,y | 接受array,表示x轴和y轴对应的数据 |
s | 接收数值或一维的array。指定点的大小(半径) |
c | 接收颜色或一维的array。指定点的颜色 |
marker | 接收特定的string,表示点的类型 |
alpha | 接收0-1的小数,表示透明度 |
cmap | 用于指定渐变色 |
直方图
bar方法
import numpy as np
import matplotlib.pyplot as plt
data=np.load("dataset/国民经济核算季度数据.npz")
columns=data['columns']
values=data['values']
labels=['第一产业','第二产业','第三产业']
plt.rcParams['font.sans-serif']='SimHei'
plt.rcParams['axes.unicode_minus']=False
plt.figure(figsize=(8,7))
plt.subplot(2,1,1)
plt.bar(range(3),values[-1,3:6],width=0.5,color=['r','g','b'])
plt.xticks(range(3),labels=labels)
plt.xlabel("产业")
plt.ylabel("生产总值(亿元)")
plt.title("2017年第一季度国民生产总值")
- width:图的宽度,默认为0.8
barh方法
plt.subplot(2,1,2)
plt.barh(range(3),values[-1,3:6],height=0.5)
plt.yticks(range(3),labels=labels)
plt.ylabel("产业")
plt.xlabel("生产总值(亿元)")
plt.title("2017年第一季度国民生产总值")
plt.show()
- 平行的直方图,不用width而用height
参数名称 | 说明 |
---|---|
left | 接收array,表示x轴数据。 |
height | 接收array,表示x轴所代表的数据的个数 |
width | 接收0-1的float,表示直方图的宽度,默认为0.8 |
color | 接受特定的string或array,表示直方图的颜色 |
饼状图
import numpy as np
import matplotlib.pyplot as plt
data=np.load("dataset/国民经济核算季度数据.npz")
columns=data['columns']
values=data['values']
labels=['第一产业','第二产业','第三产业']
plt.rcParams['font.sans-serif']='SimHei'
plt.rcParams['axes.unicode_minus']=False
plt.figure(figsize=(6,6))
plt.pie(values[-1,3:6],labels=labels,explode=[0.01,0.01,0.01],autopct='%1.1f%%',radius=0.8)
plt.show()
pie方法
参数名称 | 说明 |
---|---|
explode | 饼状图每一部分到原点的距离,接收array |
autopct | 显示饼状图每一部分所占的数字比例,例如autopct=’%1.1f%%’,43.1% |
radius | 饼状图的半径,默认为1 |
labeldistance | 指定每一项的名称和距离饼图圆心多少个半径。默认为1.1。 |
pctdistance | 指定每一个比例到饼图圆心多少个半径。默认为0.6。 |
color | 接收array,指定每一项的颜色 |
labels | 接收array,指定每一项的名称 |
x | 接收array,接收要绘图的数据 |
箱线图
import numpy as np
import matplotlib.pyplot as plt
data=np.load("dataset/国民经济核算季度数据.npz")
columns=data['columns']
values=data['values']
labels=['第一产业','第二产业','第三产业']
plt.rcParams['font.sans-serif']='SimHei'
plt.rcParams['axes.unicode_minus']=False
plt.figure(figsize=(6,6))
plt.boxplot(values[:,4:7],notch=True,labels=labels,meanline=True)
plt.show()
boxplot方法
参数名称 | 说明 |
---|---|
x | 接收array,接收要绘制的数据 |
positions | 接收array,表示图形位置。 |
notch | 接受布尔值,表示中间箱体是否有缺口 |
widths | 接收array或scalar,表示每一个箱体的宽度 |
sym | 接受特定的string,指定异常点形状。 |
labels | 接收array,指定每一个箱线图的标签。 |
vert | 接受布尔值,表示图形是横向还是纵向 |
meanline | 接受布尔值,表示是否显示均值线 |