绘制基础
在使用Matplotlib绘制图形时,其中有两个最为常用的场景。
一个是画点,一个是画线
pyplot基本方法的使用如下
title() | 设置图表的名称 |
xlabel() | 设置x轴的名称 |
ylabel() | 设置y轴的名称 |
xticks(x,ticks,rotation) | 设置x轴的刻度,rotation旋转角度 |
yticks() | 设置y轴的刻度 |
plot() | 绘制线形图表 |
show() | 显示图表 |
legend() | 显示图例 |
text() | 显示每条数据的值,xy值的位置 |
#导入matplotlib模块
import matplotlib.pyplot as plt
#准备绘制的两个点(1,2)(4,8)
#调用绘制plot方法
plt.plot([1,4],[2,8])
#显示绘制的图
plt.show()
#导入matplotlib模块
import matplotlib.pyplot as plt
#准备xy
x=[1,2,3,4,5]
y=[1,4,9,16,25]
#绘制折线
#linewidth属性性质设置线条的宽度
plt.plot(x,y,linewidth=5)
#添加xy轴的名称
plt.xlabel('x')
plt.ylabel('y=x^2')
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
#给图表添加标题
plt.title('多个点绘制折线图')
plt.show()
#绘制一元二次方程
#导入matplotlib模块
import matplotlib.pyplot as plt
#准备xy
x=range(-100,100)
y=[i**2 for i in x]
#绘制一元二次方程曲线
plt.plot(x,y)
#保存图片
#plt.savefig('result') 默认的格式为png
#指定格式为jpg
plt.savefig('result.jpg')
plt.show()
#绘制正弦和余弦曲线
#导入matplotlib和numpy模块
from matplotlib import pyplot as plt
import numpy as np
#生成0-10之间100个等差数
x=np.linspace(0,10,100)
sin_y=np.sin(x)
cos_y=np.cos(x)
plt.plot(x,sin_y)
plt.plot(x,cos_y)
plt.show()
#subplot的使用 将画布进行分区
#导入matplotlib和numpy模块
from matplotlib import pyplot as plt
import numpy as np
#生成0-10之间100个等差数
x=np.linspace(0,10,100)
sin_y=np.sin(x)
cos_y=np.cos(x)
#对画布进行分区 将画布分为两行两列 画到区一
plt.subplot(2,2,1)
#修改xy轴的坐标
plt.xlim(-5,20)
plt.ylim(-2,2)
plt.plot(x,sin_y)
plt.subplot(2,2,4)
plt.plot(x,cos_y)
plt.show()
#绘制散点图
#导入matplotlib和numpy模块
from matplotlib import pyplot as plt
import numpy as np
#生成0-10之间100个等差数
x=np.linspace(0,10,100)
sin_y=np.sin(x)
cos_y=np.cos(x)
plt.plot(x,sin_y,'o') #o表示点状
#另一种方法
#plt.scatter(x,sin_y)
plt.plot(x,cos_y)
plt.show()
'''
使用plot和scatter绘制的图形没有差别,但是plot绘制的速度更快
如果点的形式有差别(指点的大小颜色有差别) 则必须使用scatter
'''
#绘制不同颜色的散点图
#导入matplotlib和numpy模块
#from matplotlib import pyplot as plt
import matplotlib.pyplot as plt
import numpy as np
#生成xy
np.random.seed(0) #执行多次每次获取的随机数都是一样的
x=np.random.rand(100) #生成0.0到1.0之间随机的一百个数
y=np.random.rand(100)
#生成十种大小
size=np.random.rand(100)*1000
#生成100种颜色
color=np.random.rand(100)
plt.scatter(x,y,s=size,c=color,alpha=0.7) #s表示点的大小 c表示点的颜色 alpha表示透明度
plt.show()
#绘制柱状图
#导入matplotlib和numpy模块
#from matplotlib import pyplot as plt
import matplotlib.pyplot as plt
import numpy as np
#生成xy x表示年份 y表示销量
x=[1980,1985,1990,1995]
x_label=['1980年','1985年','1990年','1995年']
y=[1000,3000,4000,6000]
#调用bar函数绘制柱状图
plt.bar(x,y,width=3) #width修改柱的宽度
#修改中文乱码
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
#修改x坐标的值
plt.xticks(x,x_label)
plt.xlabel('年份')
plt.ylabel('销量')
plt.title('年份与销量对比图')
plt.show()
#绘制柱状图
#导入matplotlib和numpy模块
#from matplotlib import pyplot as plt
import matplotlib.pyplot as plt
import numpy as np
#生成xy
np.random.seed(0)
x=np.arange(5)
y=np.random.randint(-5,5,5)
#将画布分为一行两列 在第一个区域画bar
plt.subplot(1,2,1)
#添加颜色
plt.bar(x,y,color='blue')
#在0的位置添加蓝色线条
plt.axhline(0,color='blue',linewidth=2)
#在第二个位置画barth
#barth 将y和x进行对换 竖着方向为x轴
plt.subplot(1,2,2)
plt.barth(x,y,color='red')
#在0的位置垂直方向添加红色线条
plt.axvline(0,color='red',linewidth=2)
plt.show()
#绘制柱状图
#导入matplotlib和numpy模块
#from matplotlib import pyplot as plt
import matplotlib.pyplot as plt
import numpy as np
#生成xy
np.random.seed(0)
x=np.arange(5)
y=np.random.randint(-5,5,5)
#将画布分为一行两列 在第一个区域画bar
plt.subplot(1,2,1)
#添加颜色
plt.bar(x,y,color='blue')
#在0的位置添加蓝色线条
plt.axhline(0,color='blue',linewidth=2)
#在第二个位置画barth
#barth 将y和x进行对换 竖着方向为x轴
plt.subplot(1,2,2)
plt.barh(x,y,color='red')
#在0的位置垂直方向添加红色线条
plt.axvline(0,color='red',linewidth=2)
plt.show()
#绘制不同颜色的柱状图
#导入matplotlib和numpy模块
#from matplotlib import pyplot as plt
import matplotlib.pyplot as plt
import numpy as np
#生成xy
np.random.seed(0)
x=np.arange(5)
y=np.random.randint(-5,5,5)
#添加颜色
v_bar=plt.bar(x,y,color='blue')
#对y大于0设置为蓝色 小于0设置为绿色
for bar,height in zip(v_bar,y):
if height<0:
bar.set(color='green')
plt.show()
#绘制饼状图
#导入模块
import matplotlib.pyplot as plt
import numpy as np
#准备男女的人数及比例
man=71351
women=68187
man_perc=man/(women+man)
women_perc=women/(women+man)
#添加名称
labels=['男','女']
#添加颜色
colors=['blue','red']
#绘制饼状图 pie
plt.rcParams['font.sans-serif']=['SimHei'] #正常显示中文
paches,texts,autotexts=plt.pie([man_perc,women_perc],labels=labels,colors=colors,explode=(0,0.05),autopct='%0.1f%%') #explode指将图分裂开autopct显示百分比
#设置饼状图中的字体颜色
for text in autotexts:
text.set_color('yellow')
#设置字体大小
for text in texts+autotexts:
text.set_fontsize(20)
plt.show()
绘制直方图
#导入模块
import matplotlib.pyplot as plt
import numpy as np
#使用np.random.normal()指定期望和均值的正态分布
x=np.random.normal(0,0.8,1000)
y=np.random.normal(-2,1,1000)
z=np.random.normal(3,2,1000)
kwargs=dict(bins=100,alpha=0.5)
plt.hist(x,**kwargs)
plt.hist(y,**kwargs)
plt.hist(z,**kwargs)
plt.show()
绘制三维图形
import matplotlib.pyplot as plt
#导入3D包
from mpl_toolkits.mplot3d import Axes3D
#创建XYZ
X=[1,1,2,2]
Y=[3,4,4,3]
Z=[1,100,1,1]
figure=plt.figure()
#创建Axes3D对象
ax=Axes3D(figure)
ax.plot_trisurf(X,Y,Z)
plt.show()