plotit
Source:README_ZH.md
简体中文 | English
⚠️ 早期开发阶段
plotit 处于活跃的预发布开发中。每次更新都极有可能带来破坏性变更。 API 实现不完整,大量计划功能尚未实现,可能存在许多 bug。请勿用于生产环境。 使用风险自负。欢迎反馈和贡献。
概述
plotit 是一个基于 ggplot2 的声明式、管道优先 R 绘图包。它用统一的动词前缀 API 替代了基于 + 的图层叠加,支持原生管道 (|>)。合理的默认设置消除了样板代码——颜色、主题和尺寸开箱即用。
library(plotit)
iris |>
plotit(encode(x = Sepal.Width, y = Sepal.Length, colour = Species)) |>
mark_point(size = 2, alpha = 0.7) |>
scale_color(range = "viridis") |>
label_title("Iris Sepal Dimensions") |>
style(ggplot2::theme_minimal(base_size = 14)) |>
export("iris_plot.pdf")快速入门
library(plotit)
# 带颜色映射的散点图
iris |>
plotit(encode(x = Sepal.Width, y = Sepal.Length, colour = Species)) |>
mark_point()
# 计数柱状图
mtcars |>
plotit(encode(x = factor(cyl))) |>
mark_bar()
# 时间序列折线图
ggplot2::economics |>
plotit(encode(x = date, y = unemploy)) |>
mark_line()
# 多图仪表盘
p1 <- plotit(iris, encode(x = Sepal.Width, y = Sepal.Length)) |> mark_point()
p2 <- plotit(iris, encode(x = Species, y = Sepal.Length)) |> mark_boxplot()
compose_grid(p1, p2, tag_levels = "A") |>
label_title("Iris Dashboard") |>
export("dashboard.png")管道模式
每个 plotit 图表都遵循一致的管道:
data |> plotit(encode(...)) |> mark_*() |> scale_*() |> split_*() |> project_*() |> label_*() |> style() |> export()
| 步骤 | 动词 | 职责 |
|---|---|---|
| 1. 初始化 |
plotit() + encode()
|
绑定数据与美学映射 |
| 2. 图层 | mark_*() |
添加几何图层(点、线、柱等) |
| 3. 标度 | scale_*() |
控制数据到视觉属性的映射 |
| 4. 分面 | split_*() |
拆分为小倍数图 |
| 5. 坐标 | project_*() |
选择坐标系(笛卡尔、极坐标、地图) |
| 6. 标签 | label_*() |
设置标题、轴标签、图例标题 |
| 7. 主题 | style() |
应用主题样式 |
| 8. 导出 | export() |
渲染为文件 |
多图组合遵循最外层管道:
compose_*(p1, p2, ...) |> label_*() |> style() |> export()
函数族
mark_* — 几何图层
| 函数 | ggplot2 | 说明 |
|---|---|---|
mark_point() |
geom_point() |
散点图 |
mark_line() |
geom_line() |
折线与趋势线 |
mark_area() |
geom_area() |
面积图/河流图 |
mark_bar() |
geom_bar() / geom_col()
|
柱状图 |
mark_text() |
geom_text() / ggrepel
|
文本标签与数据标注 |
mark_boxplot() |
geom_boxplot() |
箱线图 |
mark_histogram() |
geom_histogram() |
直方图 |
mark_density() |
geom_density() |
1D 核密度估计 |
mark_violin() |
geom_violin() |
小提琴图 |
mark_map() |
geom_sf() |
地图/地理空间 |
scale_* — 数据到视觉的映射
| 函数 | 美学属性 |
|---|---|
scale_color() |
颜色 |
scale_fill() |
填充 |
scale_size() |
大小 |
scale_alpha() |
透明度 |
scale_shape() |
形状 |
scale_linetype() |
线型 |
scale_x() |
x 轴 |
scale_y() |
y 轴 |
label_* — 文本标签
| 函数 | 作用范围 |
|---|---|
label_title() |
主标题 |
label_subtitle() |
副标题 |
label_caption() |
脚注 |
label_axis() |
轴标题 |
label_legend() |
图例标题 |
project_* — 坐标系
| 函数 | 说明 |
|---|---|
project_cartesian() |
笛卡尔(缩放、翻转、比例、变换) |
project_polar() |
极坐标 |
project_parallel() |
平行坐标 |
project_map() |
地理投影 |
split_* — 分面
| 函数 | 说明 |
|---|---|
split_wrap() |
环绕分面 |
split_grid() |
网格分面 |
compose_* — 多图组合
| 函数 | 说明 |
|---|---|
compose_grid() |
网格排列 |
compose_inset() |
浮动嵌入 |
compose_marginal() |
散点 + 边际分布 |
主题
| 函数 | 说明 |
|---|---|
style() |
应用 ggplot2 主题 |
style_default() |
恢复 plotit 内置主题 |
导出
| 函数 | 说明 |
|---|---|
export() |
渲染为文件(pdf、png、svg 等) |
自定义扩展
| 函数 | 说明 |
|---|---|
make_mark() |
基于任意 ggplot2 geom 注册自定义 Mark |
make_theme() |
创建可复用的主题预设函数 |
文档
完整文档见 zorrooz.github.io/plotit。
贡献
plotit 处于早期开发阶段。欢迎在 GitHub Issues 上提交 bug 报告、功能请求和 Pull Request。
许可证
plotit 基于 MIT 许可证发布。详见 LICENSE。