入门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 适用于 不规则子图布局

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

Pandas所有plot的kind样式

每种 kind 类型的 plot() 方法的示例代码,每个示例都展示了一种不同的绘图方式。


1. bar - 垂直柱状图

1
2
3
4
5
6
7
8
9
10
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

data = pd.DataFrame({'Category': ['A', 'B', 'C'], 'Values': [10, 20, 15]})
data.set_index('Category', inplace=True)

data.plot(kind='bar', color='skyblue')
plt.title("Bar Plot")
plt.show()

效果:显示 A、B、C 三个类别的值,以垂直柱状图呈现。


2. barh - 水平柱状图

1
2
3
data.plot(kind='barh', color='green')
plt.title("Horizontal Bar Plot")
plt.show()

效果:与 bar 类似,但方向变为水平。


3. hist - 直方图

1
2
3
4
data_hist = pd.DataFrame({'Values': np.random.randn(1000)})  # 生成 1000 个随机数
data_hist.plot(kind='hist', bins=30, color='purple', alpha=0.7)
plt.title("Histogram")
plt.show()

效果:展示数据分布情况,通常用于查看数据集中值的分布模式。


4. box - 箱型图

1
2
3
4
data_box = pd.DataFrame({'A': np.random.randn(50), 'B': np.random.randn(50) + 2})
data_box.plot(kind='box')
plt.title("Box Plot")
plt.show()

效果:展示数据的四分位数、异常值和中位数情况。


5. kde(或 density)- 核密度估计图

1
2
3
4
data_kde = pd.DataFrame({'Values': np.random.randn(1000)})
data_kde.plot(kind='kde', color='red')
plt.title("KDE Plot")
plt.show()

效果:显示数据的概率密度,适用于观察数据的分布趋势。


6. area - 面积图

1
2
3
4
data_area = pd.DataFrame({'A': np.random.rand(10), 'B': np.random.rand(10)}, index=range(1, 11))
data_area.plot(kind='area', alpha=0.5)
plt.title("Area Plot")
plt.show()

效果:类似折线图,但填充了颜色,适合展示不同系列之间的对比。


7. pie - 饼图

1
2
3
4
5
data_pie = pd.Series([10, 20, 30], index=['A', 'B', 'C'])
data_pie.plot(kind='pie', autopct='%1.1f%%', colors=['blue', 'orange', 'green'])
plt.title("Pie Chart")
plt.ylabel("") # 隐藏默认的 y 轴标签
plt.show()

效果:显示各部分占比,适用于展示比例关系。


8. scatter - 散点图

1
2
3
4
data_scatter = pd.DataFrame({'X': np.random.rand(50), 'Y': np.random.rand(50)})
data_scatter.plot(kind='scatter', x='X', y='Y', color='blue')
plt.title("Scatter Plot")
plt.show()

效果:用于展示两个变量之间的关系,常见于回归分析。


9. hexbin - 六边形箱图

1
2
3
4
data_hexbin = pd.DataFrame({'X': np.random.randn(1000), 'Y': np.random.randn(1000)})
data_hexbin.plot(kind='hexbin', x='X', y='Y', gridsize=25, cmap='Blues')
plt.title("Hexbin Plot")
plt.show()

效果:适用于大数据量散点分布,通过颜色深浅显示点的密度。


这些示例涵盖了 pandas 支持的各种常见图表类型,具体选择哪种取决于数据特点和分析需求。

Matplotlib所有可用样式

Matplotlib 提供的所有可用样式(style)及其特点介绍:


1. 经典风格

  • classic:Matplotlib 旧版的默认风格,颜色较淡,线条较细,适合习惯早期 Matplotlib 风格的用户。
  • _classic_test_patch:一个用于测试的经典风格,与 classic 类似,主要用于 Matplotlib 内部测试。

2. 现代流行风格

  • ggplot:模仿 R 语言的 ggplot2 主题,使用柔和的颜色,带有网格线,适用于数据分析和统计图表。
  • fivethirtyeight:模仿 FiveThirtyEight 网站的数据可视化风格,线条较粗,颜色鲜明,背景为浅灰色,适合数据新闻或高对比度展示。
  • bmh(Bayesian Methods for Hackers):
    • 适合统计分析,背景较浅,网格线清晰,线条较粗。
    • 适用于数据科学、统计建模和机器学习可视化。
  • fast
    • 牺牲部分视觉效果,提升渲染速度,适用于大规模数据集的快速可视化。

3. 深色主题

  • dark_background
    • 黑色背景,适合夜间模式或需要高对比度的可视化展示。
    • 适用于投影仪演示或屏幕展示。
  • seaborn-v0_8-dark
    • Seaborn 主题,深色背景,适合夜间模式的可视化。
  • seaborn-v0_8-dark-palette
    • 深色背景,搭配 Seaborn 颜色方案,颜色较丰富,适合数据展示。
  • seaborn-v0_8-darkgrid
    • 深色背景 + 网格线,适用于数据趋势分析。

4. 浅色主题

  • seaborn-v0_8-white
    • 纯白背景,无网格线,适合简洁风格。
  • seaborn-v0_8-whitegrid
    • 白色背景,带网格线,适合统计数据可视化。

5. 论文、报告风格

  • seaborn-v0_8-paper
    • 适用于学术论文格式,配色简洁,适合黑白打印。
  • seaborn-v0_8-notebook
    • 适用于 Jupyter Notebook 环境,可读性强。
  • seaborn-v0_8-poster
    • 适用于海报或大屏幕展示,字号较大,线条较粗。
  • seaborn-v0_8-talk
    • 适用于演讲或 PPT 展示,增强了对比度和字体大小。

6. 适合出版或色盲友好的风格

  • grayscale
    • 所有颜色变成灰阶,适合黑白打印或研究色彩对比。
  • tableau-colorblind10
    • 适用于色盲用户的 Tableau 颜色方案,提高可读性。

7. Seaborn 主题系列

这些风格都属于 Seaborn 主题,可用于增强 Matplotlib 的可视化美观性:

  • seaborn-v0_8(默认 Seaborn 主题)。
  • seaborn-v0_8-bright(明亮色彩)。
  • seaborn-v0_8-colorblind(色盲友好)。
  • seaborn-v0_8-deep(更深的颜色)。
  • seaborn-v0_8-muted(柔和色调)。
  • seaborn-v0_8-pastel(淡色)。
  • seaborn-v0_8-ticks(适用于带刻度的图表)。

示例:对比不同风格

你可以使用以下代码来快速查看不同风格的效果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)

styles = ['ggplot', 'fivethirtyeight', 'seaborn-v0_8-darkgrid', 'dark_background']

for style in styles:
plt.style.use(style)
plt.figure()
plt.plot(x, y, label=f"Style: {style}")
plt.legend()
plt.title(f"Matplotlib Style: {style}")
plt.show()