【ggplot2可视化进阶指南】:掌握facet_grid行列公式的5大核心技巧

第一章:ggplot2中facet_grid行列公式的核心概念

在ggplot2中,`facet_grid()`函数用于根据一个或多个分类变量将数据划分为子集,并以网格形式绘制多个子图。其核心在于理解行与列的公式语法,该公式决定了子图的排列方式。

公式语法结构

`facet_grid()`接受形如 rows ~ cols 的公式,其中左侧表示按行分割的变量,右侧表示按列分割的变量。使用 . 表示占位符,即不进行分割。 例如:
# 按cyl变量分行,am变量分列
ggplot(mtcars, aes(x = mpg, y = wt)) +
  geom_point() +
  facet_grid(cyl ~ am)
上述代码中,`cyl` 变量的每个唯一值占据一行,`am` 的每个唯一值占据一列,形成矩阵式布局。

变量排列组合方式

可以通过调整公式中的变量位置灵活控制布局:
  • var1 ~ var2:var1 控制行,var2 控制列
  • var1 ~ .:仅按 var1 分行,不分列
  • . ~ var2:仅按 var2 分列,不分行

实际应用示例

考虑 mtcars 数据集中的齿轮数(gear)和驱动类型(vs),可通过以下方式创建面板图:
# 仅按齿轮数分列
ggplot(mtcars, aes(x = hp, y = mpg)) +
  geom_point() +
  facet_grid(. ~ gear)
此代码生成单行多列的布局,每列对应不同 gear 值的散点图。
公式形式行变量列变量布局效果
cyl ~ amcylam多行多列
. ~ gear无gear单行多列
vs ~ .vs无多行单列

第二章:facet_grid行列公式的语法结构与基础应用

2.1 行列公式的标准语法解析与参数说明

在处理行列公式时,其标准语法通常遵循统一的结构:`FORMULA(array, row_index, col_index)`。该结构广泛应用于电子表格引擎和数据计算库中。
核心参数说明
  • array:输入的数据矩阵,支持二维数组或引用范围;
  • row_index:指定目标行位置,索引从0开始;
  • col_index:指定目标列位置,同样以0为起始索引。
语法示例与解析
FORMULA([[10,20],[30,40]], 1, 0) // 返回 30
上述代码中,传入一个2×2数组,选取第2行第1列元素(索引为[1][0]),返回值为30,符合行列定位逻辑。

2.2 单变量分面:行或列方向的独立拆分实践

在数据可视化中,单变量分面通过将数据沿行或列方向拆分,生成多个子图表以揭示分布模式。该方法适用于探索分类变量对数值分布的影响。
分面布局结构
常见的分面方式包括按行(facet_row)和按列(facet_col),各自独立划分绘图区域。例如,在 Plotly 中可通过参数控制:

import plotly.express as px
df = px.data.tips()
fig = px.histogram(df, x="total_bill", facet_col="day", nbins=20)
fig.show()
上述代码按“day”变量在列方向创建独立子图,每个子图展示对应工作日的账单分布。facet_col 将不同类别水平排列,便于横向比较。
适用场景与优势
  • 适用于分类维度较少的数据集
  • 保持坐标轴一致性,增强可比性
  • 避免图形元素重叠,提升可读性

2.3 双变量组合分面:构建行×列网格布局

在数据可视化中,双变量组合分面通过将两个分类变量分别映射到行和列,形成二维网格布局,从而实现多子图的系统性排列。
分面结构设计
该布局将数据按行变量和列变量交叉分组,每个单元格展示一个子图,适合比较多个维度下的分布模式。
代码实现示例

import seaborn as sns
# 使用seaborn创建行×列分面
g = sns.FacetGrid(tips, row="sex", col="time", margin_titles=True)
g.map(sns.scatterplot, "total_bill", "tip")
上述代码中,row="sex" 指定行方向分面变量,col="time" 指定列方向变量,margin_titles=True 启用边缘标题提升可读性,map() 方法为每个子图绘制散点图。

2.4 公式符号“~”与变量引用的正确使用方式

