Matplotlib基础知识
Matplotlib中的基本图表包括的元素
- x轴和y轴 axis
水平和垂直的轴线
- x轴和y轴刻度 tick
刻度标示坐标轴的分隔,包括最小刻度和最大刻度
- x轴和y轴刻度标签 tick label
表示特定坐标轴的值
- 绘图区域(坐标系) axes
实际绘图的区域
- 坐标系标题 title
实际绘图的区域
- 轴标签 xlabel ylabel
实际绘图的区域
import numpy as np import pandas as pd import matplotlib.pyplot as plt from pandas import Series,DataFrame
包含单条曲线的图
注意:y,x轴的值必须为数字
x=[1,2,3,4,5] y=[2,4,6,8,10] plt.plot(x,y)
绘制抛物线
x = np.linspace(-np.pi,np.pi,num=20) y = x**2 plt.plot(x,y)
绘制正弦曲线图
x y = np.sin(x) plt.plot(x,y)
包含多个曲线的图
1、连续调用多次plot函数
plt.plot(x,y)
plt.plot(x+2,y+3)
2、也可以在一个plot函数中传入多对X,Y值,在一个图中绘制多个曲线
plt.plot(x,y,x+1,y-2)
将多个曲线图绘制在一个table区域中:对象形式创建表图
- a=plt.subplot(row,col,loc) 创建曲线图
- a.plot(x,y) 绘制曲线图
ax1 = plt.subplot(221) ax1.plot(x,y) ax2 = plt.subplot(2,2,2) ax2.plot(x,y) ax3 = plt.subplot(2,2,3) ax3.plot(x,y) ax4 = plt.subplot(2,2,4) ax4.plot(x,y)
网格线 plt.gride(XXX)
参数:
- axis
- color:支持十六进制颜色
- linestyle: -- -. :
- alpha
plt.plot(x,y) plt.grid(axis='both',c='blue')
绘制一个正弦曲线图,并设置网格
plt.plot(x,y,c='red',alpha=0.7)
坐标轴界限
# axis方法:设置x,y轴刻度值的范围 # plt.axis([xmin,xmax,ymin,ymax]) plt.plot(x,y) plt.axis([-6,6,-2,2]) #plt.axis('off')
设置画布比例:plt.figure(figsize=(a,b)) a:x刻度比例 b:y刻度比例 (2:1)表示x刻度显示为y刻度显示的2倍
plt.figure(figsize=(6,6))
plt.plot(x,y)
坐标轴标签
- s 标签内容
- color 标签颜色
- fontsize 字体大小
- rotation 旋转角度
plt的xlabel方法和ylabel方法 title方法
plt.plot(x,y) plt.xlabel('aaa') plt.ylabel('bbb') plt.title('ccc')
图例
legend方法
两种传参方法:
- 分别在plot函数中增加label参数,再调用plt.legend()方法显示
- 直接在legend方法中传入字符串列表
plt.plot(x,y,label='aaa') plt.plot(x+2,y+3,label='bbb') plt.legend(loc=0,ncol=2)
legend的参数
- loc参数
- loc参数用于设置图例标签的位置,一般在legend函数内
- matplotlib已经预定义好几种数字表示的位置
保存图片
使用figure对象的savefig函数来保存图片
fig = plt.figure()---必须放置在绘图操作之前
figure.savefig的参数选项
- filename
含有文件路径的字符串或Python的文件型对象。图像格式由文件扩展名推断得出,例如,.pdf推断出PDF,.png推断出PNG (“png”、“pdf”、“svg”、“ps”、“eps”……) - dpi
图像分辨率(每英寸点数),默认为100 - facecolor ,打开保存图片查看 图像的背景色,默认为“w”(白色)
fig = plt.figure() plt.plot(x,y,label='aaa') plt.plot(x+2,y+3,label='bbb') plt.legend(loc=0,ncol=2) fig.savefig('./123.png',dpi=500)
设置plot的风格和样式
plot语句中支持除X,Y以外的参数,以字符串形式存在,来控制颜色、线型、点型等要素,语法形式为:
plt.plot(X, Y, 'format', ...)
颜色
参数color或c
颜色值的方式
- 别名
- color='r'
- 合法的HTML颜色名
- color = 'red'
颜色 | 别名 | HTML颜色名 | 颜色 | 别名 | HTML颜色名 |
---|---|---|---|---|---|
蓝色 | b | blue | 绿色 | g | green |
红色 | r | red | 黄色 | y | yellow |
青色 | c | cyan | 黑色 | k | black |
洋红色 | m | magenta | 白色 | w | white |
- HTML十六进制字符串
- color = '#eeefff'
- 归一化到[0, 1]的RGB元组
- color = (0.3, 0.3, 0.4)
线型
参数linestyle或ls
线条风格 | 描述 | 线条风格 | 描述 |
---|---|---|---|
'-' | 实线 | ':' | 虚线 |
'--' | 破折线 | 'steps' | 阶梯线 |
'-.' | 点划线 | 'None' / ',' | 什么都不画 |
线宽
linewidth或lw参数
plt.plot(x,y,ls='steps',lw=10)
2D图形
直方图
- 是一个特殊的柱状图,又叫做密度图。
【直方图的参数只有一个x!!!不像条形图需要传入x,y】
plt.hist()的参数
- bins
直方图的柱数,可选项,默认为10 - color
指定直方图的颜色。可以是单一颜色值或颜色的序列。如果指定了多个数据集合,例如DataFrame对象,颜色序列将会设置为相同的顺序。如果未指定,将会使用一个默认的线条颜色 - orientation
通过设置orientation为horizontal创建水平直方图。默认值为vertical
data = [1,2,3,3,4,2,5]
plt.hist(data,bins=10)
返回值 :
1: 直方图向量,是否归一化由参数normed设定
2: 返回各个bin的区间范围
3: 返回每个bin里面包含的数据,是一个list
条形图:plt.bar()
- 参数:第一个参数是索引。第二个参数是数据值。第三个参数是条形的宽度
-【条形图有两个参数x,y】
- width 纵向设置条形宽度
- height 横向设置条形高度
bar()、barh()
num = [1,2,3,4,5] count = [2,4,6,8,10] plt.barh(num,count)
饼图
【饼图也只有一个参数x】
pie()
饼图适合展示各部分占总体的比例,条形图适合比较各部分的大小
饼图阴影、分裂等属性设置
#labels参数设置每一块的标签;
#labeldistance参数设置标签距离圆心的距离(比例值)
#autopct参数设置比例值小数保留位(%.3f%%);
#pctdistance参数设置比例值文字距离圆心的距离
#explode参数设置每一块顶点距圆心的长度(比例值,列表);
#colors参数设置每一块的颜色(列表);
#shadow参数为布尔值,设置是否绘制阴影
#startangle参数设置饼图起始角度
plt.pie([0.2,0.5])
arr=[11,22,31,15] plt.pie(arr,labels=['a','b','c','d'])
#labeldistance参数设置标签距离圆心的距离(比例值) arr=[11,22,31,15] plt.pie(arr,labels=['a','b','c','d'],labeldistance=0.3)
#autopct参数设置比例值小数保留位(%.3f%%); arr=[11,22,31,15] plt.pie(arr,labels=['a','b','c','d'],labeldistance=0.3,autopct='%.6f%%')
##explode参数设置每一块顶点距圆心的长度(比例值,列表); arr=[11,22,31,15] plt.pie(arr,labels=['a','b','c','d'],labeldistance=0.3,shadow=True,explode=[0.2,0.3,0.2,0.4])
# startangle参数设置饼图起始角度
# %m.nf m 占位 n 小数点后保留几位 f 是以float格式输出
arr=[11,22,31,15] plt.pie(arr,labels=['a','b','c','d'],startangle=50)
散点图:因变量随自变量而变化的大致趋势
【散点图需要两个参数x,y,但此时x不是表示x轴的刻度,而是每个点的横坐标!】
x = np.random.randint(0,10,size=(20,))
y = np.random.randint(0,10,size=(20,))
plt.scatter(x,y,marker='d',c="rbgy") 设置不同的散点颜色
plt.scatter(x,y,c='rgyb')
x = [1,2,3,4,5] y = [2,4,6,8,10] plt.scatter(x,y)