Python 数据分析第四期 – 数据可视化
Matplotlib
用于创建出版质量图表的绘图工具库,目的是为Python构建一个Matlib式的绘图接口。
# 引入matplotlib包
import matplotlib.pyplot as plt
%matplotlib inline #在jupyter 里使得数据可视化需要这句代码
# 创建figure
fig = plt.figure() # Matplotlib的图像均位于figure对象中
”““
#fig.add_subplot(a,b,c)
a,b 表示要将figure分割成 a * b 的区域
c 表示当前选中要操作的区域,注意从1开开始
”“”
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
ax4 = fig.add_subplot(2,2,4)
# 在subplot上作图
import numpy as np
random_arr = np.random.randn(100)
#print random_arr
# 默认是在最后一次使用subplot的位置上作图,但是在jupyter里无效
plt.plot(random_arr)
plt.show()
# 在指定subplot作图
import scipy as sp
from scipy import stats
x = np.linspace(-5, 15, 50)
#print x.shape
# 绘制高斯分布
plt.plot(x, sp.stats.norm.pdf(x=x, loc=5, scale=2))
# 叠加直方图
plt.hist(sp.stats.norm.rvs(loc=5, scale=2, size=200), bins=50, normed=True, color='red', alpha=0.5)
plt.show()
# 绘制直方图
plt.hist(np.random.randn(100), bins=10, color='b', alpha=0.3)
plt.show()
# 绘制散点图
x = np.arange(50)
y = x + 5 * np.random.rand(50)
plt.scatter(x, y)
# 柱状图
x = np.arange(5)
y1, y2 = np.random.randint(1, 25, size=(2, 5))
width = 0.25
ax = plt.subplot(1,1,1)
ax.bar(x, y1, width, color='r')
ax.bar(x+width, y2, width, color='g')
ax.set_xticks(x+width)
ax.set_xticklabels(['a', 'b', 'c', 'd', 'e'])
plt.show()
# 矩阵绘图
m = np.random.rand(10,10)
print(m)
plt.imshow(m, interpolation='nearest', cmap=plt.cm.ocean)
plt.colorbar()
plt.show()
[[0.79814995 0.56342478 0.67340309 0.62603568 0.70374719 0.40005903
0.21184788 0.43244836 0.33476717 0.39992119]
[0.82051256 0.42323049 0.06573465 0.88999495 0.94463853 0.87859439
0.8480226 0.76946034 0.36693152 0.10212377]
[0.75930935 0.85389957 0.47050897 0.11300222 0.23416857 0.67240653
0.45693649 0.96738866 0.67705984 0.98464553]
[0.08162357 0.46595504 0.4734191 0.13814381 0.80318643 0.20167047
0.07940252 0.53947302 0.5777127 0.66602281]
[0.75702055 0.06502051 0.23838219 0.21242054 0.4894896 0.61002716
0.06218281 0.0472045 0.09358848 0.89082615]
[0.08053855 0.35582057 0.0483706 0.74602725 0.41128123 0.89464477
0.37559671 0.14125914 0.26382102 0.21195365]
[0.50994476 0.61121834 0.108438 0.00176988 0.39010443 0.56797908
0.31104779 0.52166625 0.78964412 0.27125035]
[0.62407878 0.25732666 0.72459088 0.41755049 0.95284203 0.47987656
0.3486254 0.20769224 0.99585955 0.36937064]
[0.45059416 0.82322885 0.27708491 0.52805037 0.55115125 0.52136563
0.84830911 0.91107943 0.89929757 0.33575223]
[0.77644699 0.87825654 0.19390335 0.06371465 0.84045723 0.15609128
0.09066893 0.89173126 0.51011906 0.7510989 ]]
fig, subplot_arr = plt.subplots(2,2)
subplot_arr[0,0].hist(np.random.randn(100), bins=10, color='b', alpha=0.3)
plt.show()
#颜色,标签,线型
fig, axes = plt.subplots(2)
axes[0].plot(np.random.randint(0, 100, 50), 'ro--')
# 等价
axes[1].plot(np.random.randint(0, 100, 50), color='r', linestyle='dashed', marker='o')
#刻度、标签、图例
fig, ax = plt.subplots(1)
ax.plot(np.random.randn(1000).cumsum(), label='line0')
# 设置刻度
#plt.xlim([0,500])
ax.set_xlim([0, 800])
# 设置显示的刻度
#plt.xticks([0,500])
ax.set_xticks(range(0,500,100))
# 设置刻度标签
ax.set_yticklabels(['Jan', 'Feb', 'Mar'])
# 设置坐标轴标签
ax.set_xlabel('Number')
ax.set_ylabel('Month')
# 设置标题
ax.set_title('Example')
# 图例
ax.plot(np.random.randn(1000).cumsum(), label='line1')
ax.plot(np.random.randn(1000).cumsum(), label='line2')
ax.legend()
ax.legend(loc='best')
#plt.legend()
Seaborn
Python中的一个制图工具库,可以制作出吸引人的、信息量大的统计图,在matplotlib上构建,支持numpy和pandas的数据结构可视化,甚至是scipy和statsmodels 的统计模型可视化。
安装 Seaborn
pip install seaborn
import numpy as np
import pandas as pd
from scipy import stats
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
# 数据集分布可视化
# 单变量分布
x1 = np.random.normal(size=1000)
sns.distplot(x1);
x2 = np.random.randint(0, 100, 500)
sns.distplot(x2);
# 直方图
sns.distplot(x1, bins=20, kde=False, rug=True)
# 核密度估计
sns.distplot(x2, hist=False, rug=True)
sns.kdeplot(x2, shade=True)
sns.rugplot(x2)
# 拟合参数分布
sns.distplot(x1, kde=False, fit=stats.gamma)
# 双变量分布
df_obj1 = pd.DataFrame({"x": np.random.randn(500),
"y": np.random.randn(500)})
df_obj2 = pd.DataFrame({"x": np.random.randn(500),
"y": np.random.randint(0, 100, 500)})
# 散布图
sns.jointplot(x="x", y="y", data=df_obj1)
# 二维直方图
sns.jointplot(x="x", y="y", data=df_obj1, kind="hex");
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tsw3R3dZ-1581690546446)(C:\Users\86133\Desktop\Python数据分析第四期图片\18.png)]
Bokeh
专门针对web浏览器的交互式,可视化Python绘图库。
可以做出像 D.js简洁漂亮的交互可视化效果。
安装
pip install bokeh
详见
http://bokeh.pydata.org/en/latest/docs/reference/plotting.html