9

我想使用 Plots.jl 为一组子图添加一个全局标题。

理想情况下,我会做类似的事情:

using Plots
pyplot()
plot(rand(10,2), plot_title="Main title", title=["A" "B"], layout=2)

但是,根据Plots.jl 文档,该plot_title属性尚未实现:

整个地块的标题(不是子地块)(注:目前未实施)

与此同时,有什么办法可以解决吗?

我目前正在使用pyplot后端,但我并没有特别依赖它。

4

4 回答 4

8

这有点像 hack,但应该与后端无关。基本上创建一个新图,其中唯一的内容是您想要的标题,然后使用layout. 这是使用GR后端的示例:

# create a transparent scatter plot with an 'annotation' that will become title
y = ones(3) 
title = Plots.scatter(y, marker=0,markeralpha=0, annotations=(2, y[2], Plots.text("This is title")),axis=false, grid=false, leg=false,size=(200,100))

# combine the 'title' plot with your real plots
Plots.plot(
    title,
    Plots.plot(rand(100,4), layout = 4),
    layout=grid(2,1,heights=[0.1,0.9])
)

产生:

在此处输入图像描述

于 2019-10-18T13:05:12.817 回答
1

使用pyplot后端时,您可以使用PyPlot命令来更改Plots图形,参见。使用 Julia Plots 访问后端特定功能

要为整个图形设置标题,您可以执行以下操作:

using Plots
p1 = plot(sin, title = "sin")
p2 = plot(cos, title = "cos")
p = plot(p1, p2, top_margin=1cm)
import PyPlot
PyPlot.suptitle("Trigonometric functions")
PyPlot.savefig("suptile_test.png")

需要显式调用PyPlot.savefig才能查看PyPlot函数的效果。

请注意,PyPlot当您使用Plots函数时,使用接口所做的所有更改都将被覆盖。

于 2017-03-30T09:48:23.170 回答
1

Plots.jl 的更新版本支持该plot_title属性,该属性为整个绘图提供标题。这可以与个别地块的个别标题相结合。

using Plots   

layout = @layout [a{0.66w} b{0.33w}]
LHS = heatmap(rand(100, 100), title="Title for just the heatmap")
RHS = plot(1:100, 1:100, title="Only the line")
plot(LHS, RHS, plot_title="Overall title of the plot")

或者,您可以直接为现有绘图设置标题。

p = plot(LHS, RHS)
p[:plot_title] = "Overall title of the plot"
plot(p)

示例图,由上面的代码生成

于 2021-10-25T19:21:14.263 回答
0

subplotsPlot类型的字段,每个子图都有一个名为的字段:attr,您可以修改和重新display()绘制图。尝试以下操作:

julia> l = @layout([a{0.1h} ;b [c; d e]])
Plots.GridLayout(2,1)

julia> p = plot(randn(100,5),layout=l,t=[:line :histogram :scatter :steppre :bar],leg=false,ticks=nothing,border=false)

julia> p.subplots
5-element Array{Plots.Subplot,1}:
 Subplot{1}
 Subplot{2}
 Subplot{3}
 Subplot{4}
 Subplot{5}

julia> fieldnames(p.subplots[1])
8-element Array{Symbol,1}:
 :parent     
 :series_list
 :minpad     
 :bbox       
 :plotarea   
 :attr       
 :o          
 :plt

julia> for i in 1:length(p.subplots)
           p.subplots[i].attr[:title] = "subtitle $i"
       end

 julia> display(p)

您现在应该在每个中看到一个标题subplot

于 2017-03-29T07:22:51.770 回答