Python数据分析基础之图与图表(2)

  上一节主要学习了使用matplotlib模块绘制统计图。这一节主要学习使用pandas, seaborn等模块绘制统计图。

使用pandas绘制统计图

  pandas模块提供了一个可以作用于序列和数据框的函数plot(),简化了基于序列和数据框中的数据创建图表的过程。plot()函数默认创建折线图,我们可以通过设置参数kind来创建其他类型的图表。
  除了使用matplotlib模块创建标准统计图,还可以使用pandas模块可以创建其他类型的统计图,例如六边箱图(hexagonal bin plot)、矩阵散点图、密度图、Andrews曲线图、平行坐标图、延迟图、自相关图和自助抽样图。如果要向统计图中添加第二y轴、误差棒和数据表,使用pandas模块可以很直接地实现。
  下面的代码是应用pandas模块创建一对条形图和箱线图的实例。

#!/usr/bin/env python3

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

plt.style.use('ggplot')

# 准备数据
fig, axes = plt.subplots(nrows=1, ncols=2)      # 创建两个并排放置的子图
ax1, ax2 = axes.ravel()                         # 将两个子图分别赋给变量ax1和ax2
data_frame = pd.DataFrame(np.random.rand(5, 3),
                          index=['Customer 1', 'Customer 2', 'Customer 3', 'Customer 4', 'Customer 5'],
                          columns=pd.Index(['Metric 1', 'Metric 2', 'Metric 3'], name='Metrics'))

# 绘制条形图
data_frame.plot(kind='bar', ax=ax1, alpha=0.75, title='Bar Plot')       # 创建条形图
plt.setp(ax1.get_xticklabels(), rotation=45, fontsize=10)
plt.setp(ax1.get_yticklabels(), rotation=0, fontsize=10)
ax1.set_xlabel('Customer')
ax1.set_ylabel('Value')
ax1.xaxis.set_ticks_position('bottom')
ax1.yaxis.set_ticks_position('left')

# 绘制箱线图
colors = dict(boxes='DarkBlue', whiskers='Gray', medians='Red', caps='Black')       # 为箱线图创建颜色字典
data_frame.plot(kind='box', color=colors, sym='r.', ax=ax2, title='Box Plot')       # 创建箱线图
plt.setp(ax2.get_xticklabels(), rotation=45, fontsize=10)
plt.setp(ax2.get_yticklabels(), rotation=0, fontsize=10)
ax2.set_xlabel('Metric')
ax2.set_ylabel('Value')
ax1.xaxis.set_ticks_position('bottom')
ax1.yaxis.set_ticks_position('left')

# 保存图片
plt.savefig('pandas_plots.png', dpi=400, bbox_inches='tight')
plt.show()

  运行结果如下图所示。
在这里插入图片描述

使用seaborn绘制统计图

  seaborn模块简化了在Python中创建信息丰富的统计图表的过程。它可以创建标准统计图,包括直方图、密度图、条形图、箱线图和散点图。它可以对成对变量之间的相关性、线性与非线性回归模型以及统计估计的不确定性进行可视化。它可以用来在评估变量时检查变量之间的关系,并可以建立统计图矩阵来显示复杂的关系。它有内置的主题和调色板,可以用来制作精美的图标。最后,因为它是建立在matplotlib上的,所以我们可以使用matplotlib的命令来对图形进行更深入的定制。
  下面的代码演示了如何使用seaborn创建各种统计图。

#!/usr/bin/env python3

import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

sns.set(color_codes=True)

# 直方图
x = np.random.normal(size=100)
sns.distplot(x, bins=20, kde=False, rug=True, label="Histogram w/o Density")
sns.utils.axlabel("Value", "Frequency")
plt.title("Histogram of a Random Sample from a Normal Distribution")
plt.legend()
plt.savefig("seaborn_plot_1.png", dpi=400, bbox_inches='tight')
plt.show()

# 带有回归直线的散点图与单变量直方图
mean, cov = [5, 10], [(1, .5), (.5, 1)]
data = np.random.multivariate_normal(mean, cov, 200)
data_frame = pd.DataFrame(data, columns=["x", "y"])
sns.jointplot(x="x", y="y", data=data_frame, kind="reg").set_axis_labels("x", "y")
plt.suptitle("Joint Plot of Two Variables with Bivariate and Univariate Graphs")
plt.savefig("seaborn_plot_2.png", dpi=400, bbox_inches='tight')
plt.show()

# 成对变量之间的散点图与单变量直方图
iris = sns.load_dataset("iris")
sns.pairplot(iris)
plt.savefig("seaborn_plot_3.png", dpi=400, bbox_inches='tight')
plt.show()

# 按照某几个变量生成的箱线图
tips = sns.load_dataset("tips")
sns.catplot(x="time", y="total_bill", hue="smoker", col="day", data=tips, kind="box", height=4, aspect=.5)
plt.savefig("seaborn_plot_4.png", dpi=400, bbox_inches='tight')
plt.show()

# 带有bootstrap置信区间的线性回归模型
sns.lmplot(x="total_bill", y="tip", data=tips)
plt.savefig("seaborn_plot_5.png", dpi=400, bbox_inches='tight')
plt.show()

# 带有bootstrap置信区间的逻辑斯蒂回归模型
tips["big_tip"] = (tips.tip / tips.total_bill) > .15
sns.lmplot(x="total_bill", y="big_tip", data=tips, logistic=True, y_jitter=.03).set_axis_labels("Total Bill", "Big Tip")
plt.title("Logistic Regression of Big Tip vs.Total Bill")
plt.savefig("seaborn_plot_6.png", dpi=400, bbox_inches='tight')
plt.show()

  运行结果如下图所示。
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值