Python矩阵计算常用操作总结

Python矩阵计算常用操作总结

1. 导入 NumPy 库

1
2
3
4
5
6
7
8
9
10
11
12
import numpy as np
````

📌 NumPy 是 Python 中处理矩阵和数值计算的标准库。必须先导入。

---

## 2. 创建矩阵

```python
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

📌 用 np.array 创建二维数组(即矩阵)。


3. 矩阵加法与减法

1
2
C = A + B
D = A - B

📌 对应位置元素相加/相减,两个矩阵必须大小一致。


4. 矩阵乘法

4.1 对应元素相乘

1
E = A * B

📌 逐元素相乘(Hadamard 积)。

4.2 标准矩阵乘法

1
2
3
F = A @ B
# 或者:
F = np.dot(A, B)

📌 线性代数中的矩阵乘法,要求 A 的列数等于 B 的行数。


5. 矩阵转置

1
At = A.T

📌 将行列位置互换。


6. 计算逆矩阵

1
A_inv = np.linalg.inv(A)

📌 如果矩阵可逆(即行列式不为 0),可以用 inv() 计算其逆。


7. 求行列式

1
det = np.linalg.det(A)

📌 行列式为一个标量,反映矩阵的可逆性。为 0 则不可逆。


8. 特征值与特征向量

1
eigenvalues, eigenvectors = np.linalg.eig(A)

📌 特征值表示变换的伸缩比,特征向量表示方向不变的向量。


9. 解线性方程组 Ax = b

1
2
b = np.array([1, 2])
x = np.linalg.solve(A, b)

📌 solve 用于求解线性方程组,通常比手动求逆更稳定。


好看的颜色及其 Hex 代码合集

常用颜色及对应 Hex 码

以下是一些视觉舒适、常见又易搭配的颜色及其对应的 Hex 代码,可直接用于前端开发、图表绘制或配色设计。

颜色名称 示例 Hex 代码 用法建议
天空蓝 Sky Blue #87CEFA 清新、柔和,适合作为背景色
湖水绿 Aqua #00FFFF 亮眼,常用于高亮区域
薄荷绿 Mint #98FF98 清爽自然,适合清新的界面风格
珊瑚橙 Coral #FF7F50 温暖活力,适合作为按钮或点缀色
蜜桃粉 Peach #FFDAB9 柔和甜美,适用于温柔风格设计
樱花粉 Sakura #FFB7C5 甜美浪漫,适合节日或女性主题
薰衣草紫 Lavender #E6E6FA 典雅宁静,适用于背景配色
莓果紫 Berry #990F4B 浓郁高级,用作主色调效果出色
深靛蓝 Indigo #4B0082 稳重神秘,适合夜间模式
石墨灰 Graphite #4B4B4B 中性简约,常用于文字或边框色
暖灰 Warm Gray #A89F91 低饱和度,自然亲和感
鼠尾草绿 Sage #9DC183 自然柔和,适合环保或健康主题
浅米色 Beige #F5F5DC 中性背景色,适合阅读页面
奶油白 Cream #FFFDD0 柔亮温暖,适合轻松场景
果绿 Apple Green #8DB600 明亮自然,用于自然类图表
枫叶红 Maple Red #D94F4F 热烈醒目,适合强调色
深海蓝 Deep Sea #003366 稳重专业,常见于商务网站
香槟金 Champagne #F7E7CE 高级感色调,用于品牌主题
奶茶棕 Milk Tea #DDBB99 温柔中性,流行于 UI 设计

Microsoft Office 常见配色

以下颜色广泛用于 Office Word、PowerPoint 和 Excel 等模板主题中,适合做演示文稿、图表、报告等:

颜色名称 示例 Hex 代码 用法建议
Office 蓝 Blue #4472C4 经典商务蓝,适合主色和标题色
Office 橙 Orange #ED7D31 强烈对比,适合作为辅助或强调色
Office 灰 Gray #A5A5A5 中性色,适合用作背景或边框色
Office 绿 Green #70AD47 沉稳健康,用于成功或环保主题
Office 红 Red #C00000 强烈警示色,常用于错误或警告提示
Office 紫 Purple #7030A0 稍显庄重,适合正式内容背景
Office 青 Teal #00B0F0 明快现代,适合科技或金融主题

扩展配色合集(含视觉色块)

以下颜色适用于图表、界面、PPT 等多种使用场景,颜色名称为通俗描述,按色调分组。

色块 颜色名 Hex码 用途建议
#60ACFC
靛蓝 #60ACFC 商务冷静、科技风
#32D3EB
天蓝 #32D3EB 清爽醒目
#5BC49F
薄荷绿 #5BC49F 轻快自然
#FEB64D
橙黄 #FEB64D 明亮活泼
#FF7C7C
桃红 #FF7C7C 青春甜美
#9287E7
淡紫 #9287E7 梦幻柔和
#FFDD55
浅黄 #FFDD55 明亮背景
#FFAA85
浅橙 #FFAA85 温暖亲切
#A8E6CF
浅绿 #A8E6CF 健康舒适
#DCE775
柠檬黄 #DCE775 活力明快
#FF8A65
珊瑚橙 #FF8A65 情感激发
#9575CD
紫罗兰 #9575CD 浪漫优雅
#81C784
草绿色 #81C784 环保健康
#4DD0E1
青蓝 #4DD0E1 新颖现代
#BA68C8
浅紫 #BA68C8 温和高雅
#7986CB
灰蓝 #7986CB 冷静专业
#4FC3F7
宝石蓝 #4FC3F7 冷艳亮眼
#F06292
樱花粉 #F06292 温柔浪漫
#AED581
青柠绿 #AED581 活力自然
#FFD54F
金黄 #FFD54F 喜庆、节日
#FFAB91
桃橙 #FFAB91 柔美可亲
#FBC02D
金黄 #FBC02D 醒目高亮
#8D6E63
栗色 #8D6E63 复古气质
#BDBDBD
灰色 #BDBDBD 中性稳重
#FFCDD2
淡粉 #FFCDD2 柔和清淡
#C5E1A5
浅绿 #C5E1A5 清新柔和
#80DEEA
浅青 #80DEEA 冷色调背景
#CE93D8
薰衣草紫 #CE93D8 甜美梦幻
#F48FB1
粉红 #F48FB1 活泼少女风
#B39DDB
丁香紫 #B39DDB 稳重柔美
#FF7043
鲑鱼橙 #FF7043 醒目活泼
#D4E157
柠檬绿 #D4E157 亮眼鲜活
#FFEB3B
向日葵黄 #FFEB3B 明亮热情
#E57373
玫瑰红 #E57373 情感表达
#FFF176
浅黄 #FFF176 柔和亮色
#FFB74D
杏橙 #FFB74D 清甜温暖
#A1887F
浅褐 #A1887F 古典感、木质风

使用建议

  • 背景色推荐使用浅色如 #E6E6FA#F5F5DC
  • 按钮和强调色可使用 #FF7F50#D94F4F#00FFFF
  • 文字和边框色适合 #4B4B4B#003366
  • 自然风格页面可以搭配使用 #9DC183#8DB600#A89F91

CSS 卡片样式及交互效果

CSS 卡片样式及交互效果

在前端开发中,卡片式布局广泛用于展示信息。通过简单的 CSS 样式,可以为卡片添加丰富的视觉效果和交互效果,提升用户体验。以下是一个结合了背景色、阴影、边框动画和悬停效果的卡片样式实现。

基本卡片样式

首先,我们定义了卡片的基础样式,包括背景色、内边距、圆角、阴影和边框:

1
2
3
4
5
6
7
8
9
.card {
background-color: #f5e6d3; /* 背景颜色 */
padding: 20px 25px; /* 内边距 */
border-radius: 15px; /* 圆角 */
margin-bottom: 20px; /* 底部外边距 */
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15); /* 初始阴影 */
border: 1px solid #e6d5c3; /* 边框 */
transition: all 0.3s ease, border-color 0.3s ease, border-width 0.3s ease; /* 过渡效果 */
}

悬停效果

通过悬停时触发的 :hover 伪类,卡片的外观会发生变化。包括上移效果、增强的阴影、边框颜色和宽度的变化,以及背景色的切换。

1
2
3
4
5
6
7
.card:hover {
transform: translateY(-3px); /* 卡片上移 */
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.25); /* 增强阴影 */
border-color: #d4c0a9; /* 边框颜色变化 */
border-width: 2px; /* 边框宽度变化 */
background-color: #f8efe3; /* 背景颜色变化 */
}

样式说明

  1. 背景颜色和阴影
    初始状态下,卡片有轻微的阴影,营造出卡片浮动的感觉。悬停时,阴影增大,增强卡片的立体感。

  2. 边框动画
    卡片在悬停时,边框颜色变得更加突出,并且边框宽度有所增加,增加了交互感。

  3. 卡片上移效果
    使用 transform: translateY(-3px) 实现卡片的轻微上移,进一步提升悬停效果的层次感。

  4. 过渡效果
    所有这些样式的变化都伴随着平滑的过渡,使得卡片的互动效果更加自然。

总结

通过简单的 CSS,我们就能为卡片组件添加各种交互效果,提升用户体验。根据具体需求,开发者可以自由调整阴影、边框、背景等属性的变化,创建出更加丰富和吸引人的界面。

入门RAG(检索增强生成)

入门 RAG(检索增强生成)可以按照以下步骤进行:

1. 理解 RAG 的基本概念

  • RAG 是结合 检索(Retrieval)生成(Generation) 的方法,提升大语言模型的准确性和知识覆盖度。
  • 其核心思想是:先从外部知识库中检索相关信息,再将检索结果与输入结合,最后用生成式模型回答问题。

2. 学习 RAG 的关键组件

  • 检索器(Retriever):负责从数据库、向量存储或文档集中找到最相关的信息。(常见工具:FAISS、ChromaDB)
  • 生成模型(Generator):利用检索到的信息生成回答。(常见模型:LLaMA、GPT、T5 等)
  • 知识存储(Knowledge Base):存放外部数据,可以是向量数据库(如 Pinecone、Weaviate)或传统数据库(如 PostgreSQL)。

3. 搭建基础 RAG 流程

可以使用 LangChainLlamaIndex 这类框架快速上手:

  1. 数据预处理:清理文本数据,并转换成向量格式。
  2. 向量存储:使用 FAISS 或 Pinecone 存储数据。
  3. 检索实现:基于相似度搜索获取相关内容。
  4. 生成回答:结合检索信息,调用 LLM 生成答案。

4. 实践 RAG 项目

  • 简单实验:用 OpenAI + FAISS 实现基础 RAG。
  • 强化检索能力:尝试使用更好的嵌入模型(如 BGE、Cohere Embed)。
  • 应用优化:加入 Rerank、混合搜索(BM25 + 向量搜索)等。
  • 构建自己的知识库:从 PDF、网页、数据库导入数据,实现企业级 RAG。

5. 进阶探索

  • 深入 LangChain / LlamaIndex,学习更高级的 RAG 管道优化。
  • 优化检索策略,如 Dense Retrieval + Sparse Retrieval 结合。
  • 高效推理,用 LoRA、量化技术降低计算成本。
  • 增强生成稳定性,如 CoT(思维链)、RAG-fusion 等方法。

如果你想快速上手,我建议先用 LangChain + FAISS + OpenAI API 跑一个最小可行的 RAG,然后再逐步优化。你对哪个部分更感兴趣?


FastAPI高阶用法

FastAPI 是一个现代、高性能的 Python Web 框架,基于 Starlette 和 Pydantic,特别适合构建 RESTful API。以下是一些 FastAPI 的高阶用法,帮助你充分发挥其潜力:

1. 依赖注入 (Dependency Injection)

FastAPI 提供了强大的依赖注入系统,可以在路径操作函数中复用代码、管理资源或执行初始化操作。

1
2
3
4
5
6
7
8
9
10
11
12
from fastapi import Depends, FastAPI

app = FastAPI()

# 定义一个依赖
async def common_parameters(q: str | None = None, skip: int = 0, limit: int = 10):
return {"q": q, "skip": skip, "limit": limit}

# 在路径操作中使用依赖
@app.get("/items/")
async def read_items(commons: dict = Depends(common_parameters)):
return {"message": "Hello Items!", "params": commons}
  • 优点: 可以将公共逻辑(如认证、数据库连接)提取到依赖中,保持代码 DRY(Don’t Repeat Yourself)。
  • 进阶用法: 支持嵌套依赖、全局依赖(通过 app.dependencies)。

2. 自定义响应模型与动态校验

通过 Pydantic 模型,你可以定义复杂的输入输出校验逻辑,并动态调整返回内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from pydantic import BaseModel, validator
from fastapi import FastAPI

app = FastAPI()

class Item(BaseModel):
name: str
price: float

@validator("price")
def price_must_be_positive(cls, value):
if value <= 0:
raise ValueError("Price must be positive")
return value

@app.post("/items/", response_model=Item)
async def create_item(item: Item):
return item
  • 高阶技巧: 使用 response_model_exclude_unset=True 排除未设置的字段,或者用 Union 类型支持多种返回模型。

3. 异步数据库操作

FastAPI 支持异步编程,结合 ORM(如 SQLAlchemy 的异步支持或 Tortoise ORM)可以显著提升性能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from fastapi import FastAPI
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
from sqlalchemy.orm import sessionmaker

app = FastAPI()

engine = create_async_engine("sqlite+aiosqlite:///example.db")
AsyncSessionLocal = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)

async def get_db():
async with AsyncSessionLocal() as session:
yield session

@app.get("/data/")
async def read_data(db: AsyncSession = Depends(get_db)):
# 异步查询数据库
result = await db.execute("SELECT * FROM some_table")
return result.fetchall()
  • 注意: 确保数据库驱动支持异步(如 aiosqliteasyncpg)。

4. 中间件 (Middleware)

FastAPI 支持自定义中间件,用于处理请求和响应的全局逻辑,例如日志、CORS 或认证。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
import time

app = FastAPI()

# 自定义中间件
@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
start_time = time.time()
response = await call_next(request)
process_time = time.time() - start_time
response.headers["X-Process-Time"] = str(process_time)
return response

# 添加 CORS 中间件
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
  • 用途: 日志记录、请求修改、性能监控等。

5. WebSocket 支持

FastAPI 支持 WebSocket,适合实时应用场景。

1
2
3
4
5
6
7
8
9
10
from fastapi import FastAPI, WebSocket

app = FastAPI()

@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
while True:
data = await websocket.receive_text()
await websocket.send_text(f"Message received: {data}")
  • 高阶用法: 结合依赖注入管理 WebSocket 连接状态,或实现广播功能。

6. 背景任务 (Background Tasks)

对于耗时操作(如发送邮件、处理文件),可以使用背景任务异步执行。

1
2
3
4
5
6
7
8
9
10
11
12
from fastapi import BackgroundTasks, FastAPI

app = FastAPI()

def write_log(message: str):
with open("log.txt", "a") as f:
f.write(f"{message}\n")

@app.post("/send-notification/")
async def send_notification(email: str, background_tasks: BackgroundTasks):
background_tasks.add_task(write_log, f"Notification sent to {email}")
return {"message": "Notification queued"}
  • 注意: 背景任务不会阻塞响应,但需要确保任务本身是线程安全的。

7. 自定义异常处理

FastAPI 允许你定义全局异常处理器,统一处理特定类型的错误。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from fastapi import FastAPI, HTTPException
from fastapi.exceptions import RequestValidationError
from fastapi.responses import JSONResponse

app = FastAPI()

@app.exception_handler(RequestValidationError)
async def validation_exception_handler(request, exc):
return JSONResponse(
status_code=400,
content={"message": "Validation error", "details": exc.errors()},
)

@app.get("/items/{item_id}")
async def read_item(item_id: int):
if item_id == 0:
raise HTTPException(status_code=404, detail="Item not found")
return {"item_id": item_id}
  • 进阶: 可以为特定异常类(如数据库错误)定义独立的处理器。

8. OpenAPI 扩展

FastAPI 自动生成 OpenAPI 文档,你可以通过 tagsresponses 等参数增强文档。

1
2
3
4
5
6
7
from fastapi import FastAPI

app = FastAPI()

@app.get("/items/", tags=["items"], summary="Get all items", response_description="List of items")
async def read_items():
return [{"id": 1, "name": "Foo"}]
  • 高阶技巧: 使用 openapi_extra 参数自定义 OpenAPI Schema,或集成外部工具(如 ReDoc)优化文档展示。

HTML 段落格式设置大全

HTML 段落格式设置大全

1. 基本段落标签

在 HTML 中,段落使用 <p> 标签定义。例如:

1
<p>这是一个普通的段落。</p>

2. 文本对齐方式

使用 text-align 属性可以设置文本的对齐方式:

1
2
3
4
<p style="text-align: left;">左对齐</p>
<p style="text-align: center;">居中对齐</p>
<p style="text-align: right;">右对齐</p>
<p style="text-align: justify;">两端对齐</p>

3. 段落间距调整

使用 marginpadding 控制段落间距:

1
2
<p style="margin-bottom: 20px;">段落之间的外边距(底部 20px)</p>
<p style="padding: 10px;">段落的内边距(四周 10px)</p>

4. 首行缩进

使用 text-indent 设置首行缩进:

1
<p style="text-indent: 2em;">这个段落的首行缩进 2 个字符。</p>

5. 文本样式调整

可以通过 CSS 修改字体大小、加粗、斜体等效果:

1
2
3
<p style="font-size: 18px; font-weight: bold; font-style: italic;">
加粗、斜体、调整字体大小
</p>

6. 改变文本颜色和背景颜色

1
2
<p style="color: red;">红色文本</p>
<p style="background-color: yellow;">黄色背景的文本</p>

7. 添加边框

1
2
3
<p style="border: 1px solid black; padding: 10px;">
这个段落有黑色边框和 10px 的内边距。
</p>

8. 超链接与文本强调

1
2
<p>访问 <a href="https://www.example.com">示例网站</a> 获取更多信息。</p>
<p><strong>加粗文本(表示重要性)</strong><em>斜体文本(表示强调)</em></p>

9. 换行符

使用 <br> 强制换行:

1
<p>这是第一行<br>这是第二行</p>

10. 多列布局的段落

1
2
3
<p style="column-count: 2; column-gap: 20px;">
这个段落会被自动分为两列,并且两列之间的间距为 20px。
</p>

11. 组合使用样式

1
2
3
4
5
<p>
<strong style="color: blue; background-color: lightgray; font-size: 20px;">
这是蓝色、加粗、20px 字体大小,并带有灰色背景的文本
</strong>
</p>

12. <b><strong> 的区别

  • <strong> 表示强调内容,具有语义化作用(SEO 友好)。
  • <b> 仅用于加粗文本,没有强调作用。

示例:

1
2
<p><strong>这个内容很重要!</strong></p>
<p><b>这个只是加粗文本。</b></p>

13. <i><em> 的区别

  • <em> 表示强调,语义化更强。
  • <i> 只是单纯斜体,不强调语义。

示例:

1
2
<p><em>这个内容需要强调</em></p>
<p><i>这个只是斜体</i></p>

14. 设置行高(line-height

调整段落的行间距:

1
2
<p style="line-height: 1.5;">这个段落的行高是 1.5 倍。</p>
<p style="line-height: 2;">这个段落的行高是 2 倍。</p>

15. 文本阴影(text-shadow

1
<p style="text-shadow: 2px 2px 5px gray;">带有阴影的文本</p>

16. 删除线(text-decoration

1
<p style="text-decoration: line-through;">带有删除线的文本</p>

17. 首字母放大(::first-letter 伪元素)

1
2
3
4
5
6
7
8
<style>
p::first-letter {
font-size: 30px;
font-weight: bold;
color: red;
}
</style>
<p>这是一个示例段落,首字母会被放大加粗。</p>

以上是 HTML 段落格式的常见设置,结合 CSS 可以灵活调整文本样式,使页面更加美观和易读。

Plotly 和 Dash 函数总结

Plotly 和 Dash 函数总结

Plotly Express

函数 描述 语法 示例
scatter 创建散点图 px.scatter(dataframe, x=x_column, y=y_column) px.scatter(df, x=age_array, y=income_array)
line 创建折线图 px.line(x=x_column, y=y_column, title='title') px.line(x=months_array, y=no_bicycle_sold_array)
bar 创建柱状图 px.bar(x=x_column, y=y_column, title='title') px.bar(x=grade_array, y=score_array, title='通过率')
sunburst 创建旭日图 px.sunburst(dataframe, path=[col1,col2..], values='column', title='title') px.sunburst(data, path=['Month', 'DestStateName'], values='Flights', title='航班分布层级')
histogram 创建直方图 px.histogram(x=x, title="title") px.histogram(x=heights_array, title="身高分布")
bubble 创建气泡图 px.scatter(dataframe, x=x, y=y, size=size, title="title") px.scatter(bub_data, x="City", y="Numberofcrimes", size="Numberofcrimes", hover_name="City", title='犯罪统计')
pie 创建饼图 px.pie(values=x, names=y, title="title") px.pie(values=exp_percent, names=house_holdcategories, title='家庭支出')

Plotly 图形对象

函数 描述 语法 示例
Scatter 创建散点图 go.Scatter(x=x, y=y, mode='markers') go.Scatter(x=age_array, y=income_array, mode='markers')
Scatter 创建折线图 go.Scatter(x=x, y=y, mode='lines') go.Scatter(x=months_array, y=no_bicycle_sold_array, mode='lines')
add_trace 向现有图形添加轨迹 fig.add_trace(trace_object) fig.add_trace(go.Scatter(x=months_array, y=no_bicycle_sold_array))
update_layout 更新图形的布局,如标题、轴标签 fig.update_layout(layout_object) fig.update_layout(title='自行车销售', xaxis_title='月份', yaxis_title='售出自行车数量')

Dash

组件 描述 语法 示例
dcc.Input 创建输入组件 dcc.Input(value='', type='text') dcc.Input(value='你好', type='text')
dcc.Graph 创建图形组件 dcc.Graph(figure=fig) dcc.Graph(figure=fig)
html.Div 创建 div 元素 html.Div(children=component_list) html.Div(children=[html.H1('你好 Dash'), html.P('欢迎使用 Dash')])
dcc.Dropdown 创建下拉组件 dcc.Dropdown(options=options_list, value=default_value) dcc.Dropdown(options=[{'label': '选项 1', 'value': '1'}, {'label': '选项 2', 'value': '2'}], value='1')

地图、华夫饼、词云和 Seaborn

以下是整理后的内容,方便查阅:


地图、华夫饼、词云和 Seaborn

1. Folium(地图)

功能 描述 语法 示例
地图 创建一个具有指定中心坐标和缩放级别的地图对象 folium.Map(location=[lat, lon], zoom_start=n) canada = folium.Map(location=[56.130, -106.35], zoom_start=4)
标记 向地图添加自定义图标、弹出窗口和图块的标记 folium.Marker(location=[lat, lon], popup='Popup', tiles='Stamen Toner').add_to(map) folium.Marker(location=[56.130, -106.35], tooltip='Marker', tiles='Stamen Toner').add_to(world_map)
圆形 向地图添加具有指定半径、颜色和填充不透明度的圆形 folium.features.CircleMarker(location=[lat, lon], radius=n, color='red', fill_opacity=n).add_to(map) folium.features.CircleMarker(location=[56.130, -106.35], radius=1000, color='red', fill_opacity=0.5).add_to(world_map)
分级图 基于 GeoJSON 文件和数据列创建分级图 folium.Choropleth(geo_data='path/to/geojson_file', data=df, columns=['region', 'value_column'], key_on='feature.properties.id', fill_color='YlGnBu', fill_opacity=0.7, line_opacity=0.2, legend_name='Legend').add_to(map) world_map.choropleth(geo_data=world_geo, data=df_can, columns=['Country', 'Total'], key_on='feature.properties.name', fill_color='YlOrRd', fill_opacity=0.7, line_opacity=0.2, legend_name='移民到加拿大')

2. PyWaffle(华夫饼图)

功能 描述 语法 示例
华夫饼 基于值和类别创建华夫饼图 plt.figure(FigureClass=Waffle, rows=n, columns=n, values=values) plt.figure(FigureClass=Waffle, rows=20, columns=30, values=df_dsn['Total'], cmap_name='tab20', legend={'labels': label, 'loc': 'lower left', 'bbox_to_anchor':(0,-0.1), 'ncol': 3})
图例 向华夫饼图添加图例 waffle_chart.legend(loc='upper left', bbox_to_anchor=(1, 1)) -
标题 向华夫饼图添加标题 waffle_chart.set_title('华夫饼图标题') -
标签 向华夫饼图添加标签 waffle_chart.set_labels(['标签 1', '标签 2', ...]) -

3. 词云(WordCloud)

功能 描述 语法 示例
词云 基于文本数据创建词云对象 wordcloud = WordCloud().generate(text_data) alice_wc = WordCloud(background_color='white', max_words=2000, mask=alice_mask, stopwords=stopwords) alice_wc.generate(alice_novel) plt.imshow(alice_wc, interpolation='bilinear')
生成 基于文本数据生成词云 wordcloud.generate(text_data) -
显示 使用 Matplotlib 显示词云 plt.imshow(wordcloud, interpolation='bilinear') -
选项 设置字体、颜色、掩膜和停用词 wordcloud = WordCloud(font_path='path/to/font_file', background_color='white', colormap='Blues', mask=mask_image, stopwords=stopwords).generate(text_data) -

4. Seaborn(数据可视化)

功能 描述 语法 示例
条形图 可视化分类变量与数值变量的关系 sns.barplot(x='x_variable', y='y_variable', data=dataframe) sns.barplot(x='Continent', y='Total', data=df_can1)
计数图 显示分类变量中每个类别的频率 sns.countplot(x='category', data=dataframe) sns.countplot(x='Continent', data=df_can)
回归图 带线性回归线的散点图 sns.regplot(x='x_variable', y='y_variable', data=dataframe) sns.regplot(x='year', y='total', data=df_tot)

使用 Python 进行数据可视化

使用 Python 进行数据可视化

使用 Pandas 进行 Matplotlib 绘图

图表类型 描述 Pandas 函数 示例
折线图 显示随时间变化的趋势和变化 DataFrame.plot.line()DataFrame.plot(kind='line') df.plot(x='year', y='sales', kind='line')
面积图 显示数据系列之间的关系,以填充区域呈现 DataFrame.plot.area()DataFrame.plot(kind='area') df.plot(kind='area')
直方图 显示数据在各个区间(箱)内的频数分布 Series.plot.hist()Series.plot(kind='hist', bins=n) s.plot(kind='hist', bins=10)
条形图 通过矩形条形显示数据 DataFrame.plot.bar()DataFrame.plot(kind='bar') df.plot(kind='bar')
饼图 以圆形分片显示数据比例 Series.plot.pie()DataFrame.plot.pie(y, labels) df.plot(x='Category', y='Percentage', kind='pie')
箱型图 展示数据的分布及关键统计指标 DataFrame.plot.box()DataFrame.plot(kind='box') df_can.plot(kind='box')
散点图 通过笛卡尔坐标系展示两个变量的关系 DataFrame.plot.scatter()DataFrame.plot(x, y, kind='scatter') df.plot(x='Height', y='Weight', kind='scatter')

直接使用 Matplotlib 进行绘图

绘图类型 描述 Matplotlib 函数 示例
折线图 显示趋势和随时间变化的情况 plt.plot() plt.plot(x, y, color='red', linewidth=2)
区域图 显示填充区域的变化趋势 plt.fill_between() plt.fill_between(x, y1, y2, color='blue', alpha=0.5)
直方图 显示数据的频数分布 plt.hist() plt.hist(data, bins=10, color='orange', edgecolor='black')
条形图 通过矩形条展示数据 plt.bar() plt.bar(x, height, color='green', width=0.5)
饼图 显示数据的比例或百分比 plt.pie() plt.pie(sizes, labels=labels, colors=colors, explode=explode)
箱型图 显示数据的分布及统计特征 plt.boxplot() plt.boxplot(data, notch=True)
散点图 通过点显示两个变量之间的关系 plt.scatter() plt.scatter(x, y, color='purple', marker='o', s=50)
子图 在一个图形中创建多个子图 plt.subplots() fig, axes = plt.subplots(nrows=2, ncols=2)
自定义 自定义绘图(标题、标签、图例、网格) plt.title() plt.xlabel() plt.ylabel() plt.legend() plt.grid() plt.title('标题') plt.xlabel('X 轴') plt.ylabel('Y 轴') plt.legend() plt.grid(True)

这样整理后,内容更清晰,查找更方便!🚀

Matplotlib 子图(Subplots)解析

Matplotlib 子图(Subplots)解析

子图(Subplots)可以帮助我们在 同一个画布(figure) 上绘制多个不同的图表,方便进行 数据对比展示多个视角 的数据。


1. 什么是 figuresubplot

  • figure:整个 画布(canvas),包含一个或多个子图。
  • subplot:画布上的 单个子图,可以包含不同类型的图表。

在 Matplotlib 中,我们可以使用 plt.subplots() 来创建多个子图:

1
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(12, 6))
  • nrows=1, ncols=2:表示 创建 1 行 2 列的子图(即两个并排的图)。
  • figsize=(12, 6):设置 整体画布大小

2. 子图示例

我们以 中国(China)和印度(India)的移民数据 为例,绘制:

  1. 箱线图(Boxplot)
  2. 折线图(Line plot)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import matplotlib.pyplot as plt

# 创建画布,1 行 2 列的子图
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(12, 6))

# 绘制箱线图(左侧子图)
df[['China', 'India']].plot(kind='box', ax=axes[0], color='blue')
axes[0].set_title('Box plot of China & India Immigration')

# 绘制折线图(右侧子图)
df[['China', 'India']].plot(kind='line', ax=axes[1])
axes[1].set_title('Line plot of China & India Immigration')

# 调整布局,使图表不重叠
plt.tight_layout()

# 显示图表
plt.show()

3. 代码解析

(1) 创建 1 行 2 列的子图

1
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(12, 6))
  • nrows=1, ncols=2:创建 一行两列 的子图布局。
  • figsize=(12, 6):设置 画布大小

(2) 绘制箱线图

1
2
df[['China', 'India']].plot(kind='box', ax=axes[0], color='blue')
axes[0].set_title('Box plot of China & India Immigration')
  • ax=axes[0]:指定绘制到 第 1 个子图(左侧)
  • set_title():设置 子图标题

(3) 绘制折线图

1
2
df[['China', 'India']].plot(kind='line', ax=axes[1])
axes[1].set_title('Line plot of China & India Immigration')
  • ax=axes[1]:指定绘制到 第 2 个子图(右侧)

(4) 调整布局

1
plt.tight_layout()
  • 这个函数 自动调整子图的间距,避免重叠。

(5) 显示图表

1
plt.show()

4. 结果

左侧子图(箱线图):显示中国和印度移民数量的分布情况。
右侧子图(折线图):显示移民数量的变化趋势。
整体布局清晰、易读,适用于数据对比


5. 其他子图布局

除了 1x2 的布局,我们还可以使用其他布局:

(1) 2x2 子图

1
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10, 8))

这将创建一个 2 行 2 列的网格布局,适合显示 4 个图。

(2) 不规则布局(GridSpec)

如果想要 不同大小的子图,可以用 GridSpec

1
2
3
4
5
6
7
8
import matplotlib.gridspec as gridspec

fig = plt.figure(figsize=(10, 8))
gs = gridspec.GridSpec(2, 2, height_ratios=[2, 1])

ax1 = plt.subplot(gs[0, :]) # 第 1 行,占满 2 列
ax2 = plt.subplot(gs[1, 0]) # 第 2 行,左侧
ax3 = plt.subplot(gs[1, 1]) # 第 2 行,右侧
  • 上方大图,下方两张小图

总结

  • plt.subplots() 可以创建多个子图,便于 数据对比
  • ax=axes[i] 指定不同的子图位置。
  • plt.tight_layout() 避免子图重叠。
  • GridSpec 适用于 不规则子图布局

这样,我们可以 高效可视化 数据! 🎉