一、常规绘图方法
折线图
import matplotlib.pyplot as plt
# 画一个简单的折线图,只需要把二维数据点对应好即可
xplot=[1,2,3,4]
yplot=[1,4,9,16]
plt.plot(xplot,yplot)
# 指明x轴与y轴的名称分别为xlabel和ylabe
plt.xlabel('xlabel')
plt.ylabel('ylabel')
# 显示折线图
plt.show()
1. 细节设置
plot()函数中可以设置很多细节参数。可以选择不同的线条类型和颜色。
xplot=[1,2,3,4]
yplot=[1,4,9,16]
#设置线条的样式和颜色
plt.plot(xplot,yplot,'-.',color='b')
# 指明x轴与y轴的名称分别为xlabel和ylabe
plt.xlabel('xlabel')
plt.ylabel('ylabel')
# 显示折线图
plt.show()
可以多次调用plot()函数来加入多次绘图的结果。
xplot=[1,2,3,4]
yplot=[1,4,9,16]
#设置线条的样式和颜色
plt.plot(xplot,yplot,'-.',color='b')
# 可以多次调用plot()函数来加入多次绘图的结果
plt.plot([2,3,4,5,6],[2,3,4,5,6],'>',color='r')
plt.xlabel('xlabel')
plt.ylabel('ylabel')
# 显示折线图
plt.show()
x=np.linspace(-10,10)
y=np.sin(x)
plt.xlabel('xlabel')
plt.ylabel('ylabel')
plt.plot(x,y*2,'-',color='g')
plt.show()
2.子图
子图就是指一整幅图形中包含几个单独的小图,这些子图可以按照行或者列的形式排列。
x=np.linspace(-10,10)
y=np.sin(x)
# 21表示整体要绘制的子图是两行一列
plt.subplot(211)# 最后的1表示整体的第一幅图
plt.plot(x,y)
x2=np.linspace(-10,10)
y2=np.sin(2*x)
plt.subplot(212)# 最后的2表示整体的第二幅图
plt.plot(x2,y2)
plt.xlabel('xlabel')
plt.ylabel('ylabel')
plt.show()
plt.grid(True)# 添加网格
plt.text(0,0,'test')# 在指定位置添加注释
# 添加箭头,需给定起始和终止位置以及箭头的各种属性
plt.annotate('arrow',xy=(-5,0),xytext=(-2,0.3),arrowprops=dict(facecolor='red',shrink=0.05,headlength=20,headwidth=15))
3.风格设置
通过plt.style.use()函数来改变当前风格。
xplot=[1,2,3,4]
yplot=[1,4,9,16]
plt.style.use('dark_background')#注意添加位置,是在plot之前
plt.plot(xplot,yplot)
# 指明x轴与y轴的名称分别为xlabel和ylabe
plt.xlabel('xlabel')
plt.ylabel('ylabel')
# 显示折线图
plt.show()
二、 常用图表的绘制
1. 柱状图
matplotlib.pyplot.bar(x, height, width, bottom = None, align: str = ‘center’, data = None, **kwargs)
- x
表示x坐标,数据类型为float类型,一般为np.arange()生成的固定步长列表 - height
表示柱状图的高度,也就是y坐标值,数据类型为float类型,一般为一个列表,包含生成柱状图的所有y值 - width
表示柱状图的宽度,取值在0~1之间,默认值为0.8 - bottom 柱状图的起始位置,也就是y轴的起始坐标,默认值为None
- align
柱状图的中心位置,“center”,"lege"边缘,默认值为’center’ color 柱状图颜色,默认为蓝色 - alpha
透明度,取值在0~1之间,默认值为1 label 标签,设置后需要调用plt.legend()生成 edgecolor 边框颜色
linewidth 边框宽度,浮点数或类数组,默认为None tick_label:柱子的刻度标签,字符串或字符串列表,默认值为None。 - orientation
柱状图是竖直还是水平,竖直:“vertical”,水平条:“horizontal”
import matplotlib.pyplot as plt
data = [5, 6, 7, 8]
labels = ["a", "b", "c", "d"]
colors = ["red","yellow",'blue','black']
plt.bar(range(len(data)), data,color=colors,width=0.5)
plt.xticks(range(len(data)),labels)#获取或设置x轴的当前刻度位置和标签
plt.xlabel("x")
plt.ylabel("y")
plt.show()
2.直方图
直方图与柱状图的区别:
柱状图:条形图用长条形表示每一个类别,长条形的长度表示类别的频数,宽度表示表示类别。
直方图:直方图形式上也是一个个的长条形,但是直方图用长条形的面积表示频数,所以长条形的高度表示频数除以组距,宽度表示组距,其长度和宽度均有意义。当宽度相同时,一般就用长条形长度表示频数。
import matplotlib.pyplot as plt
import numpy as np
import matplotlib
# 设置matplotlib正常显示中文和负号
matplotlib.rcParams['font.sans-serif']=['SimHei'] # 用黑体显示中文
matplotlib.rcParams['axes.unicode_minus']=False # 正常显示负号
# 随机生成(10000,)服从正态分布的数据
data = np.random.randn(10000)# randn产生正态分布的随机数
"""
绘制直方图
data:必选参数,绘图数据
bins:直方图的长条形数目,可选项,默认为10
facecolor:长条形的颜色
edgecolor:长条形边框的颜色
alpha:透明度
"""
plt.hist(data, bins=40, facecolor="blue", edgecolor="black", alpha=0.5)
# 显示横轴标签
plt.xlabel("区间")
# 显示纵轴标签
plt.ylabel("频数/频率")
# 显示图标题
plt.title("频数/频率分布直方图")
plt.show()
3.散点图
可以用散点图来表示特征之间的相关性,调用 scatter()函数即可。
import numpy as np
import matplotlib.pyplot as plt
N=100
x=np.random.randn(N)
y=np.random.randn(N)
plt.scatter(x,y,alpha=0.8)
plt.show()