![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SNiNGO4EWZihjM3kDN1ITZhdjNmNDNiRWO1ETMwEjNk9CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
Matplotlib是Python数据可视化最简单常用的包之一,
笔者希望通过本篇文章和之后的常用技巧补充,将自己在科研和工作中积累和摘抄的
数据可视化包使用经验和技巧笔记展示大家~ 本部分技巧知识点主要包括:- 简单图形的选用/画图方法/matplotlib图形结构;
- 绘制折线/图片大小设置/设置刻度/ 中文显示【尤其坐标轴和标题】/一图多线【plt.legdend】/ ;
一、Matplotlib简介
Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。
1.1 简单图形的选用
- 折线图:以折线的上升和下降表示统计量的增减变化的统计图。
- 特点:能够显示数据的变化趋势, 反映事物的变化情况(变化)
- 散点图:用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联关系或总结坐标点的分布模式。
- 特点:判断 变量之间是否存在数量关联趋势,展示离群点(分布规律)
- 直方图:由一系列高度不等的纵向条纹或者线段表示数据分布的情况。一般用横轴表示数据范围,纵轴表示分布情况。
- 特点:绘制连续性的数据展示一组或者多组数据的分布情况(统计)。
- 饼图:用于表示不同分类的占比情况,通过弧度大小来对比各种分类。
- 特点:分类数据的占比情况(占比)。
1.2 简单画图方法
- plt.plot(x,y)这后面跟着x和y值;x可以放多个点;
- 圈起来的部分的 两个列表分别是x和y,多个值是x1,x2,x3;列表中值的个数要一致 ;
- jupyter notebook第一次运行并不能运行出来画图, 需要加上一句%matplotlib inline,不然要在同一个单元格上运行两遍才能出来;
1.3 matplotlib图形结构
- canvas类似画板,figure对象类似画布,绘制多个坐标系,就是axes
二、具体画图操作
2.1 绘制折线
- marker折点样式;markeredgecolor='g'折点颜色;markeredgewidth=25折点大小;
2.2 图片大小设置
- 加上这一句: plt.figure(figsize=(20,8))分别表示宽和高;dpi表示分辨率(每一英寸上有个像素点),大小是英寸;
- 保存在当前目录下: plt.savefig('./t1.png');
- 如果show放在save之前容易出错,show放在save最后最好,图片存为.svg格式作为矢量图,放大后,边缘不会有锯齿;
2.3 设置刻度
- 最好的设置方式:
plt.xticks(range(1,25))
plt.yticks(range(min(y),max(y)+1))加1为了避免不显示最后一个值;
- 刻度标签:把刻度标签变成想要的“几月份” 【注意是有x,x_ticks_label两个参数】
- 为了避免过长的坐标文字重合用这句:rotation=45可以变倾斜;
- 最后横纵轴实现了这种效果:比上面两种好看
2.4 为了中文能够显示出来【尤其坐标轴和标题】
#添加字体关键句
from matplotlib import font_manager
my_font = font_manager.FontProperties(fnmae=r'C:WindowsFontsarial.ttc',size=18)
plt.xlabel('time')
plt.ylabel('count')
plt.title('时间/次数',fontproperties=my_font,color='red')
2.5 一图多线【plt.legdend】
2.6 总结【几个参数设置】
三、Matplotlib简单绘图拓展
3.1一图多个子坐标系
- 两行两列第一个图2,2,1
3.2 设置x轴,y轴坐标范围
3.3 设置边框位置和形式
3.4 改变坐标轴的默认显示方式
3.5画饼状图
3.6 累积条形图【画上下两条和左右两条】
3.7 小总结
3.8 箱型图
#首先看一段例子:
import pandas as pd
from pandas import DataFrame,Series
df = DataFrame(np.random.randn(10, 2), columns=['Col1', 'Col2'])
boxplot=df.boxplot()
通过boxplot方法,我们直接得到了箱型图。
boxplot方法官方介绍如下:
DataFrame.boxplot(column=None, by=None, ax=None, fontsize=None, rot=0, grid=True, figsize=None, layout=None, return_type=None, **kwds)
- 方法说明
boxplot方法只是用于DataFrame,Series对象没有此方法
- 参数说明
column,默认为None,输入为str 或由str构成的list,其作用是指定要进行箱型图分析的列
by,默认为None,str or array-like,其作用为pandas的group by,通过指定by=‘columns’,可进行多组合箱型图分析
ax,matplotlib.axes.Axes的对象,没有太大作用
fontsize,箱型图坐标轴字体大小
rot,箱型图坐标轴旋转角度
grid,箱型图网格线是否显示
figsize,箱型图窗口尺寸大小
layout,必须配合by 一起使用,类似于subplot 的画布分区域功能
return_type,指定返回对象的类型,默认为None,可输入的参数为‘axes’,‘dict’,‘both’,当与by一起使用是,返回的对象为Series或array(for return_type = None)
- 箱型图返回结果说明:
当指定return_type=‘dict’时,其结果值为一个字典,字典索引为固定的'whiskers'、'caps'、'boxes'、'fliers'、'means'
boxplot=df.boxplot(return_type='dict')
boxplot
Out[132]:
{'whiskers': [<matplotlib.lines.Line2D at 0x26b61ec81d0>,
<matplotlib.lines.Line2D at 0x26b61ec8668>,
<matplotlib.lines.Line2D at 0x26b61ec6f98>,
<matplotlib.lines.Line2D at 0x26b61b7d400>],
'caps': [<matplotlib.lines.Line2D at 0x26b61ec8a90>,
<matplotlib.lines.Line2D at 0x26b61ec8eb8>,
<matplotlib.lines.Line2D at 0x26b61b7d828>,
<matplotlib.lines.Line2D at 0x26b61b7dc50>],
'boxes': [<matplotlib.lines.Line2D at 0x26b61ec8080>,
<matplotlib.lines.Line2D at 0x26b61ec6b38>],
'medians': [<matplotlib.lines.Line2D at 0x26b61ec6320>,
<matplotlib.lines.Line2D at 0x26b61b560b8>],
'fliers': [<matplotlib.lines.Line2D at 0x26b61ec6748>,
<matplotlib.lines.Line2D at 0x26b61b564e0>],
'means': []}
- 此时,通过指定索引值获取相应数据
boxplot['fliers'][1].get_xdata()
Out[137]: array([2.])
boxplot['fliers'][1].get_ydata()
Out[138]: array([1.79881989])