河南南阳收割机被堵事件:官员缺德,祸患无穷

极目新闻领导公开“记者毕节采访被打”细节:他们打人后擦去指纹

突发!员工跳楼!只拿低保工资!央企设计院集体罢工!

退休后的温家宝

突发!北京某院集体罢工!

生成图片,分享到微信朋友圈

自由微信安卓APP发布,立即下载! | 提交文章网址
查看原文

Python数据分析常见库介绍之Matplotlib

胡萝卜酱 DataGo数据狗 2022-07-01

不管是数据挖掘还是数学建模,都要面对一个问题,那就是数据可视化。在Pandas的文章中也提及了可视化,虽然Python提供了很多库能够进行数据可视化,但用的最多,最强大的库一定是Matplotlib。Matplotlib主要用于二维绘图,当然,它也可以简单的绘制三维图。Matplotlib的上级依赖库相对较多,如果在导入Matplotlib时,你会收到类似“无命名模块”和模块名称的错误,这意味着你还需要安装该模块。

简介



在绘图时,我们需要给出作图所需的自变量和因变量,图像大小,图例,标题等等内容,下面是一个小小的例子,它基本包含了matplotlib作图的关键要素。

import numpy as np
import matplotlib.pyplot as plt #导入Matplotlib
import matplotlib as mpl

# 通过rcParams设置全局横纵轴字体大小
mpl.rcParams['xtick.labelsize'] = 20
mpl.rcParams['ytick.labelsize'] = 20

x = np.linspace(0101000#作图的变量自变量
y = np.sin(x) + 1 #因变量y
z = np.cos(x) + 1 #因变量z

plt.figure(figsize = (84)) #设置图像大小
plt.plot(x,y,label = '$\sin x+1$', color  = 'red', linewidth = 2#作图,设置标签、线条颜色、线条大小
plt.plot(x, z, 'b--', label = '$\cos  x+1$')  #作图,设置标签、线条类型
plt.xlabel('Time(s) '# x轴名称
plt.ylabel('Volt'# y轴名称
plt.title('A Simple Example'#标题
plt.ylim(02.2#显示的y轴范围
plt.legend() #显示图例
plt.show() #显示作图结果

结果:

从上例,我们大致了解了作图需要的关键因素。那些下面将接介绍不同类型的图形绘制方法。

线图和点图



x = np.linspace(010100)# x轴的采样点
y = 2*np.sqrt(x) + np.sin(x)**2
y_data = y + np.random.normal(scale=0.3,  size=100)# y轴的值以及拟合线

plt.plot(x, y_data, '.')# '.'标明画散点图,每个散点的形状是个圆
plt.plot(x, y) # 画模型的图,plot函数默认画连线图

# 通过'k'指定线的颜色,lw指定线的宽度
# 第三个参数除了颜色也可以指定线形,比如'r--'表示红色虚线
plt.plot(x, y, 'k', lw=3)

# scatter可以更容易地生成散点图
plt.scatter(x, y_data)
plt.show()

结果显示:

 

条形图和饼图



散点图和线图表只是最基本的用法,有的时候我们获取了分组数据要做对比,柱状或饼状类型的图或许更合适。为了更直观的显示两个图,这里我们使用了ax命名的对象。Matplotlib中,画图时有两个常用概念,一个是平时画图蹦出的一个窗口,这叫一个figure。figure相当于一个大的画布,在每个figure中,又可以存在多个子图,这种子图叫做axes。

# 包含了成绩为A,B,C,D的学生人数及其对应的可视化颜色
score_map = {
    'A': (22'#7199cf'),
    'B': (45'#4fc4aa'),
    'C': (67'#e1a7a2'),
    'D': (9'#89a0b0')
}

# 整体图的标题
fig = plt.figure('Bar chart')

# 在整张图上加入一个子图,121的意思是在一个1行2列的子图中的第一张
ax = fig.add_subplot(121)
ax.set_title('bar chart')

# 生成x轴每个元素的位置
xticks = np.arange(8,step=2)

# 定义柱状图每个柱的宽度
bar_width = 1

# 成绩等级名称
students = score_map.keys()

# 各等级成绩人数
score = [x[0for x in score_map.values()]

# 对应颜色
colors = [x[1for x in score_map.values()]

# 画柱状图,横轴是成绩等级标签的位置,纵轴是人数,定义柱的宽度,同时设置柱的边缘为透明
bars = ax.bar(xticks, score, width=bar_width, edgecolor='none')

# 设置y轴的标题
ax.set_ylabel('number')

# x轴每个标签的具体位置,设置为每个柱的中央
ax.set_xticks(xticks+bar_width/2)

# 设置每个标签的名字
ax.set_xticklabels(students)

# 设置x轴的范围
ax.set_xlim([bar_width/2-18-bar_width/2])

# 设置y轴的范围
ax.set_ylim([075])

# 给每个bar分配指定的颜色
for bar, color in zip(bars, colors):
    bar.set_color(color)

# 在122位置加入新的图
ax = fig.add_subplot(122)
ax.set_title('pie chart')

# 生成同时包含名称和速度的标签
labels = ['{}:{}'.format(student, mark) for student, mark in zip(students, score)]

# 画饼状图,并指定标签和对应颜色
ax.pie(score, labels=labels, colors=colors)

plt.show()


结果:

 热力图



from pylab import *
def f(x,y): return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)

n = 256
x = np.linspace(-3,3,n)
y = np.linspace(-3,3,n)
X,Y = np.meshgrid(x,y)

contourf(X, Y, f(X,Y), 8, alpha=.75, cmap='jet')
C = contour(X, Y, f(X,Y), 8, colors='black', linewidth=.5)
show()

 结果:

3D图 


Matplotlib中也能支持一些基础的3D图表,比如曲面图,散点图和柱状图。这些3D图表需要使用mpl_toolkits模块。 

from mpl_toolkits.mplot3d import Axes3D

# 采样个数100
n_samples = 100
dim = 3

# 先生成一组3维正态分布数据,数据方向完全随机
samples = np.random.multivariate_normal(
    np.zeros(dim),
    np.eye(dim),
    n_samples
)

# 通过把每个样本到原点距离和均匀分布吻合得到球体内均匀分布的样本
for i in range(samples.shape[0]):
    r = np.power(np.random.random(), 1.0/3.0)
    samples[i] *= r / np.linalg.norm(samples[i])

upper_samples = []
lower_samples = []

for x, y, z in samples:
    # 3x+2y-z=1作为判别平面
    if z > 3*x + 2*y - 1:
        upper_samples.append((x, y, z))
    else:
        lower_samples.append((x, y, z))

fig = plt.figure('3D scatter plot')
ax = fig.add_subplot(111, projection='3d')

uppers = np.array(upper_samples)
lowers = np.array(lower_samples)

# 用不同颜色不同形状的图标表示平面上下的样本
# 判别平面上半部分为红色圆点,下半部分为绿色三角
ax.scatter(uppers[:, 0], uppers[:, 1], uppers[:, 2], c='r', marker='o')
ax.scatter(lowers[:, 0], lowers[:, 1], lowers[:, 2], c='g', marker='^')

plt.show()

结果:

Matplotlib的绘图功能非常强大,上述的演示只是简单的介绍了其中最常用的几种图形。你可以根据自己的需求选择不同的图形来进行可视化,在Matplotlib的“画廊”里提供了详细的介绍,你可以点击:http://matplotlib.org/gallery.html,熟练使用后,你一定会爱上它的。

文章有问题?点此查看未经处理的缓存