在数学公式与编程语言中,“~”符号常被用于表示近似、模式匹配或变量展开。理解其上下文语义至关重要。
符号“~”的常见用途
  • 在统计学中,~ 表示“服从某种分布”,如 X ~ N(0,1)
  • 在正则表达式或Shell脚本中,~ 常代表用户主目录或模糊匹配
  • 在R语言中,~ 用于定义公式模型,如 y ~ x + z
变量引用中的“~”处理
export PATH=~/bin:$PATH
该代码将用户主目录下的 bin 文件夹加入环境变量。其中 ~ 被Shell自动展开为 $HOME 的值,是变量引用的简写形式。注意:在双引号内仍可解析 ~,但在单引号中则视为字面字符。

2.5 分面标签自定义:提升图表可读性的基础技巧

在数据可视化中,分面(Faceting)能将复杂数据按维度拆分为多个子图,而自定义分面标签是提升图表可读性的关键步骤。
标签语义化命名
避免使用原始字段名(如 `category_1`),应映射为具有业务含义的名称。例如,在销售分析中将 `north` 改为“华北区”,增强图表直观性。
动态标签格式化
使用绘图库提供的标签格式化函数,可动态控制显示内容。以 Python 的 Seaborn 为例:

g = sns.FacetGrid(df, col="year", col_wrap=3)
g.map(plt.hist, "sales")
g.set_axis_labels("销售额", "频次")
g.set_titles("{col_name}年")  # 自定义每面子图标题
其中,`set_titles` 方法支持模板字符串 `{col_name}` 和 `{row_name}`,用于插入分面变量值,实现灵活命名。
多语言与单位支持
通过格式化函数添加单位或本地化文本,如将数值标签转为“200万元”,进一步降低解读门槛。

第三章:控制分面布局与视觉一致性

3.1 调整行列缩放模式(scales参数)的实战选择

在可视化配置中,scales 参数决定了坐标轴的缩放行为。合理设置可避免数据分布失真,提升图表可读性。
常见缩放模式对比
  • linear:线性缩放,适用于均匀分布的数据
  • log:对数缩放,适合跨越多个数量级的数据
  • pow:幂函数缩放,用于强调局部差异
代码示例与参数解析

const config = {
  scales: {
    x: { type: 'linear', min: 0, max: 100 },
    y: { type: 'log', base: 10 }
  }
};
上述配置中,x轴采用线性缩放,范围限定为0到100;y轴使用以10为底的对数缩放,有效压缩大值区间,突出小数值变化趋势。

3.2 空白面板处理与数据缺失场景下的显示策略

在可视化系统中,当数据源为空或请求失败时,合理的空白面板展示策略能显著提升用户体验。
常见数据缺失场景
  • 首次加载未完成
  • 查询结果为空集
  • 接口异常或超时
前端默认状态渲染
function renderEmptyPanel(hasData, isLoading) {
  if (isLoading) return '<div>加载中...</div>';
  if (!hasData) return '<div>暂无数据</div>';
  // 正常渲染图表
}
该函数通过 hasData 与 isLoading 双状态控制视图流向,避免闪烁或误判。
多级降级提示策略
状态用户提示操作建议
加载中正在获取数据...等待
空数据当前筛选条件下无数据调整筛选条件
请求失败数据加载失败,请重试刷新或联系支持

3.3 统一坐标轴与图例布局的专业配置方法

在多图表联动场景中,统一坐标轴范围与图例布局是提升可视化一致性的关键。通过标准化配置,可避免因刻度差异导致的数据误读。
坐标轴对齐策略
使用固定范围与步长确保所有子图X/Y轴对齐:

const axisConfig = {
  scale: {
    x: { min: 0, max: 100, ticks: { stepSize: 10 } },
    y: { min: 0, max: 1, ticks: { stepSize: 0.1 } }
  }
};
参数说明:min/max定义全局范围,stepSize强制刻度对齐,适用于时间序列对比分析。
图例布局规范化
采用右置垂直布局避免遮挡数据:
  • 位置设为right,减少主绘图区干扰
  • 启用usePointStyle保持标记一致性
  • 通过onClick实现跨图联动隐藏

第四章:高级分面技巧与性能优化

