利用Plots包可视化数据,如何显示中文标题、图例、坐标等?

Plots具有强大的可视化功能,同时也具有丰富的背景选项,但是似乎无法正常显示中文标题、中文图例和中文坐标等,感觉中文兼容性始终是个bug.

  1. 尝试了一下,在 pyplot、plotly 和 gr 后端中,貌似只有 plotly 对中文支持不错 ↓
using Plots
plotly()   # plotly backends
plot(1:10, rand(10), title="标题", xlabel="x 轴", ylabel="y 轴", 
    label="图例", xtickfont = font(15, "Courier"))

  1. 但是 plotly 在使用数组 label 作图例的时候有问题 ↓

pyplot 后端 ↓

gr 后端支持数组图例 ↓

【Julia 0.6 环境,Plots: 0.16.0】

1 个赞

谁去给Plots他们提个issue?关注中文支持的。

非常感谢您的回复,总算解决了部分问题,但是这个结果就比较尴尬了~~~:sweat_smile::sweat_smile:
曾经因为中文显示问题差点放弃Julia,但是其他优点使俺念念不忘!!

可能人家不鸟~~

修复issue需要时间的,要等等

利用plotly在使用数组label的时候,将其中的逗号去掉试试。
如下:
plotly()
plot(rand(10,2), label = [“aa” “bb”])

好久以前的坟,今天挖一把,主要是pyplot和gr后端。
首先需要知道Plots里面设定字体有这样几个选项
titlefont, tickfont, legendfont, guidefont, legendtitlefont.

  1. 在pyplot里面用中文比较简单,只要在matplotlibrc里面加入默认中文字体就好了,或者将上述每个字体都设置好。
    font.sans-serif : Microsoft YaHei

    using Plots
    pyplot()
    plot(rand(10), title="标题", xlabel="x 轴", ylabel="y 轴",
            label="图例",titlefont="SimSun",tickfont="Times New Roman",legendfont="SimHei",guidefont="KaiTi")
    

Figure_1

  1. 对于gr,由于gr默认的编码是Latin-1,所以需要先给他调成utf-8。但是测试发现gr的字体好像不太好调。。反正像pyplot那样直接调是不行的,默认的只有宋体,有点丑了。。

    ENV["GKS_ENCODING"] = "utf-8"
    using Plots
    plot(1:10, rand(10), title="标题", xlabel="x 轴", ylabel="y 轴", label="图例")
    

Figure_2

2 个赞

楼上正解。空格是1x2的矩阵,逗号是向量。

请问,关于xlabel和ylabel的(默认居中)位置可以修改吗?

PlotsGarble
自从换更到Julia 1.6 之后,可视化好像就不能显示中文,即使用:ENV[“GKS_ENCODING”] = “utf-8”
也不能解决,哪为大佬能解决,请指点一下!

1 个赞

Julia 1.6 的中文画图测试

版本信息

julia> versioninfo()
Julia Version 1.6.2
Commit 1b93d53fc4 (2021-07-14 15:36 UTC)
Platform Info:
  OS: Windows (x86_64-w64-mingw32)
  CPU: Intel(R) Core(TM) i5-9400F CPU @ 2.90GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-11.0.1 (ORCJIT, skylake)

(@v1.6) pkg> st
      Status `C:\Users\woclass\.julia\environments\v1.6\Project.toml`
  [28b8d3ca] GR v0.58.1
  [8314cec4] PGFPlotsX v1.3.2
  [58dd65bb] Plotly v0.4.0
  [a03496cd] PlotlyBase v0.5.4
  [f0f68f2c] PlotlyJS v0.14.1
  [91a5bcdd] Plots v1.21.3
  [d330b81b] PyPlot v2.9.0

PlotlyJS

plotly()
plot(rand(10,2), label = ["折线① 🌊" "折线② 🌋"],
    title="标题 鱼群数量🐟", xlabel="x 轴", ylabel="y 轴", 
    xtickfont = font(15, "Courier"))

  • 图像可交互

GR

ENV["GKS_ENCODING"] = "utf-8"
using Plots
gr()

default(fontfamily="SimHei")
plot(rand(10,2), label = ["折线① 🌊" "折线② 🌋"],
    title="标题 鱼群数量🐟", xlabel="x 轴", ylabel="y 轴")

image

PyPlot

pyplot()

rcParams = PyPlot.PyDict(PyPlot.matplotlib."rcParams")
fss = rcParams["font.sans-serif"]
rcParams["font.sans-serif"] = ["SimHei", "Segoe UI Emoji", fss...]
rcParams["font.family"] = "sans-serif"

plot(rand(10,2), label = ["折线① 🌊" "折线② 🌋"],
    title="标题 鱼群数量🐟", xlabel="x 轴", ylabel="y 轴")

设置了 emoji 字体还是不行,有待深究。
image

1 个赞

versionInfo_Julia PackageInfo PlotsAssyPlotsGarble02

可是问题依旧,我用的是ATOM+JULIA,如果用jupytor 则没有上述问题!

谢谢woclass的回答,请问您用的是什么IDE

直接用的 julia REPL + Win Terminal,ATOM 的 Juno 都已经弃坑了,早日换 VSCode

1 个赞

多谢提醒,我再试试

到了julia 1.70,GR中文又废了

我这边看起来没问题。
(julia-REPL 有乱码是我的字体问题,但不影响画图)

1 个赞