引子
由于最近上网课,很多作业可以以电子版提交,需要绘制的电路图一下子变多了。之前一直采用手绘+circuitlab+multisim的绘图方式,但它们都有一些这样那样的缺点。手绘太累,multisim的排线以及符号功能有点难用,circuitlab应该是一种比较好的解决方案,但依然存在不支持Latex符号的缺陷,致使许多下标符号不能正常显示,且自定义芯片的功能比较差。
后来在逛知乎的时候发现了SchemDraw,只是一个Python下的电路图库,调用matplotlib库进行绘图,相比以上几个工具,其优点主要有下:
- 较为丰富的图形库(相比circuitlab)
- 方便的自定义元器件
- 支持Latex符号
- 元器件角度旋转调整
当然首先还是要劝退一波:
- SchemDraw不支持自动布线,所有的线长都需要手动配置,因此只适合抄图而不适合直接作图。
- SchemDraw适合键盘爱好者,对鼠标依赖者不友好。如果你偏爱word而不是latex/markdown,那么SchemDraw可能并不适合你。
安装
pip安装
|
|
基础使用
通用模板:
|
|
所有的绘制工作都需要通过d.add()
接口完成:
|
|
首先必须的是元件名称elm_def
,既可以是elements
包中包含的元器件,也可以是自定义的元器件,文后附有官方文档给出一些元器件。其后常用可选参数如下:
参数 | 说明 | 示例 |
---|---|---|
label=(string) |
标注,可用top/bot/rgt/lft 前缀设置位置 |
botlabel="$U_i$" |
d=(string) |
方向,默认值为上一元器件的方向 | d='left' |
theta=(float) |
方向角,0表示向右 | theta=-45 |
l=(float) |
长度,一般用d.unit 控制 |
l=d.unit/2 |
xy=(ele.anchor) |
元器件起始点 | xy=op.out |
anchor=(string) |
选择元器件的连接锚点 | anchor='out' |
to=(ele.anchor) |
设置终点,可用tox/toy 来设置单坐标 |
tox=op.in1 |
reverse=(bool) |
反转元器件 | reverse=True |
在绘图过程中,若有需要调用的元器件,则在添加该元器件时需要用变量记录记录:
|
|
推荐采用的绘图顺序是push()/pop()
的连续绘图方式,d.push()
是储存当前位置,d.pop()
则可以回到上一储存位置,下面用一个实例来说明该绘图过程。
|
|
在这张电路图中,绘图起点选择了左上角的A点,按照顺时针的顺序进行绘制,当遇到结点时,即使用d.push()
记录该节点,随后绘制支路,绘制完一条支路后使用d.pop()
返回节点继续绘制其他支路,直至图形完全绘制。
自定义元器件
暂时还没有这方面的例子,等我用到了再来补充QAQ
示例
|
|
|
|
|
|
|
|
元件速查表
更多详见官方文档。