4.1 多层级因子变量在行列公式中的有序排列

在数据分析中,多层级因子变量的有序排列对模型解释性至关重要。通过合理组织因子层级,可确保行列公式正确反映分类变量的嵌套结构。
因子排序的实现逻辑
使用预处理函数对因子变量进行显式排序,避免默认字典序导致的逻辑错乱。

# 按教育程度有序排列因子
education_levels <- c("高中", "本科", "硕士", "博士")
data$education <- factor(data$education, levels = education_levels, ordered = TRUE)
上述代码将“教育程度”设为有序因子,levels 参数定义了层级顺序,ordered = TRUE 启用顺序语义,确保回归模型中系数按预设逻辑递进。
嵌套结构的表格表示
地区城市教育层级
华东上海本科
华东杭州硕士
华北北京博士

4.2 结合dplyr预处理实现动态分面逻辑

在ggplot2中实现动态分面时,结合dplyr进行数据预处理能显著提升灵活性。通过筛选、分组和变量构造,可为facet_wrap或facet_grid提供定制化分面依据。
数据准备与分组逻辑
使用dplyr对原始数据进行清洗和衍生变量构建,便于后续分面控制:

library(dplyr)
data_summary <- mtcars %>%
  mutate(cyl_group = ifelse(cyl == 4, "4-cylinder", "Other")) %>%
  group_by(cyl_group, gear) %>%
  summarise(mean_mpg = mean(mpg), .groups = "drop")
该代码新增cyl_group分类变量,并按组计算平均mpg值,为分面提供语义清晰的分组基础。
动态分面可视化
基于预处理结果,使用facet_wrap实现按组别分布的图表:

ggplot(data_summary, aes(x = gear, y = mean_mpg)) +
  geom_col() +
  facet_wrap(~ cyl_group, ncol = 1)
此方式将统计逻辑与图形布局解耦,增强代码可维护性,同时支持复杂条件下的动态分面需求。

4.3 避免过度分面:合理控制网格密度与性能平衡

在三维可视化中,网格分面过多会导致渲染性能急剧下降。合理控制几何体的细分程度,是保障交互流畅性的关键。
动态调节细分级别
根据视点距离动态调整模型细分等级,可显著减少GPU负载。例如,在Three.js中使用LOD(Level of Detail)技术:

const lod = new THREE.LOD();
const geometryLow = new THREE.SphereGeometry(5, 16, 16);
const geometryMid = new THREE.SphereGeometry(5, 32, 32);
const geometryHigh = new THREE.SphereGeometry(5, 64, 64);

lod.addLevel(geometryHigh, 10);
lod.addLevel(geometryMid, 30);
lod.addLevel(geometryLow, 100);
scene.add(lod);
上述代码中,addLevel 的第二个参数为可视距离阈值。当物体远离摄像机时,自动切换至低分面版本,有效降低绘制调用(Draw Calls)。
性能对比参考
分面数帧率 (FPS)内存占用
~5k6012MB
~80k3284MB

4.4 自定义分面标签函数(labeller)的进阶用法

在复杂数据可视化中,ggplot2 的 `labeller` 参数支持通过自定义函数精细控制分面标签的显示格式。这不仅限于变量名的重命名,还可动态组合多个分组变量。
自定义标签函数结构
custom_labeller <- function(variable, value) {
  # 根据变量名映射中文标签
  var_names <- c("species" = "物种", "island" = "岛屿")
  # 格式化输出:变量: 值
  paste0(var_names[variable], ": ", value)
}
该函数接收两个参数:`variable` 表示分组变量名,`value` 是对应的实际取值。通过条件逻辑或查找表可实现多语言、缩写或符号替换。
应用复合标签策略
使用 `labeller = custom_labeller` 在 `facet_wrap()` 或 `facet_grid()` 中即可生效,支持跨维度语义整合,提升图表可读性与专业度。

第五章:总结与可视化设计的最佳实践

