1. 3种绘图
pandas 和 seaborn 绘图都是基于 matplotlib的
变化趋势用线性图,对应关系用散点图,大小比较用条形图,数据分布用直方图,数据组成用饼图
1.1 知识点
LaTex语法 用π等表达式在图表上写上希腊字母。
2.Pandas绘图
快速使用一个Pandas对象出图
3.matplotlib
3.1基础知识
很多API有很多参数,先掌握主要的,后面慢慢都会。
(1)基本元素
(2)只含单一曲线的图
1.可以使用多个plot函数(推荐),在一个图中绘制多个曲线。
2.可以在一个plot函数中传入多个X,y值,在一个图中绘制多个曲线。
plt.plot(x,y) 绘制两组数据的对应关系。 plt.plot(y) 绘制一组数据,横轴0-n-1自动填充。
例:plt.plot(x)
例:plt(x,y) 把index作为x轴,x作为纵轴
3.2基础元素的设置
画板,画布,网格线,绘图上下文
坐标轴界限,坐标轴标签,刻度
画布标题,添加图例,保存图片
(1)画板
作用:画板是呈现画布,负责画布比例的1个背景,设不设置都存在
如何获取:
画板比例,比值越高,画布里所有元素越小。
(2)画布
作用:画布是画板的子视图,子视图会覆盖父视图
所以如果在子画布上再叠加一个子画布,两者的位置如果重叠的话,后叠加的子画布会覆盖。
如何获取:
(rows, cols, loc) 第几行,第几列,第几个子画布,位置从1开始。只是一种描述方式,并不是真的做切割。类似地球的经纬度,并没有切割和画那条线,只是位置描述。
获取画布,1.直接用plt.subplot 或者2.通过画板对象,add_subplot添加。
(3)网格线
(4)绘图上下文
使用plt时,会有绘图上下文。plt是面向过程式的写法,永远在操作最近的上一个对象。比如设置标题,操作之前的标题。
例:
得到画布:
绘图:
再plt绘制一图,plt画在axes2上去了。
如果把plt的位置换到前面,会画到axes上去,画第一张。plt只设置离它最近的一个画图。
画一张图
比如:手写数字里,绘制Image里的任意一张图
想展示其中的100张:
为什么能画到所有子画布上,因为绘图上下文的关系。
(5)坐标轴界限
例: 画线型图,给一组数据,高低很大,真实情况不是如此。是坐标轴刻度问题,无形之中放大了差距。
把y轴刻度范围设置了,会变化。发现数据波动并不是很大。
(6)坐标轴的比例和隐藏
equal 设定横纵比例1:1,原本默认是1.5:1
(7)坐标轴的标签
例:
fontdict:字体的属性字典,可以通过键值对的方式加字体的大小,fontsize,color等。
(8)坐标轴的刻度
plt.xticks可以直接设置刻度和标签,但axes要通过2步完成。
可以查找LaTex语法
(9)画布标题
(10)添加图例
方法1. label设置后,用plt.legend()显示图例标签。
loc默认字符表示的位置
通过字符串best等,或者数字0-10来表示位置。
第2种:以坐标系上下左右定点的相对位置来处理,4个顶点的刻度设置好了,就是如下。可以用比值,设定图例的位置。
图例也可以是超过图的界限: loc=(-0.1,0.9)
ncol参数可以控制图例显示的列数。
(11)保存图片
用figure对象来操作,filename:图片的存储路径,相对路径和绝对路径。
dpi像素,越大图像越大。
facecolor 保存时的背景颜色。plt.figure() 里的facecolor图像保存时会失效。
保存图片的函数参数
3.3 2D图像的绘制
plt里的2D图像并没有那么好用,除了散点图,条形图,线形图其他一般用seaborn的方式解决。seaborn做的精致和快。
(1)绘制线性图
线性图表示趋势或者和时间有关,两组数据大小对比不能用。
(2)绘制直方图
orientation='vertical' 方向
align对齐方式
histtype hist的类型
label:图例
rwith: row的宽度
参数normed 如果值为True, 直方图的值将进行归一化处理,形成概率密度,默认值为False
如果指定了多个数据集合,颜色序列将会设置为相同的顺序,如果未指定,将会使用一个默认的线条颜色。
1.plt.hist(bins) bins--分组的个数,把数据从最小值到最大值进行n等分 (等差数列,比如=5,确定6个刻度,有5个区间进行划分,直方图表示落在每个区间的数据的个数)data.min() data.max()
2.分箱绘制
plt.hist() y = pd.cut(data, bins, labels)
分箱案例:
得到1.labels,相当于给数据打标签,对每个数据的标记,第一个数据是510-998区间的。2.得到2个类别,categories
设置标签为0,1,第一个区间返回是0,第二个为1
手动划分区间,保证区间覆盖整个data
返回的值,第一个是每个区间的数据的个数,即y轴显示的条形图的高,第2个array是整个数据切割的范围。
(3)绘制条形图
aligin 柱形的边的对齐方式,默认居中。只有center和edge2种方式
颜色为3元组,条形图往往用对比,可以设置不同颜色
例:
条形图,横轴可以不为数字,把文字作为标签
将标签值替换,被替换的目标索引要和原始索引匹配。不匹配上会失败。可以用np.arange(n)# 几个值就用几,那样2个图在1个图像中时,标签可以替换成功。
(4)极坐标条形图
要点:设立极坐标系,索引0-2π, 在极坐标系上绘制条形图。
(4)饼图
2种方式,1. 拿一组整数填,会按整数所占的比例去计算。
2.用小数填,如果小数和小于1,那么得到的饼图是缺角的。
(5)散点图
例:散点图:找到两组对应关系
例:引入第3维,成为气泡图
加上颜色,气泡呈现不同颜色
颜色用一个列表,相同的会呈现同一个颜色,比如,第2个和第5个颜色一样。
可以通过cmap参数配置0,1的颜色
cmap配置调色板,plt里提供了一些调色板,plt.cm.可以找到调色板
调色板作用,会维护一组颜色,如果设定c值,0,1,0是调色板中的索引,0对应的颜色是什么,就会渲染什么颜色。颜色都在调色板中处理的。所以更改调色板,颜色也会对应改变。
如果能记住调色板名称,可以直接用
(6)箱线图
箱线图的作用:主要是帮找离群点(异常值)的一种数据分布的图像。
例:
最上和最下的横线是上边界和下边界,中间红色的线是中位数,整个箱子是数据的主要分布区间,中间长方形的上面横线是75%分位数,下面是25%分位数。整个箱子涵盖了50%的数据。上边界和下边界之外的数据就是离群点。所以可以把数据通过箱线图的绘制快速查看异常值的分布状况。是一种常见的查看数据质量的图像。箱线图用seaborn里绘制的比较多。
3.4 通用元素设置
线型中破折线,用dashes进行处理,接收偶数对的列表,
分别表示线长和间隙的长,交替处理。
设置破折号序列各段的宽度。
更多点的设置
多个曲线不同设置
多参数连用用 plt.plot(x1,y1,fmt1,x2,y2,fmt2...)
3.5 常用的颜色
十六进制颜色,# 开头表示16进制。
3.6 全局设置
plt.rcParams # 查看全局设置的参数
常用字体: 黑体 SimHei 仿宋 FangSong
楷体 KaiTi
可以做全局风格的设置。
一般用sns.set()更简单。
3.7 加载自定义字体(局部设置)
3.8 添加文字
(1)画板添加文字
(2)画布添加文字
1.mpl.axes.Axes.text() # 添加文本
2 mpl.axes.Axes.annotate() #添加注释
所有方法会返回一个matplotlib.text.Text对象
例:figure添加文本,x,y是一个相对位置,s是文本,
因为figure对象没有坐标刻度,x,y是一个0-1之间的相对位置。
例:annow
arowstyle 是 arrowprops里的一个键
例:
xy指向的那个位置,xytext 放文字的位置
4. seaborn
绘制复杂的二维图像
4.1 绘图风格的设定
(1)画布风格
(2)画布线条
(3)调色板
一、sns.set_palette()
1.特点
2.如何构造一个cmap对象
3.常用的调色板
4.默认的调色风格
deep, muted, bright, pastel, dark, colorblind
二、sns.color_palette()
4.2 常见图像绘制
(1)核心参数
(2)线图
(3)柱状图
(4)离散数据VS连续数据
箱线图,琴图,swarm图
(5)连续数据VS连续数据 散点图
sns.scatterplot()
(6)使用颜色深浅表现数据大小
(7)查看数据分布 :直方图,kde图像,地毯图
(8)网格布局
(9)成对图像
批量展示两两数据之间的对应关系
sns.pairplot(data=iris, hue=species)
4.2 seborn matplotlib绘图
5. 3D图像
例:
plt.colorbar(p,shrink=0.5)