点击上方 蓝字关注我吧!
Matplotlib是Python中最流行的绘图库之一,用于创建高质量的静态图形、图表和图片。它提供了广泛的功能和灵活性,使得用户能够以各种方式可视化数据。
Matplotlib库的特点如下:
(1)广泛的图形支持:Matplotlib支持的图形类型包括线图、柱状图、散点图、饼图、直方图等,能够满足各种数据可视化需求。
(2)灵活性:用户可以精确地控制图表的每个细节,包括图像大小、标签、轴、标题等,从而定制化图表以符合特定需求。
(3)跨平台:Matplotlib可以在多个操作系统上运行,并且与多个GUI工具包和后端(如Tkinter、Qt、GTK+、wxWidgets)兼容。
Seaborn是建立在Matplotlib基础之上的统计数据可视化库,它提供更高级的图形界面和更简洁的语法来绘制各种统计图表。
Seaborn库的特点如下。
(1)美观的默认主题和调色板:Seaborn提供了各种美观的默认样式和调色板,能够让用户快速创建具有吸引力的图形。
(2)统计数据可视化:Seaborn针对统计分析常见的数据可视化需求提供了高级的支持,例如多变量关系、分类数据的绘制等。
(3)简洁的API:Seaborn的API设计简洁清晰,使得用户能够更轻松地生成复杂的图形,并支持数据集中特定关系的探索。
安装matplotlib库的参考代码如下:
pip install matplotlib
安装seaborn库的参考代码如下:
pip install seaborn
使用泰坦尼克号数据来展示Excel的可视化功能,泰坦尼克号的部分数据情况如图所示。

场景描述:希望分析泰坦尼克号乘客的生存情况与各种因素的关系。具体来说,将包括以下3个方面。
(1)乘客生存率与性别的关系:分析男性和女性乘客的生存率差异。
(2)乘客生存率与舱位等级的关系:观察不同舱位等级乘客的生存情况。
(3)乘客生存率与年龄的关系:探索不同年龄段乘客的生存率。
先使用Pandas进行数据处理,再使用Seaborn进行可视化,具体代码如下:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.read_excel(r'E:\CODE\train.xlsx')
df['Age'].fillna(df['Age'].median, inplace=True) #数据清洗,填充缺失
# 可视化1:生存率与性别关系:
sns.barplot(x='Sex', y='Survived', data=df, errorbar=None)
plt.title('Survival Rate by Gender')
plt.xlabel('Gender')
plt.ylabel('Survival Rate')
plt.show()
# 可视化2:生存率与舱位等级关系:
sns.barplot(x='Pclass', y='Survived', data=df, errorbar=None)
plt.title('Survival Rate by PClass')
plt.xlabel('PClass')
plt.ylabel('Survival Rate')
plt.show()
# 可视化3:生存率与年龄关系:
# 创建年龄分组
bins = [0, 18, 30,50, 80]
labels = ['0-18', '19-30', '31-50', '51-80']
df['AgeGroup'] = pd.cut(df['Age'], bins=bins, labels=labels)
sns.barplot(x='AgeGroup', y='Survived', data=df, errorbar=None, order=labels)
plt.title('Survival Rate by Age Group')
plt.xlabel('Age Group')
plt.ylabel('Survival Rate')
plt.show()
运行以上代码,数据可视化结果如图所示:



