matplotlib上手:常见操作命令总结


平时实验经常用到matplotlib,总结一下常见操作命令,下回忘了找也方便。
正好在知乎看到一篇总结比较到位的,转载一下,顺便增加点我自己的一些操作需求
转载于知乎十分钟|matplotlib上手,开启你的python可视化

为什么使用matplotlib

matplotlib是一个python 2D绘图库,利用它可以画出许多高质量的图像。只需几行代码即可生成直方图,条形图,饼图,散点图等。

Matplotlib可用于Python脚本,Python和IPython shell,Jupyter笔记本,Web应用程序服务器和四个图形用户界面工具包。希望本文能帮助大家了解如何将matplotlib用于自己的可视化。

Matplotlib, pyplot和pylab

Matplotlib是整个包,pyplot是Matplotlib中的一个模块,并且pylab是一个安装在一起的模块。

pylab和pyplot的区别是,前者将numpy导入了其命名空间中,这样会使pylab表现的和matlab更加相似。现在来说我们经常使用pyplot,因为pyplot相比pylab更加纯粹。

numpy,pandas?

matplotlib是可视化的表达,那么在图形的绘制中肯定会涉及一些数据处理。pandas和numpy则是python中最好用的两个数据分析库,使用它们,能够解决超过90%的数据分析问题。

图的构成

在这里插入图片描述
以上图片来自matplotlib官网,它向我们展示了matplotlib的图的构成元素。大多数元素都比较好理解:坐标轴(axis)、坐标轴名称(axis label)、坐标轴刻度(tick)、坐标轴刻度标签(tick label)、网格线(grid)、图例(legend)、标题(title)…

命令详解

1:title设置

import matplotlib.pyplot as plt
plt.title("bitaoti")#括号当中输入标题的名称
plt.show()

在这里插入图片描述
如果title是中文,matplotlib会乱码,如果要显示中文,有以下两种写法:

1.1:使用plt.rcParams

plt.rcParams['font.sans-serif']=['SimHei'] 

在这里插入图片描述
注: plt.rcParams主要作用为指定图片像素:

plt.rcParams[‘figure.figsize’]#图片像素
plt.rcParams[‘savefig.dpi’]#分辨率
plt.savefig(‘plot123.png’, dpi=200)#指定分辨率

1.2:使用matplotlib.font_manager.FontProperties

import matplotlib.pyplot as plt
import matplotlib

myfont = matplotlib.font_manager.FontProperties(fname = r'C:/Windows/Fonts/STLITI.ttf')
# 用的华文隶书
plt.title('标题', fontproperties = myfont, fontsize = 16) #可以调整字体大小
plt.show()

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190725104317373.png?x-oss-processtype_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDE5MTI4Ng==#pic_center,size_16 ,color_FFFFFF,t_70)
注: 添加字体的时候字体名称格式可以通过属性查看
在这里插入图片描述

2:坐标轴与标签(label, legend)

## 设置下图形数据
x = np.linspace(0, 10, 100)
y_sin = np.sin(x)
y_cos = np.cos(x)

myfont = matplotlib.font_manager.FontProperties(fname = r'C:/Windows/Fonts/simhei.ttf') #换成了黑体

plt.plot(x, y_cos, label='Cos')
plt.plot(x, y_sin, label='Sin')

plt.xlabel('X 轴', fontproperties = myfont, fontsize = 16)
plt.ylabel('Y 轴', fontproperties = myfont, fontsize = 16)

plt.legend(loc='best') # 可选best,center等

plt.title('余弦与正弦', fontproperties = myfont, fontsize = 16)
plt.show()

在这里插入图片描述
注: 八种内件颜色缩写:

b:blue
g:green
r:red
c:cyan
m:magenta
y:yellow
k:black
w:white

2.1:xticks自定义x,y轴刻度与标签

xticks()中有3个参数:
xticks(locs, [labels], **kwargs)

locs参数是一个数组,用于设置X轴刻度间隔
[labels]参数也是一个数组,用于设置每个间隔的显示标签
**kwargs可用于设置标签字体倾斜度和颜色等

locs = np.linspace(0, 10, 6)
labels = ['周一', '周二', '周三', '周四', '周五', '周六']

plt.xticks(locs, labels,fontproperties = myfont)

在这里插入图片描述

3:添加注释

有时候我们需要对特定的点进行标注,我们可以使用 plt.annotate 函数来实现:

s: 注释信息内容
xy:箭头点所在的坐标位置
xytext:注释内容的坐标位置

arrowprops:设置指向箭头的参数

s 为注释文本内容

xy 为被注释的坐标点

xytext 为注释文字的坐标位置

plt.annotate(s='标记点', xy=(3, np.sin(3)), xytext=(4, -0.5), weight='bold',\
             arrowprops=dict(arrowstyle='-|>', color='k'), fontproperties = myfont)

在这里插入图片描述

x = np.arange(0, 6)
y = x * x

plt.plot(x, y, marker='o')
for xy in zip(x, y):
    plt.annotate("(%s,%s)" % xy, xy=xy, xytext=(-20, 10), textcoords='offset points')
plt.show()

在这里插入图片描述

4:subplot绘制子图

如果需要将多张子图展示在一起,可以使用 subplot() 实现。即在调用 plot()函数之前需要先调用 subplot() 函数。该函数的第一个参数代表子图的总行数,第二个参数代表子图的总列数,第三个参数代表活跃区域。

ax1 = plt.subplot(2, 2, 1) # 两行两列第一个
plt.plot(x,np.sin(x), 'k')

ax2 = plt.subplot(2, 2, 2, sharey=ax1) # 与 ax1 共享y轴
plt.plot(x, np.cos(x), 'g')

ax3 = plt.subplot(2, 2, 3)
plt.plot(x,x, 'r')

ax4 = plt.subplot(2, 2, 4, sharey=ax3) # 与 ax3 共享y轴
plt.plot(x, 2*x, 'y')
plt.show()

在这里插入图片描述

5:Bar图

生成一个单系列的柱状图比较简单,只要确定x轴及y轴的数据,利用bar()函数就能生成

plt.figure()
x = np.arange(10)
y = np.random.randint(0,20,10)
plt.bar(x, y)

在这里插入图片描述
除了单系列柱状图,matplotlib还提供了其它类型的柱状图,如多系列柱状图,堆叠图,水平向的条纹图等。plt.plot()适用于基本图表的绘制,kind可选类型有线形图、柱状图、密度图、堆叠图、面积图等,以横纵坐标两个维度为主。grid是显示网格,colormap是颜色展示,括号中可填颜色参数,如不填则会展示默认颜色。

# 多系列柱状图
df = pd.DataFrame(np.random.rand(10, 3), columns = ['a', 'b', 'c'])
plt.figure()
df.plot(kind = 'bar', grid = True, colormap = 'summer_r')
plt.show()

在这里插入图片描述
想要实现堆叠效果,一定要加上stacked=true,否则输出图形就是一般的柱状图。

# 多系列堆叠图
df.plot(kind = 'bar',  grid = True, colormap = 'Blues_r', stacked = True)

在这里插入图片描述
水平向的条形图调用的是barh():

# 水平向
df.plot.barh( grid = True, colormap = 'BuGn_r', stacked = True)

在这里插入图片描述

6:Scatter散点图

绘制散点图,主要用到plt.scatter()这个函数。

x,y是必填参数;

c(颜色:b–blue, c–cyan,g–green,k–black,m–magenta,r–red,w–white,y–yellow);

s:控制点的大小,默认为20);

marker:指定散点图点的形状,默认为圆形;

alpha:指定对象的透明度;

绘制简单的散点图:

plt.figure()
x = np.random.rand(20)
y = np.random.rand(20)
plt.scatter(x,y)
plt.show()

在这里插入图片描述
进行简单的一些参数设置:

plt.figure()
x = np.random.rand(50)
y = np.random.rand(50)
colors = np.random.rand(50)
s = (30 * np.random.rand(50))**2
plt.scatter(x, y,s, c=colors, alpha=0.5)
plt.show()

在这里插入图片描述

散点矩阵图scatter_matrix,diagonal = ''为每个指标的频率图,有kde及hist两个参数可选;range_padding 是图像在x轴,y轴原点附近的留白,值越大,图像离坐标原点的距离越大。

plt.figure()
df = pd.DataFrame(np.random.randn(100, 4), columns = list('abcd'))
pd.scatter_matrix(df, figsize = (8,6),marker = 'o',diagonal = 'kde',alpha = 0.4,range_padding = 0.05)
plt.show()

在这里插入图片描述

7:Pie饼图

matplotlib中饼图的实现用的是pie()函数,必须输入的参数是饼图每个部分的值。
部分参数解释:

