可视化

25 年 2 月 23 日 星期日
1750 字
9 分钟

可视化

大部分内容属于ai,代码都没问题,板子而已(目前只有python

Pytorch

matplotlib

一、安装与导入

python
!pip install matplotlib numpy
import matplotlib.pyplot as plt
import numpy as np

二、基础图表绘制

1. 折线图

python
x = [1, 2, 3, 4]
y = [10, 20, 25, 30]

plt.figure(figsize=(8,4))  # 设置画布尺寸
plt.plot(x, y,
         color='red',      # 颜色
         linestyle='--',   # 线型 (':'虚线, '-.'点划线)
         marker='o',       # 标记点形状 (s:方块, ^:三角形)
         linewidth=2,      # 线宽
         label='趋势线')   # 图例标签
plt.title("示例折线图")    # 标题
plt.xlabel("X轴")         # X轴标签
plt.ylabel("Y轴")         # Y轴标签
plt.grid(True)            # 显示网格
plt.legend()              # 显示图例
plt.show()

2. 柱状图

python
labels = ['A', 'B', 'C']
values = [25, 40, 30]

plt.bar(labels, values,
        color=['#1f77b4', '#ff7f0e', '#2ca02c'],  # 颜色列表
        width=0.6,        # 柱子宽度
        alpha=0.8)        # 透明度
plt.ylim(0, 50)          # Y轴范围
plt.show()

3. 散点图

python
x = np.random.randn(100)
y = x + np.random.randn(100)*0.3

plt.scatter(x, y,
           s=50,          # 点大小
           c=np.arange(100),  # 颜色映射
           cmap='viridis',    # 颜色方案
           alpha=0.7)
plt.colorbar()            # 显示颜色条
plt.show()

4. 饼图

python
sizes = [15, 30, 45, 10]
labels = ['A', 'B', 'C', 'D']

plt.pie(sizes,
        labels=labels,
        autopct='%1.1f%%',  # 显示百分比格式
        startangle=90,      # 起始角度
        explode=(0,0.1,0,0))  # 突出显示第二块
plt.axis('equal')          # 显示为正圆
plt.show()

三、高级功能

1. 子图布局

python
fig, axs = plt.subplots(2, 2, figsize=(10,8))  # 2行2列

# 绘制第一个子图
axs[0,0].plot(x, y)
axs[0,0].set_title("子图1")

# 绘制第四个子图
axs[1,1].scatter(x, y)
plt.tight_layout()  # 自动调整间距
plt.show()

2. 样式设置

python
plt.style.use('seaborn')  # 使用内置样式 (ggplot, seaborn, dark_background等)
plt.xkcd()  # 手绘风格(慎用)

3. 添加注释

python
plt.plot(x, y)
plt.text(2, 20, '重要节点',   # 在(2,20)处添加文字
         fontsize=12,
         color='red',
         bbox=dict(facecolor='yellow', alpha=0.5))  # 文本框样式

plt.annotate('峰值', xy=(3,30), xytext=(3.5,25),
             arrowprops=dict(arrowstyle='->'))  # 带箭头的注释

四、实用技巧

  1. 显示中文
python
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False    # 解决负号显示问题
  1. 导出图片
python
plt.savefig('output.png',
           dpi=300,           # 分辨率
           bbox_inches='tight',  # 去除白边
           transparent=True)  # 透明背景
  1. 常用参数速查
  • plt.xlabel(fontsize=12, color='blue') # 轴标签样式
  • plt.xticks(rotation=45) # X轴标签旋转
  • plt.tight_layout() # 自动调整元素间距
  • plt.subplots_adjust(wspace=0.3, hspace=0.5) # 手动调整子图间距

五、常见问题解决

  1. 中文显示为方框 → 配置中文字体
  2. 图例被遮挡 → 调整 bbox_to_anchor=(1,1)
  3. 导出图片模糊 → 提高dpi参数 (300-600)
  4. 坐标轴科学计数法plt.ticklabel_format(style='plain')

以下是一份全面且可直接使用的 Seaborn 绘图知识大全,涵盖常用功能及示例代码:


Seaborn

1. 数据准备

  • 数据格式:建议使用 pandas.DataFrame(长格式数据),便于直接传递到 Seaborn 函数。
  • 示例数据
    python
    import seaborn as sns
    import pandas as pd
    df = pd.DataFrame({
        'x': range(10),
        'y': [2,4,1,5,3,6,2,4,7,8],
        'category': ['A','B','A','B','A','B','A','B','A','B']
    })
    

2. 基本设置

2.1 样式美化

python
sns.set_theme(style="darkgrid", palette="pastel", font="Arial")  # 全局设置
sns.set_style("whitegrid")  # 可选: darkgrid, whitegrid, dark, white, ticks
sns.despine()  # 移除上方和右侧的边框线

2.2 颜色调色板

python
sns.color_palette("husl", 3)  # 常用调色板: husl, Set2, viridis, coolwarm, magma
sns.set_palette("tab10")  # 设置默认调色板

3. 常用图表类型

3.1 关系图 (Relational Plots)

  • 散点图
    python
    sns.scatterplot(data=df, x="x", y="y", hue="category", size="y", style="category")
    
  • 折线图
    python
    sns.lineplot(data=df, x="x", y="y", hue="category", markers=True, dashes=False)
    

3.2 分布图 (Distribution Plots)

  • 直方图
    python
    sns.histplot(data=df, x="y", kde=True, bins=5, hue="category")
    
  • 核密度估计 (KDE)
    python
    sns.kdeplot(data=df, x="y", hue="category", fill=True)
    
  • 箱线图
    python
    sns.boxplot(data=df, x="category", y="y", hue="category")
    
  • 小提琴图
    python
    sns.violinplot(data=df, x="category", y="y", split=True, inner="quartile")
    

3.3 分类图 (Categorical Plots)

  • 柱状图
    python
    sns.barplot(data=df, x="category", y="y", ci=95, estimator=sum)  # ci: 置信区间
    
  • 计数图
    python
    sns.countplot(data=df, x="category")
    

3.4 矩阵图 (Matrix Plots)

  • 热力图
    python
    corr_matrix = df.corr()
    sns.heatmap(corr_matrix, annot=True, cmap="coolwarm", linewidths=0.5)
    
  • 聚类热力图
    python
    sns.clustermap(corr_matrix, method="ward", cmap="viridis")
    

3.5 回归图 (Regression Plots)

python
sns.regplot(data=df, x="x", y="y", scatter_kws={"s": 50}, line_kws={"color": "red"})
sns.lmplot(data=df, x="x", y="y", hue="category", col="category")  # 分面回归图

4. 高级功能

4.1 分面网格 (FacetGrid)

python
g = sns.FacetGrid(df, col="category", height=4)
g.map(sns.scatterplot, "x", "y")
g.add_legend()

4.2 多变量组合图

python
sns.pairplot(df, hue="category", diag_kind="kde", markers=["o", "s"])

4.3 联合分布图

python
sns.jointplot(data=df, x="x", y="y", kind="hex", marginal_kws={"color": "skyblue"})

5. 自定义与调整

5.1 标题与标签

python
import matplotlib.pyplot as plt
plt.title("Custom Title")
plt.xlabel("X Label")
plt.ylabel("Y Label")
plt.xticks(rotation=45)
plt.legend(title="Category", loc="upper right")

5.2 调整布局

python
plt.tight_layout()  # 自动调整子图间距
plt.figure(figsize=(10,6))  # 设置画布大小

5.3 保存图像

python
plt.savefig("plot.png", dpi=300, bbox_inches="tight")

6. 常用参数速查

参数用途示例值
hue按列分组颜色hue="category"
size/style按列分组点大小/形状size="size_col"
col/row分面网格的列/行col="time"
palette指定调色板palette="viridis"
alpha透明度alpha=0.7
ci置信区间(柱状图/误差线)ci=95ci=None
kind图表类型(如 "kde", "hist", "box"kind="kde"

7. 示例代码合集

python
# 综合示例:多图组合
import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset("tips")
plt.figure(figsize=(12,4))

plt.subplot(131)
sns.boxplot(data=tips, x="day", y="total_bill", hue="sex")

plt.subplot(132)
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="time")

plt.subplot(133)
sns.histplot(data=tips, x="tip", kde=True)

plt.tight_layout()
plt.show()

以下是一份全面且可直接使用的 PlotlyAltair 绘图知识大全,涵盖常用功能及示例代码:


Plotly 使用大全

1. 安装与导入

python
# 安装
pip install plotly pandas

# 导入
import plotly.express as px
import plotly.graph_objects as go

2. 基本图表

2.1 散点图

python
fig = px.scatter(
    data_frame=df,
    x="x_column",
    y="y_column",
    color="category_column",
    size="size_column",
    hover_name="hover_column",
    title="Scatter Plot"
)
fig.show()

2.2 折线图

python
fig = px.line(
    df, x="time_column", y="value_column",
    line_group="group_column",
    color="category_column",
    markers=True
)
fig.show()

2.3 柱状图

python
fig = px.bar(
    df, x="category_column", y="value_column",
    color="sub_category",
    barmode="group"  # 或 "stack"
)
fig.show()

2.4 直方图

python
fig = px.histogram(
    df, x="numeric_column",
    nbins=20, color="category_column",
    marginal="rug"  # 边缘子图:rug/box/violin
)
fig.show()

2.5 箱线图

python
fig = px.box(
    df, x="category_column", y="value_column",
    color="sub_category",
    points="all"  # 显示所有数据点
)
fig.show()

2.6 热力图

python
fig = px.imshow(
    df.corr(),
    color_continuous_scale="Viridis",
    labels=dict(x="X Axis", y="Y Axis")
)
fig.show()

3. 高级功能

3.1 3D 图表

python
fig = px.scatter_3d(
    df, x="x", y="y", z="z",
    color="category",
    size="size",
    opacity=0.7
)
fig.show()

3.2 地图可视化

python
fig = px.choropleth(
    df, locations="country_code",
    color="value_column",
    hover_name="country",
    projection="natural earth"
)
fig.show()

3.3 动态交互

python
fig = px.scatter(df, x="x", y="y", animation_frame="year_column")
fig.update_layout(updatemenus=[dict(type="buttons", showactive=False)])
fig.show()

4. 自定义与布局

4.1 调整布局

python
fig.update_layout(
    title="Custom Title",
    xaxis_title="X Label",
    yaxis_title="Y Label",
    legend_title="Legend",
    font=dict(size=12),
    width=1000,
    height=600
)

4.2 保存图表

python
fig.write_html("plot.html")  # 保存为交互式HTML
fig.write_image("plot.png")  # 需安装 kaleido

Altair 使用大全

1. 安装与导入

python
# 安装
pip install altair vega_datasets

# 导入
import altair as alt
from vega_datasets import data

2. 基本图表

2.1 散点图

python
alt.Chart(df).mark_circle(size=60).encode(
    x="x_column:Q",
    y="y_column:Q",
    color="category_column:N",
    tooltip=["x_column", "y_column"]
).interactive()  # 启用缩放/平移

2.2 折线图

python
alt.Chart(df).mark_line().encode(
    x="time_column:T",
    y="value_column:Q",
    color="category_column:N",
    strokeDash="sub_category:N"
)

2.3 柱状图

python
alt.Chart(df).mark_bar().encode(
    x="category_column:N",
    y="sum(value_column):Q",  # 聚合函数:sum/mean/count
    color="sub_category:N"
)

2.4 直方图

python
alt.Chart(df).mark_bar().encode(
    alt.X("numeric_column:Q", bin=True),
    y="count()",
    color="category_column:N"
)

2.5 箱线图

python
alt.Chart(df).mark_boxplot().encode(
    x="category_column:N",
    y="value_column:Q",
    color="sub_category:N"
)

2.6 热力图

python
alt.Chart(df).mark_rect().encode(
    x="x_column:O",
    y="y_column:O",
    color="value_column:Q"
)

3. 高级功能

3.1 分面图(Facet)

python
alt.Chart(df).mark_point().encode(
    x="x:Q",
    y="y:Q",
    color="category:N"
).facet(
    column="year_column:O"
)

3.2 图层叠加

python
base = alt.Chart(df).encode(x="x:Q", y="y:Q")
line = base.mark_line()
points = base.mark_circle()
(line + points).interactive()

3.3 交互筛选

python
brush = alt.selection_interval()
alt.Chart(df).mark_point().encode(
    x="x:Q",
    y="y:Q",
    color=alt.condition(brush, "category:N", alt.value("lightgray"))
).add_selection(brush)

4. 自定义与导出

4.1 调整样式

python
chart = alt.Chart(df).mark_bar().encode(
    x="x:Q",
    y="y:Q"
).properties(
    width=600,
    height=400,
    title="Custom Title"
).configure_axis(
    labelFontSize=12,
    titleFontSize=14
)

4.2 保存图表

python
chart.save("chart.html")  # 保存为HTML
chart.save("chart.png", scale_factor=2)  # 保存为PNG(需安装 selenium)

5. 参数速查表

Plotly 常用参数

参数用途示例值
color颜色分组color="category"
size点大小size="population"
animation_frame动态帧(时间轴)animation_frame="year"
facet_col分面列facet_col="region"
hover_data悬停显示字段hover_data=["GDP", "人口"]

Altair 编码语法

编码通道用途示例值
x/y坐标轴x="column:Q"
color/fill颜色填充color="category:N"
size/opacity大小/透明度size="value:Q"
tooltip悬停提示信息tooltip=["name", "value"]
row/column分面行/列row="year:O"

6. 示例代码合集

Plotly 综合示例

python
import plotly.express as px
df = px.data.gapminder()
fig = px.scatter(
    df.query("year==2007"),
    x="gdpPercap",
    y="lifeExp",
    size="pop",
    color="continent",
    hover_name="country",
    log_x=True,
    size_max=60
)
fig.show()

Altair 综合示例

python
import altair as alt
from vega_datasets import data
cars = data.cars()
alt.Chart(cars).mark_circle().encode(
    x='Horsepower:Q',
    y='Miles_per_Gallon:Q',
    color='Origin:N',
    tooltip=['Name', 'Year']
).interactive().properties(
    width=800,
    title="汽车数据分布"
)

7. 核心对比

特性PlotlyAltair
语法风格面向对象/函数式声明式(链式调用)
交互性强(动态图表、复杂交互)中(基础缩放、悬停)
学习曲线中等低(类似 Vega-Lite)
适用场景复杂交互、3D/地图可视化、Dash应用快速生成静态/简单交互图表
数据格式支持 DataFrame/数组必须为 Pandas DataFrame

emmm,matlab我还不会,之后再来吧,小红书真好玩喵

文章标题:可视化

文章作者:io-wy

文章链接:https://io-wy.github.io/posts/%E5%8F%AF%E8%A7%86%E5%8C%96[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。