# Matplotlib绘制六种可视化图表，值得收藏

## 01. 折线图

import numpy as np
import matplotlib.pyplot as plt

x= np.linspace(0, 2, 100)

plt.plot(x, x, label='linear')
plt.plot(x, x**3, label='cubic')

plt.xlabel('x label')
plt.ylabel('y label')

plt.title("Simple Plot")

plt.legend()

plt.show()

show image

## 02. 散点图

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0., 5., 0.2)

# 红色破折号, 蓝色方块 ，绿色三角块
plt.plot(x, x, 'r--', x, x**2, 'bs', x, x**3, 'g^')
plt.show()

show image

## 03. 直方图

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(19680801)

mu1, sigma1 = 100, 15
mu2, sigma2 = 80, 15
x1 = mu1 + sigma1 * np.random.randn(10000)
x2 = mu2 + sigma2 * np.random.randn(10000)

# the histogram of the data
# 50：将数据分成50组
# facecolor：颜色；alpha：透明度
# density：是密度而不是具体数值
n1, bins1, patches1 = plt.hist(x1, 50, density=True, facecolor='g', alpha=1)
n2, bins2, patches2 = plt.hist(x2, 50, density=True, facecolor='r', alpha=0.2)

# n：概率值；bins：具体数值；patches：直方图对象。

plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title('Histogram of IQ')

plt.text(110, .025, r'$\mu=100,\ \sigma=15$')
plt.text(50, .025, r'$\mu=80,\ \sigma=15$')

# 设置x，y轴的具体范围
plt.axis([40, 160, 0, 0.03])
plt.grid(True)
plt.show()

show image

## 04. 柱状图

### 4.1 并列柱状图

import numpy as np
import matplotlib.pyplot as plt
size = 5
a = np.random.random(size)
b = np.random.random(size)
c = np.random.random(size)
x = np.arange(size)

# 有多少个类型，只需更改n即可
total_width, n = 0.8, 3
width = total_width / n

# 重新拟定x的坐标
x = x - (total_width - width) / 2

# 这里使用的是偏移
plt.bar(x, a,  width=width, label='a')
plt.bar(x + width, b, width=width, label='b')
plt.bar(x + 2 * width, c, width=width, label='c')
plt.legend()
plt.show()

show image

### 4.2 叠加柱状图

import numpy as np
import matplotlib.pyplot as plt

size = 5
a = np.random.random(size)
b = np.random.random(size)
c = np.random.random(size)

x = np.arange(size)

# 这里使用的是偏移
plt.bar(x, a, width=0.5, label='a',fc='r')
plt.bar(x, b, bottom=a, width=0.5, label='b', fc='g')
plt.bar(x, c, bottom=a+b, width=0.5, label='c', fc='b')

plt.ylim(0, 2.5)
plt.legend()
plt.grid(True)
plt.show()

show image

## 05. 饼图

### 5.1 普通饼图

import matplotlib.pyplot as plt

labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
sizes = [15, 30, 45, 10]

# 设置分离的距离，0表示不分离
explode = (0, 0.1, 0, 0)

plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',

# Equal aspect ratio 保证画出的图是正圆形
plt.axis('equal')

plt.show()

show image

### 5.2 嵌套饼图

import numpy as np
import matplotlib.pyplot as plt

# 设置每环的宽度
size = 0.3
vals = np.array([[60., 32.], [37., 40.], [29., 10.]])

# 通过get_cmap随机获取颜色
cmap = plt.get_cmap("tab20c")
outer_colors = cmap(np.arange(3)*4)
inner_colors = cmap(np.array([1, 2, 5, 6, 9, 10]))

print(vals.sum(axis=1))
# [92. 77. 39.]

wedgeprops=dict(width=size, edgecolor='w'))
print(vals.flatten())
# [60. 32. 37. 40. 29. 10.]

wedgeprops=dict(width=size, edgecolor='w'))

# equal 使得为正圆
plt.axis('equal')
plt.show()

show image

### 5.3 极轴饼图

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(19680801)

N = 10
theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False)
width = np.pi / 4 * np.random.rand(N)

ax = plt.subplot(111, projection='polar')
bars = ax.bar(theta, radii, width=width, bottom=0.0)
# left表示从哪开始，
# width表示末端的弧长

# 自定义颜色和不透明度
for r, bar in zip(radii, bars):
bar.set_facecolor(plt.cm.viridis(r / 10.))
bar.set_alpha(0.5)

plt.show()

show image

## 06. 三维图

### 6.1 绘制三维散点图

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

data = np.random.randint(0, 255, size=[40, 40, 40])

x, y, z = data[0], data[1], data[2]
ax = plt.subplot(111, projection='3d')  # 创建一个三维的绘图工程
#  将数据点分成三部分画，在颜色上有区分度
ax.scatter(x[:10], y[:10], z[:10], c='y')  # 绘制数据点
ax.scatter(x[10:20], y[10:20], z[10:20], c='r')
ax.scatter(x[30:40], y[30:40], z[30:40], c='g')

ax.set_zlabel('Z')  # 坐标轴
ax.set_ylabel('Y')
ax.set_xlabel('X')
plt.show()

show image

### 6.2 绘制三维平面图

from matplotlib import pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = Axes3D(fig)
X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)

# 具体函数方法可用 help(function) 查看，如：help(ax.plot_surface)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow')

plt.show()

show image

0 条评论

• ### 机器学习决策树：sklearn分类和回归

1 逻辑回归和决策树分类比较 昨天的推送机器学习：对决策树剪枝，分析了决策树需要剪枝，今天再就这个话题，借助 sklearn 进一步分析决策树分类和回归时过拟合...

• ### 机器学习储备（9）：matplotlib绘图原理及实例

? matplotlib绘图的基本元素都包括都哪些？常用的绘图API如何应用。本文做个入门介绍吧。 1 基本元素 通过一个大部分都是用默认值的例子，初步认识下...

• ### Python必知坑点(2)：嵌套列表的坑

Python中有一种内置的数据类型叫列表(list)，它是一种容器，可以用来承载其他的对象（准确的说是其他对象的引用），列表中的对象可以称为列表的元素，很明显我...

• ### 异常值检测

异常值（outlier）是指一组测定值中与平均值的偏差超过两倍标准差的测定值，与平均值的偏差超过三倍标准差的测定值，称为高度异常的异常值。

• ### Python数据分析之matplotlib（应用篇）

matplotlib核心剖析（http://www.cnblogs.com/vamei/archive/2013/01/30/2879700.html#comm...

• ### Python数据处理从零开始----第四章（可视化）（19）一文解决线图line chart

折线图或折线图是一种将信息显示为一系列数据点的图表，这些数据点由直线段连接。 它与散点图相似，不同之处在于测量点是有序的（通常是按其x轴值排序）并与直线段相连。

• ### Python3.0科学计算学习之绘图（一

(1)  plot是标准的绘图库，调用函数plot(x,y)就可以创建一个带有绘图的图形窗口（其中y是x的函数）。输入的参数为具有相同长度的数组（或列表）；或者...

• ### 泰勒公式和Gamma函数

泰勒公式，也称泰勒展开式。是用一个函数在某点的信息，描述其附近取值的公式。如果函数足够平滑，在已知函数在某一点的各阶导数值的情况下，泰勒公式可以利用这些导数值来...