使用labels为饼图加标签;

autopct 控制饼图内百分比设置

'%1.1f’指小数点前后位数(没有用空格补齐),

shadow是在饼图下画一个阴影,False即不画

plt.figure()
sizes = [2,5,12]
labels = ['娱乐','育儿','饮食']
plt.pie(sizes,labels=labels,autopct='%1.1f%%',shadow=False,startangle=100)
plt.rcParams['font.sans-serif']=['SimHei'] 
plt.show()

在这里插入图片描述

8:Hist直方图

直方图绘制为hist()函数,参数如下:

data:必选参数,绘图数据

bins:直方图的长条形数目,可选项,默认为10

normed:是否将得到的直方图向量归一化,可选项,默认为0,代表不归一化,显示频数。normed=1,表示归一化,显示频率。

facecolor:长条形的颜色edgecolor:长条形边框的颜色

alpha:透明度

plt.figure()
s = pd.Series(np.random.randn(1000))
s.hist(bins = 20,histtype = 'bar',align = 'mid',orientation = 'vertical',alpha = 0.5,normed = True)
plt.show()

在这里插入图片描述
密度图,加上:

s.plot(kind = 'kde', style = 'k--')

在这里插入图片描述
柱状图能够实现堆叠,直方图也能实现堆叠,重点语句同样是stacked = True

plt.figure()
df = pd.DataFrame({'a':np.random.randn(500) + 1, 'b':np.random.randn(500),\
                   'c':np.random.randn(500) - 1, 'd':np.random.randn(500)},\
                  columns = list('abcd'))
df.plot.hist(stacked = True,bins = 10,colormap = 'Blues_r',alpha = 0.5,grid = True)
plt.show()

在这里插入图片描述

9:Polar极坐标图

matplotlib的pyplot子库提供了绘制极坐标图的方法。在调用subplot()创建子图时通过设置projection=‘polar’,便可创建一个极坐标子图,然后调用plot()在极坐标子图中绘图。

部分参数意义:

theta:角度数据radii :

极径数据theta_direction方法用于设置极坐标的正方向

theta_zero_location方法用于设置极坐标0°位置,0°可设置在八个位置,分别为N, NW, W, SW, S, SE, E, NEthetagrids方法用于设置极坐标角度网格线显示

theta_offset方法用于设置角度偏离

ax1 = plt.subplot(121, projection='polar')

在这里插入图片描述
极区图:

plt.figure()
N = 20
theta = np.linspace(0, 2 * np.pi, N, endpoint = False)
radii = 10 * np.random.rand(N)
width = np.pi / 4 * np.random.rand(N)
ax = plt.subplot(111, projection = 'polar')
bars = ax.bar(theta, radii, width = width, bottom = 0.0)
plt.show()

在这里插入图片描述
极散点图

plt.figure()
theta = np.arange(0,2*np.pi, np.pi/4) # 数据角度
r = np.arange(1,9,1) #数据极径
area = 100*np.arange(1,9,1) # 数据散点面积
colors = theta
ax2 = plt.subplot(111,projection='polar')
ax2.scatter(theta, r, c=colors, s=area, cmap='hsv', alpha =0.75)
plt.show()

在这里插入图片描述

10:Boxplot箱型图

绘制箱线图,用plt.boxplot()这个函数。箱型图是利用数据中的五个统计量:最小值、第一四分位数、中位数、第三四分位数与最大值来描述数据的一种方法。它也可以粗略地看出数据是否具有有对称性,分布的分散程度等信息,特别可以用于对几个样本的比较。
箱型图各部分含义
部分参数:
sym:异常值的形状 ;
whis:用于调节上下垂直线的长度

生成箱型图:

plt.figure()
np.random.seed(100)#生成随机数
data=np.random.normal(size=(1000,4),loc=0,scale=1) #1000个值得4维数组
lables = ['A','B','C','D']
plt.boxplot(data,labels=lables)
plt.show()
plt.show()

在这里插入图片描述
箱型图也可以是横向的,加上vert=False即可:
在这里插入图片描述

11:Heatmap热图

plt.figure()
X = [[1,2],[3,4],[5,6]]
plt.imshow(X)
plt.colorbar()
plt.show()

热图是数据分析的常用方法,通过色差、亮度来展示数据的差异、易于理解。matplotlib中生成热图是调用的函数imshow()
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值