明确数据目标,避免信息过载
在构建可视化图表前,必须清晰定义分析目标。例如,在监控系统性能时,若目标是识别响应延迟趋势,则应聚焦时间序列图,而非堆叠面积图展示多维度无关指标。使用 Grafana 时,可通过查询过滤仅保留关键服务的 P95 延迟数据:
-- Prometheus 查询示例:获取关键服务的 P95 延迟
histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le, service))
选择合适的图表类型
不同数据形态对应最佳图表类型。下表列举常见场景与推荐图表:
数据类型分析目标推荐图表
时间序列趋势分析折线图
分类比较数值对比柱状图
构成比例部分与整体关系堆叠条形图或饼图(少于5类)
保持视觉一致性
统一颜色方案和字体层级可提升可读性。建议在企业级仪表板中采用 SCSS 变量管理主题色:
/* 定义可视化主题变量 */
:root {
  --primary-color: #1f77b4;
  --secondary-color: #ff7f0e;
  --text-dark: #333;
  --font-family: 'Roboto', sans-serif;
}
增强交互性以支持钻取分析
现代可视化平台如 Kibana 或 Superset 支持点击事件跳转至详细视图。配置时需确保维度字段具备层级结构,例如从“区域”下钻到“城市”销售数据,并通过 URL 参数传递过滤条件,实现无缝导航体验。

相关推荐

ggplot2_`facet_xxx()`分面系统