通过这些可视化图表,可以初步了解泰坦尼克号乘客的生存情况,揭示性别、舱位等级和年龄对生存率的影响。这些分析有助于深入理解泰坦尼克号的生存模式,为进一步的数据分析和建模提供了基础。
如果要直接操作Excel单元格生成可视化图,推荐使用openpyxl。安装openpyxl的参考代码如下:
pip install openpyxl
通过操作Excel中的数据并生成聚合柱状图与散点图,以演示openpyxl库的使用。具体流程如下:
(1)生成聚合条形图:初始化图表并设置属性,先导入openpyxl库的相关模块,加载泰坦尼克号数据的Excel文件。
创建一个BarChart对象作为聚合条形图,设置图表类型为柱状图(type = "col"),样式编号为10,标题为“Survival by Class”,y轴标题为“Number of People”,x轴标题为“Class”。参考代码如下:
import openpyxl
from openpyxl.chart import BarChart, ScatterChart, Reference, Series
from openpyxl.utils import get_column_letter
# 打开excel文件
file_path = r'E:\CODE\train.xlsx'
wb = openpyxl.load_workbook(file_path)
ws = wb.active
# 生成聚合条形图:按舱位统计生还和未生还人数
bar_chart = BarChart()
bar_chart.type = "col"
bar_chart.style = 10
bar_chart.title = "按舱位统计生还和未生还人数"
bar_chart.y_axis.title = "人数"
bar_chart.x_axis.title = "舱位"
(2)数据整理与统计:
创建一个新工作表“Summary”,添加标题行["Class","Survived","Count"]。
遍历原始工作表数据,统计不同舱位(C列)和生还状态(B列)组合的人数,将统计结果写入新工作表。参考代码如下:
# 创建一个新表来整理数据
summarry_ws = wb.create_sheet(title="Summarry")
# 添加标题行
summarry_ws.append(["Class", "Survived", "Count"])
# 遍历原表数据,按舱位统计生还和未生还人数
data = {}
for row in ws.iter_rows(min_row=2, max_row=ws.max_row, min_col=2, max_col=3, values_only=True):
survived, pclass = row
key = (pclass, survived)
if key notin data:
data[key] = 0
data[key] += 1
# 将统计结果写入新表
for (pclass, survived), count in data.items():
summarry_ws.append([pclass, "Survived"if survived == 1else"Not Surrived", count])
(3)数据排序与重新写入:
读取新工作表数据(跳过表头),按舱位和生还状态排序,清空原数据后重新写入排序后的数据。参考代码如下:
# 将数据读取出来进行排序,min_row=2跳过表头
data_list = []
for row in summarry_ws.iter_rows(min_row=2, values_only=True):
data_list.append(row)
# 对数据进行排序
data_list.sort(key=lambda x: {x[0], x[1]})
# 将排序后的数据写入新表
summarry_ws.delete_rows(2, summarry_ws.max_row)
for row in data_list:
summarry_ws.append(row)
(4)设置图表数据引用与属性并插入图表:
创建图表的数据引用,数据值引用第三列,数据类别引用第一、二列。添加数据到图表,并设置类别,同时设置图表形状为4,分组方式为堆叠(grouping = "stacked")。
将生成的聚合条形图插入原始工作表的“M1”单元格位置。参考代码如下:
data = Reference(summarry_ws, min_col=3, max_col=3, min_row=1, max_row=summarry_ws.max_row)
categories = Reference(summarry_ws, min_col=1, max_col=2, min_row=2, max_row=summarry_ws.max_row)
bar_chart.add_data(data, titles_from_data=True)
bar_chart.set_categories(categories)
bar_chart.shape = 4
bar_chart.grouping = "stacked"
# 将聚合条形图插入原始工作表中
ws.add_chart(bar_chart, "M1")
(5)生成散点图:
初始化图表与设置属性,创建一个ScatterChart对象作为散点图,设置标题为'Fare vs Age',样式编号为13,x轴标题为'Age',y轴标题为'Fare',并设置只显示点(scatterStyle ='marker')。参考代码如下:
scatter_chart = ScatterChart()
scatter_chart.title = "Fare vs Age"
scatter_chart.style = 13
scatter_chart.x_axis.title = "Age"
scatter_chart.y_axis.title = "Fare"
# 设置为只显示点
scatter_chart.scatterStyle = 'marker'
(6)设置图表数据源并插入图表:
确定年龄数据在F列(列索引为6)、票价数据在J列(列索引为10),从第2行到最大行。
创建数据引用,将年龄设为x轴值,票价设为y轴值,创建图表序列,设置标记样式为圆形,且无线条。
将散点图插入工作表的“M30”单元格位置。参考代码如下:
xvalues = Reference(ws, min_col=6, min_row=2, max_row=ws.max_row)
yvalues = Reference(ws, min_col=10, min_row=2, max_row=ws.max_row)
series = Series(yvalues, xvalues, title="Fare vs Age")
series.marker.symbol = "circle"
series.graphicalProperties.line.noFill = True
scatter_chart.series.append(series)
ws.add_chart(scatter_chart, "M30")
(7)保存工作簿:将包含两个图表的工作簿保存为“泰坦尼克号数据可视化.xlsx”文档。
参考代码如下:
output_file = r'E:\CODE\train.xlsx'
wb.save(output_file)
运行代码,生成Excel文件,将该文件打开,可视化图已生成,如图所示:

下期更新: 工作簿的拆分与合并:信息处理效率高