博客中如何插入手绘风图表
个人是比较喜欢手绘手格的图表的,就收集了一下如何把一些图表的内容整理成手绘的风格。
plantuml 手绘风
对于流程图和活动图、状态图,主要都是使用的 plantuml 绘制,最近翻看了一下官方提供的主题,个人比较喜欢的主题有三个,其中 sketchy 是手绘风。
另外 minty 和 reddress-lightred 的风格也非常不错,适合用在正式的图表中。
matplotlib 手绘风
对于使用 Python 进行图表生成的人来说,这个就是一个比较常见的风格了,具体的结果如下,主要是使用 pyplot.xkcd 的主题进行绘图。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
with plt.xkcd():
fig, ax = plt.subplots(figsize=(6.5,4),dpi=100)
ax = df.plot.bar(color=["#BC3C28","#0972B5"],ec="black",rot=15,ax=ax)
ax.set_ylim((0, 100))
ax.legend(frameon=False)
ax.set_title("EXAMPLE01 OF MATPLOTLIB.XKCD()",pad=20)
ax.text(.8,-.22,'Visualization by DataCharm',transform = ax.transAxes,
ha='center', va='center',fontsize = 10,color='black')
chart.xkcd
chart.xkcd 是手绘风的 javascript 库,也是许多手绘风图表的基础库,可以通过引入对应的 js 包来直接绘制对应的图表。
https://timqian.com/chart.xkcd/
- 柱状图
<svg class="bar-chart"></svg>
<script src="https://cdn.jsdelivr.net/npm/chart.xkcd@1.1/dist/chart.xkcd.min.js"></script>
<script>
const svg = document.querySelector('.bar-chart')
const barChart = new chartXkcd.Bar(svg, {
title: 'github stars VS patron number', // optional
// xLabel: '', // optional
// yLabel: '', // optional
data: {
labels: ['github stars', 'patrons'],
datasets: [{
data: [100, 2],
}],
},
options: { // optional
yTickCount: 2,
},
});
</script>
- 堆叠柱状图
<svg class="stacked-bar-chart"></svg>
<script src="https://cdn.jsdelivr.net/npm/chart.xkcd@1.1.12/dist/chart.xkcd.min.js"></script>
<script>
const svgStackedBar = document.querySelector('.stacked-bar-chart');
new chartXkcd.StackedBar(svgStackedBar, {
title: 'Issues and PR Submissions',
xLabel: 'Month',
yLabel: 'Count',
data: {
labels: ['Jan', 'Feb', 'Mar', 'April', 'May'],
datasets: [{
label: 'Issues',
data: [12, 19, 11, 29, 17],
}, {
label: 'PRs',
data: [3, 5, 2, 4, 1],
}, {
label: 'Merges',
data: [2, 3, 0, 1, 1],
}],
},
});
</script>
- 饼图
<svg class="pie-chart"></svg> <script src="https://cdn.jsdelivr.net/npm/chart.xkcd@1.1/dist/chart.xkcd.min.js"></script> <script> const svg = document.querySelector('.pie-chart'); const pieChart = new chartXkcd.Pie(svg, { title: 'What Tim made of', // optional data: { labels: ['a', 'b', 'e', 'f', 'g'], datasets: [{ data: [500, 200, 80, 90, 100], }], }, options: { // optional innerRadius: 0.5, legendPosition: chartXkcd.config.positionType.upRight, }, }); </script>
cutecharts 手绘风
- 柱状图
from cutecharts.charts import Bar
from cutecharts.components import Page
from cutecharts.faker import Faker
def bar_base() -> Bar:
chart = Bar("Bar-基本示例")
chart.set_options(labels=Faker.choose(), x_label="I'm xlabel", y_label="I'm ylabel")
chart.add_series("series-A", Faker.values())
return chart
bar_base().render()
- 饼图
from cutecharts.charts import Pie from cutecharts.components import Page from cutecharts.faker import Faker def pie_base() -> Pie: chart = Pie("Pie-基本示例") chart.set_options(labels=Faker.choose()) chart.add_series(Faker.values()) return chart pie_base().render()