作者:Li_Yuhui 四川大学研究生在读 本文是ggplot2_可视化_速成的第4节 第2节:coor_xxx()坐标系变换 第3节:scale_xxx()标度调整 第5节:Guides图例与增加坐标轴 第6节:themes主题系统 文章目录作者:Li_Yuhui 四川大学研究生在读@[TOC]`facet_xxx()`分面系统封装分面示例网格分面示例:labeller特殊字符分面标题[Gu...

weixin_43528109的博客 2783

ggplot2 | 图形分面函数

图形分面是指根据某个或某些分类变量(不一定是因子类型)将绘图数据分成若干子集并分别绘图。ggplot2绘图系统中有两个专门的分面函数:facet_wrap()facet_grid()1 facet_wrap()facet_wrap()函数的语法结构如下:facet_wrap( facets,nrow=NULL,ncol=NULL, scales="...

R语言学堂 3412

【R语言】高维数据可视化| ggplot2中会“分身术”的facet_wrap()与facet_grid()姐妹花

facet_grid()形成由行和列面化变量定义的面板矩阵。当有两个离散变量,并且这些变量的所有组合存在于数据中时,它是最有用的。如果只有一个具有多个级别的变量,请尝试facet_wrap()。 facet_wrap()将一维面板序列包装成2d。这通常比facet_grid()更好地利用了屏幕空间,而且显示基本上是矩形的。 分面图是根据数据类别按照行或者列,或者矩阵分面的方式将散点图,柱形图等基础图标展示四到五维的数据结构。 用法 facet_grid(): facet_grid(rows = NULL,c

临风暖阳的博客 6515

揭秘ggplot2中facet_grid公式语法:90%的人都忽略的关键细节

掌握ggplot2 facet_grid行列公式的正确用法,解决图表分面布局难题。适用于多变量数据可视化,通过公式语法灵活控制行与列的分面结构,提升图形可读性。详解常用参数与避坑技巧,值得收藏。

LiteCompile的博客 638

R 中 facet_wrap() 和 facet_grid() 的区别

这就是facet_grid()的工作原理:它会为您指定的变量的每个组合生成一个图,即使有些图是空的。ggplot2 包中的facet_grid()和facet_wrap()函数都可用于生成绘图网格。facet_grid ()函数将为您指定的每个变量组合生成一个图网格,即使某些图是空的。facet_wrap ()函数只会为具有值的变量组合生成图,这意味着它不会生成任何空图。这意味着没有为团队B和位置F的组合创建图,因为原始数据框中不存在此特定组合的值。示例 2:使用 facet_wrap() 函数。

Mrrunsen的博客 2870

R语言ggplot2可视化分面图(facet_grid):去除分面图灰色矩形框以及框中的标签、Getting rid of facet_grid labels on those gray boxes

R语言ggplot2可视化分面图(facet_grid):去除分面图灰色矩形框以及框中的标签、Getting rid of facet_grid labels on those gray boxes

statistics+insight+vista+power 813

aPEAR包实战:从功能富集结果到模块化网络图可视化

功能富集分析是生物信息学中解读高通量组学数据的关键步骤,它通过统计方法识别在特定基因集中显著富集的生物学通路或功能术语。传统的结果呈现方式,如气泡图或柱状图,虽然能直观展示各条目的统计显著性,但往往忽略了条目之间重要的功能关联性,导致解读碎片化。aPEAR包正是为了解决这一痛点而生,它基于条目间共享基因的重叠度(如Jaccard相似系数)计算功能相似性,并运用层次聚类或马尔可夫聚类算法,将成百上千个零散的富集条目自动归纳为几个核心的、互不重叠的生物学功能模块。这一技术将分析维度从单一的“显著性排序”提升至“

weixin_34007020的博客 379

R语言ggplot2可视化分面图(facet_grid):ggplot2可视化为分面图的每个组添加平均值线条

R预压ggplot2可视化分面图(facet_grid):ggplot2可视化为分面图的每个组添加平均值线条

data+scenario+science+insight 1368

ggplot2 分面相关设置(facet)

总结学习,ggplot 1.0,2.0 后,已经大致画出符合需求的图,并能对坐标轴,图例进行修改。分面画图,和一页多图可以更好的将数据分类展示出来。 分面 分面分成两种网格分面(facet_grid()),封装分面(facet_wrap()).其中都含有两种分面属性:指定分面,分面标度。 指定分面 网格指定分面(矩阵) 写法 理解 一行多列 “. ~ a” 按a分面,行...

我真的很不错的博客 2万+

解决Thingsboard数据下发难题:自定义RPC请求格式的3种方法(含源码修改指南)

本文详细介绍了解决Thingsboard数据下发难题的3种自定义RPC请求格式方法,包括规则链脚本转换、TB-Gateway中间层转换和源码级定制方案。通过实际案例和性能对比,帮助开发者根据项目需求选择最适合的解决方案,提升物联网平台与设备的兼容性。

weixin_29008691的博客 232

AMD显卡跑Ollama大模型?手把手教你搞定Windows下GPU识别与加速(以RX 9600XT为例)

本文详细指导如何在Windows系统下使用AMD显卡(如RX 9600XT)运行Ollama大模型,解决GPU识别与加速问题。通过获取非官方Ollama版本、替换ROCm库文件等步骤,实现高效的GPU加速推理,提升大语言模型的运行效率。

weixin_28707365的博客 481

facet_grid公式语法详解,彻底搞懂ggplot2多面板布局的底层逻辑

掌握ggplot2多面板布局的关键技巧,本文深入解析facet_grid的行列公式用法,涵盖公式语法、变量组合与布局控制。适用于分类数据可视化,实现高效分面绘图,逻辑清晰易上手,值得收藏。

QuickProceed的博客 839

保姆级教程:在K230开发板上为张大头步进电机实现位置、速度、回零全功能控制

本文提供了一份详细的K230开发板与张大头步进电机的控制教程,涵盖硬件连接、协议解析、模块化代码实现及实战案例。通过位置、速度和回零功能的全面讲解,帮助开发者快速掌握步进电机的高级控制技术,适用于自动化、机器人等应用场景。

weixin_42629671的博客 710

Seaborn学习(一)------- 构建结构化多绘图网格(FacetGrid()、map())详解

      在探索中等维数据时,一种有用的方法是在数据集的不同子集上绘制同一图的多个实例。这种技术有时被称为“格子”或“格子”绘图,它与“小倍数”的概念有关。它允许查看者快速提取有关复杂数据的大量信息。Matplotlib为制作多轴数字提供了很好的支持; seaborn构建于此之上,可直接将绘图结构链接到数据集的结构。要使用这些功能,您的数据必须位于Pandas DataFrame中,并且必须采...

进击的菜鸟 3万+

UOS忘记密码别慌!用LiveCD工具5分钟搞定,附命令行救援模式详细步骤

本文详细介绍了UOS系统密码遗忘时的两种解决方案:图形化LiveCD工具和命令行救援模式。针对普通用户,LiveCD工具提供5分钟快速重置密码的便捷操作;而技术人员可通过命令行深度解析系统分区挂载与密码修改流程。文章还包含安全加固建议,帮助用户预防类似问题发生。

weixin_27032989的博客 589

宝塔面板一键部署Z-Blog博客 - 内网穿透实现公网访问

Ubuntu系统作为Linux系统的一个重要分支,既有Linux系统的轻量化、高扩展性和长时间稳定运行,也拥有Windows一样的友好图形界面,因此可以作为熟悉服务器系统的良好选择。对于笔者来说,ubuntu系统最大的用处,就是可以让家里老旧的电脑重焕生机,让本已退居二线的电脑与cpolar内网穿透软件搭配,成为私人服务器,搭建自己喜欢的各种网站。今天,笔者就为大家介绍,如何使用cpolar内网穿透+Z-blog搭建私人博客网站。

m0_74808907的博客 3147

facetgrid(pairgrid)使用方法及绘制多变量【知识整理】

学生党整理一些关于数据分析的知识:整理了facetgrid(pairgrid)使用方法及绘制多变量。包括了FacetGrid部分和PairGrid部分。 - FacetGrid部分:数据分类、绘制各种数据图、颜色浓度及长宽比设置、子图绘制顺序设置、调色板及其他参数设置及形状及坐标范围指定。 - PairGrid部分:指定绘图样式、增加分类、指定绘制量及颜色设置。

Droke_Zhou的博客 4990

spring-ai学习(四)-MCP

创建一个springai项目1.依赖。

zql1455890112的博客 1384

ggplot2 学习笔记--facet_grid

本文内容仅仅是记录自己在做实例过程中的个人理解,不一定是对的。 facet_grid(facets, margins = FALSE, scales = "fixed", space = "fixed", shrink = TRUE, labeller = "label_value", as.table = TRUE, drop = TRUE) facet_grid 将...

a7584335的博客 3215

WGCNA样本量不够怎么办?5种替代方案帮你解决小样本基因共表达分析难题

本文针对WGCNA样本量不足的问题,提供了5种科学替代方案,包括CEMiTool、参数调整、多组学数据整合、机器学习特征提取和公共数据利用。这些方法帮助研究者在小样本条件下仍能进行可靠的基因共表达分析,特别适用于罕见病和珍贵临床样本研究。

weixin_42554042的博客 303

python爬虫案例——腾讯网新闻标题(异步加载网站数据抓取,post请求)(6)

本篇案例主要讲解异步加载网站如何分析网页接口,以及如何观察post请求URL的参数,网站数据并不难抓取,主要是将要抓取的数据接口分析清楚,才能根据需求编写想要的代码。

@优快云盲敲代码的阿豪的博客 946

Facetgrid使用方法

查看数据的前五行 tips = sns.load_dataset("tips") tips.head() 引入数据,布置横向画布 g = sns.FacetGrid(tips, col='time') g = sns.FacetGrid(tips, col='time') g.map(plt.hist, "tip")  #以tip为横轴画柱状图 g = sns.FacetG...

qq_39112101的博客 9840

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

seaborn.FacetGrid()的使用

class seaborn.FacetGrid(data, row=None, col=None, hue=None, col_wrap=None, sharex=True, sharey=True, height=3, aspect=1, palette=None, row_order=None, col_order=None, hue_order=None, hue_kws=None, dro...

Synioe的博客 2415

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Python学习17 ----FacetGrid使用方法

FacetGrid使用方法 代码详见https://github.com/RenDong3/Python_Note 1 读取数据 2 图形绘制 2.1 空白图 2.2 条形图 3 细节属性设置 3.1 添加图例及hue属性 3.2 回归拟合 3.3 设置纵横比 ...

小熊猫的博客 1981

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

上一篇: 【性能优化警告】:滥用扩展运算符处理关联数组键可能导致内存翻倍?
下一篇: ggplot2中scale_color_brewer的12种配色方案全解析(Color Brewer调色盘深度挖掘)
StepLens
博客等级 码龄1年 149粉丝 2031原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值