让Plots.jl支持中文标题

Julia Plots啥都好,就是原生对于Unicode的支持还不完善(可见用Julia的国人似乎不多)。这篇文章简要汇总一下几个不同的backend对于中文的workaround。

GR Backend

GR在支持Unicode字符上进展感觉其实不积极。具体可以看这个issue,修了一年还是没有比较好的成果(作者说是一个extensive patch...估计一开始在架构里写死了),只修到了支持Latin-1的地步,目前提供的临时解决方案是:

ENV["GKS_ENCODING"]="utf-8"
using Plots

在Windows上实测对于png格式的图片还是不行,但是对于SVG是可以的(但是因为计算布局的时候字符串长度算的是有问题的,所以legend的框会偏小)。

PyPlot Backend

PyPlot背后调用的是matplotlib,因此PyPlot默认对于中文的支持不利主要也来自于matplotlib对中文的支持问题。对于后者网上改rcParams的解决方案已经比较普及了。在Julia里面,我们只需要把rcParams暴露出来改就行了:

using Plots
pyplot()
rcParams = Plots.PyCall.PyDict(Plots.PyPlot.matplotlib."rcParams")
rcParams["font.sans-serif"] = ["Sarasa UI SC"]
rcParams["axes.unicode_minus"] = false

其中的"Sarasa UI SC"可以替换成电脑上安装的中文字体。这样中文标题就一点问题也没有了,但是似乎在Juno里面PyPlot画出来的图不会自动缩放,令强迫症稍微感到一丝不适。

PlotlyJS Backend

原生支持。

InspectDR Backend

原生支持。