http://matplotlib.org/
我们以matplotlab包里面的pyplot 为例介绍,这个模块仿照matlab中的绘图,对有matlab绘图经验的同学很友好
import matplotlib.pyplot as plt
面板(figure·):matplotlib中的图像都是位于figure对象中。
子图:一个figure图像中可以建立多个subplot对象用于绘制图像
subplot需要三个参数,前面两个用于指定整个图的行列数,第三个说明下面的绘画是在哪一个子图完成的
plt.subplot(2, 2, 1)
plt.subplot(221)
以上面代码为例,2和2表示有4个子图,2*2的排列,此时是在第一个子图上进行绘制。如果三个参数均小于10,参数还可以合并为221
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
x1 = np.random.randint(-3, 3, 20)
x2 = np.random.randint(-3, 3, 20)
x3 = np.random.randint(-3, 3, 20)
x4 = np.random.randint(-3, 3, 20)
y1 = np.sin(x1)
y2 = np.sin(x2)
y3 = np.sin(x3)
y4 = np.sin(x4)
plt.figure(1)
plt.subplot(2, 2, 1)
plt.plot(x1, y1, 'rH')
plt.title('x1')
plt.subplot(2, 2, 2)
plt.plot(x2, y2, 'bD')
plt.title('x2')
plt.subplot(2, 2, 3)
plt.plot(x3, y3, 'go')
plt.title('x3')
plt.subplot(2, 2, 4)
plt.plot(x4, y4, 'k*')
plt.title('x4')
plt.xlabel('x')
plt.ylabel('sin(x)')
plt.show()
用于表示数据出现频率的图形,这里以正态分布为例
参数 | 意义 |
---|---|
normed | 是否将数据归一化,默认为0,不归一化 |
bins | 图形长方形的数目,默认为10 |
facecolor | 长方形颜色 |
edgecolor | 长方形边框颜色 |
alpha | 透明度 |
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
plt.figure(1)
x = np.random.randn(10000)
plt.hist(x,bins=20,facecolor='blue',edgecolor='black',alpha=0.7)
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
x = np.random.randn(100)
y = np.random.randn(100)
plt.scatter(x,y,c='r',lw=2)
plt.show()
c指定散点的颜色,lw指定散点的大小
参数 | 描述 |
---|---|
linewidth | 矩阵之间的间隔 |
vmax,vmin | 最大值最小值的显示值,默认不显示 |
cmap | 颜色对象,即图像显示的颜色类型 |
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
plt.figure(1)
plt.subplot(221)
data = np.random.randn(10,10)
sns.heatmap(data,linewidths=0.1,cmap='RdBu_r',vmin=-1,vmax=1)
plt.subplot(222)
data = np.random.randn(10,10)
sns.heatmap(data,linewidths=0.1,cmap='rainbow',vmin=-1,vmax=1)
plt.subplot(223)
data = np.random.randn(10,10)
sns.heatmap(data,cmap='rainbow',vmin=-1,vmax=1)
plt.subplot(224)
data = np.random.randn(10,10)
sns.heatmap(data,linewidths=0.1,cmap='rainbow')
参数 | 描述 |
---|---|
alpha | 透明度 |
label | 图形的标签 |
width | 柱形的宽度 |
color | 柱形的颜色 |
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
plt.figure(1)
x_index = np.arange(5)
x_data = ('A', 'B', 'C', 'D', 'E')
y_data = (12, 23, 34, 45, 56)
bar_width = 0.5
plt.bar(x_index, y_data, width=bar_width, alpha=0.4, color='b', label='data')
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
plt.figure(1)
x_index = np.arange(5)
x_data = ('A', 'B', 'C', 'D', 'E')
y1_data = (12, 23, 34, 45, 56)
y2_data = (56, 45, 34, 23, 12)
bar_width = 0.3
r1 = plt.bar(x_index, y1_data, width=bar_width, alpha=0.4, color='b', label='data1')
r2 = plt.bar(x_index + bar_width, y2_data, width=bar_width, alpha=0.5, color='r',
label='data2')
plt.xticks(x_index+bar_width/2, x_data) # 指定x轴标签的位置
plt.legend() # 加上标签
plt.tight_layout()
绘制拥有三个维度的图像
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
fig = plt.figure(1)
ax = fig.add_subplot(111, projection='3d') # 绘制三维图
x = np.arange(-3, 3, 0.2)
y = np.arange(-3, 3, 0.2)
x, y = np.meshgrid(x, y)
Z = x * np.exp(-x ** 2 - y ** 2)
ax.plot_surface(x, y, Z, rstride=2, cstride=1, cmap=plt.cm.coolwarm, alpha=0.8)
ax.set_xlabel('X_index')
ax.set_ylabel('Y_index')
ax.set_zlabel('Z_index')