简介

Matplotlib,Python 的绘图神器!它就像是那个总是坐在角落、安静但又十分靠谱的朋友,虽然表面看起来不那么耀眼,但每当你需要它时,它总能以绝对的精确度和可靠性给你呈现出各种复杂的数据图表。

他功能强大和语法的简洁绝对会让你爱不释手

准备工作

所有好玩的python包都开始于一段简单的代码: pip

pip install matplotlib

当然你还是需要一些包来配合,比如基础的python等等,当然还有jupyter,我个人比较喜欢,其他方式也可以

基础语法

import matplotlib.pyplot as plt

# 创建一个简单的折线图
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

plt.plot(x, y)  # 哇,没错,光这一行就能搞定!
plt.show()      # 图形就显示出来了,简洁、优雅

几乎没有复杂的配置,就能生成一幅完美的图,简直是懒人的福音。

ok,接下来,我们了解更详细的绘图参数

x = [1, 2, 3, 4, 5]
y = [0.5, 1, 2, 2.5, 11]

plt.figure(figsize=(6, 3)) #画面是6:3
plt.xlim(0,6) #x轴坐标轴
plt.ylim((0, 3))#y轴坐标轴
plt.xlabel('this is x')#x轴标签
plt.ylabel('this is y')#y轴标签
plt.plot(x,y) #绘制
plt.show()

ok,现在我们已经能够画出最基本的折线图,并且通过参数,让信息有了比较全面的展示,但是是不是少了点什么?

没错,没有label!!!,接下来我们来设置label。

x = [1, 2, 3, 4, 5]
y = [0.5, 1, 2, 2.5, 11]

a = [1, 2, 3, 4, 5]
b = [0.5, 1, 1.5, 2, 2.5]

plt.figure(figsize=(6, 3)) #画面是6:3
plt.xlim(0,6) #x轴坐标轴
plt.ylim((0, 3))#y轴坐标轴
plt.xlabel('这里是x轴')#x轴标签
plt.ylabel('这里是Y轴')#y轴标签
plt.plot(x,y, label="测试折线1") #绘制,label就是名字
plt.plot(a,b, label="测试折线2")
plt.legend(loc='best')#图列位置,可选best,center等
plt.show()

好!现在我们已经凑齐了一个基本的折线图的所有要素了,是不是简单的很?

进阶玩法

对于已经基本了解了如何绘图的你来说,这些线条是不是太单调了,没错,线条的样式也可以自定义,还是在强大的plot方法里

x = [1, 2, 3, 4, 5]
y = [0.5, 1, 2, 2.5, 11]

a = [1, 2, 3, 4, 5]
b = [0.5, 1, 1.5, 2, 2.5]

plt.figure(figsize=(6, 3)) #画面是6:3
plt.xlim(0,6) #x轴坐标轴
plt.ylim((0, 3))#y轴坐标轴
plt.xlabel('这里是x轴')#x轴标签
plt.ylabel('这里是Y轴')#y轴标签
plt.plot(x,y, label="测试折线1", color='green', linestyle='--', linewidth=2) #绘制
plt.plot(a,b, label="测试折线2", color='red', linestyle='-', linewidth=2)
plt.legend(loc='best')#图列位置,可选best,center等
plt.show()

是不是看起来没有那么朴素了?当然,如果你想更加花里胡哨,就要了解到他的好朋友Seaborn

如果 Matplotlib 是那位精通基础绘图的朋友,那么 Seaborn 就是它的“高大上”朋友,专门做一些更美观、看起来更加精致的图表。如果你觉得 Matplotlib 画的图有点“平淡”,那么试试 Seaborn,让你的图表直接走向艺术画廊!

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

# 设置 Seaborn 主题,增强图表美观度
sns.set_theme(style="whitegrid", palette="muted", font_scale=1.2)

# 随机生成一些假数据
np.random.seed(42)

# 构造一个包含小费、账单和用餐人数的数据集
data = {
    'total_bill': np.random.uniform(10, 100, 100),  # 账单金额:10-100之间的随机数
    'tip': np.random.uniform(1, 20, 100),  # 小费:1-20之间的随机数
    'size': np.random.choice([1, 2, 3, 4, 5], 100),  # 用餐人数,随机选择1-5
    'day': np.random.choice(['Thur', 'Fri', 'Sat', 'Sun'], 100),  # 星期几
    'time': np.random.choice(['Lunch', 'Dinner'], 100)  # 午餐或晚餐
}

# 创建 DataFrame
df = pd.DataFrame(data)

# 使用 Seaborn 绘制一个散点图,表示账单金额和小费的关系
plt.figure(figsize=(10, 6))
sns.scatterplot(data=df, x="total_bill", y="tip", hue="time", style="size", palette="coolwarm", markers=["o", "s", "D", "^", "v"])

# 设置标题和标签
plt.title("Total Bill vs Tip (with Time and Size)", fontsize=18)
plt.xlabel("Total Bill ($)", fontsize=14)
plt.ylabel("Tip ($)", fontsize=14)

# 显示图形
plt.show()

# 绘制箱线图,显示不同日期的账单金额分布
plt.figure(figsize=(10, 6))
sns.boxplot(data=df, x="day", y="total_bill", palette="Set3")

# 设置标题
plt.title("Total Bill by Day", fontsize=18)
plt.xlabel("Day", fontsize=14)
plt.ylabel("Total Bill ($)", fontsize=14)

# 显示图形
plt.show()

# 绘制小提琴图,显示不同用餐时间的账单金额分布
plt.figure(figsize=(10, 6))
sns.violinplot(data=df, x="time", y="total_bill", palette="muted")

# 设置标题
plt.title("Total Bill by Time (Lunch vs Dinner)", fontsize=18)
plt.xlabel("Time", fontsize=14)
plt.ylabel("Total Bill ($)", fontsize=14)

# 显示图形
plt.show()

# 绘制线图,显示用餐人数与小费的关系
plt.figure(figsize=(10, 6))
sns.lineplot(data=df, x="size", y="tip", hue="time", marker="o", palette="viridis")

# 设置标题
plt.title("Tip vs Size of Group", fontsize=18)
plt.xlabel("Size of Group", fontsize=14)
plt.ylabel("Tip ($)", fontsize=14)

# 显示图形
plt.show()

怎么样,是不是感觉突然nb了起来?(本篇主要是针对matplotlib做基本的介绍和使用说明,不对seaborn做过多赘述)

总结

总之,Matplotlib 就是那种让你的数据从沉闷无趣到活力四射的魔法师,它将复杂的数据、图形和曲线用最简单的方式展现出来。无论你是研究生,数据分析师,还是喜欢在报表中做点小艺术的工程师,它都能满足你的需求。