天道酬勤,学无止境

将全局标题添加到 Plots.jl 子图(Adding global title to Plots.jl subplots)

问题

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

理想情况下,我会做这样的事情:

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

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

整个情节的标题(不是子情节)(注意:当前未实施)

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

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

回答1

这是一个小技巧,但应该与后端无关。 基本上创建一个新图,其中唯一的内容是您想要的标题,然后使用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])
)

产生:

回答2

使用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函数的效果。

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

回答3

subplotsPlot类型的字段,每个 subplot 都有一个名为: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看到一个标题

回答4

最新版本的 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)

标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Adding global title to Plots.jl subplots
    I would like to add a global title to a group of subplots using Plots.jl. Ideally, I'd do something like: using Plots pyplot() plot(rand(10,2), plot_title="Main title", title=["A" "B"], layout=2) but, as per the Plots.jl documentation, the plot_title attribute is not yet implemented: Title for the whole plot (not the subplots) (Note: Not currently implemented) In the meanwhile, is there any way around it? I'm currently using the pyplot backend, but I'm not especially tied to it.
  • 如何使用 Plots.jl 缩放字体大小(How to scale the fontsizes using Plots.jl)
    问题 有没有办法一次重新调整所有字体大小(图例、刻度标签、轴标签……)? Filippo Vicentini 在 Slack 上的原始问题。 回答1 可以使用titlefontsize 、 tickfontsize 、 legendfontsize 、 tickfontsize 、 guidefontsize和legendtitlefontsize属性控制单个字体大小,但我知道这可能非常乏味。 还有thickness_scaling属性。 plot(rand(10), thickness_scaling = 0.5) 然而,这也会影响线宽。 第三种选择是调用 Plots.scalefontsizes(α) 按因子α缩放所有字体大小。 这会更改所有后续绘图的全局字体大小默认值,并且可以使用以下命令撤消 Plots.scalefontsizes(1 / α) Daniel Schwabeneder 在 Slack 上的回答。
  • 如何使用 Plots.jl 在图像上绘图?(How plot on Images with Plots.jl?)
    问题 我想使用 Plots.jl 绘制图像,例如简单的正弦曲线。 这是我的代码: using Plots using Images gr() h = 400 w = 600 a = Array(RGB{FixedPointNumbers.UFixed{UInt8,8}}, h, w) img = Image(a) p=plot(img) x = collect(0:0.1:2π) plot!(x,sin(x)) png("Test") 但我得到错误的结果。 如何正确地做到这一点? 回答1 这是一个简单的例子,我希望能给你一些线索: julia> plot(img) julia> plot!(x->200sin(.05x)+300, 0, 700, w=5) 您可能只想确保绘制到与图像匹配的正确坐标。
  • How plot on Images with Plots.jl?
    I want using Plots.jl for plot on Images, for example simple sinusoid. Here my code: using Plots using Images gr() h = 400 w = 600 a = Array(RGB{FixedPointNumbers.UFixed{UInt8,8}}, h, w) img = Image(a) p=plot(img) x = collect(0:0.1:2π) plot!(x,sin(x)) png("Test") But I get wrong result. How do this correctly?
  • How to scale the fontsizes using Plots.jl
    is there a way to rescale all the fontsizes (legend, tickslabels, axislabels…) at once? Original question from Filippo Vicentini on Slack.
  • matplotlib绘图:散点图、折线图、柱状图、水平条形图、饼图和直方图
    目录 数据可视化Matplotlib安装和导入库安装Matplotlib库导入Matplotlib库中的`pyplot`子库 一、Matplotlib基础知识1. Figure对象1.1 定义1.2 划分子图1.3 设置中文字体1.4 添加标题1.5 调整子图 二、散点图引入scatter()函数 二、折线图plot()函数 三、柱状图1. 普通柱形图2. 并列柱形图3. 堆叠条形图4. 柱线混合图 四、水平条形图五、饼图五、直方图 ) 数据可视化 数据分析阶段:理解和洞察数据之间的关系算法调试阶段:发现问题,优化算法项目总结阶段:展示项目成果 Matplotlib Matplotlib 是Python中类似 MATLAB 的绘图工具,可以快速方便地生成高质量的图标 安装和导入库 安装Matplotlib库 Anaconda:安装了anaconda之后,Matplotlib就已经安装好了pip pip install matplotlib 导入Matplotlib库中的pyplot子库 import matplotlib.pyplot as plt matplotlib.pyplot是一个有命令风格的函数集合,它看起来和MATLAB很相似。每一个pyplot函数都使一副图像做出些许改变,例如创建一幅图,在图中创建一个绘图区域,在绘图区域中添加一条线等等。在matplotlib
  • TensorFlow2.1入门学习笔记(2)——Matplotlib数据可视化
    文章首发:xmoon.info 在正式学习tensorflow2.0之前需要有一定的python基础,对numpy,matplotlib等库有基本的了解,笔者还是AI小白,通过写博客来记录自己的学习过程,同时对所学的东西进行总结。主要学习的资料西安科技大学:神经网络与深度学习——TensorFlow2.0实战,北京大学:人工智能实践Tensorflow笔记博客从tf常用的库开始,需要学习python基础的朋友推荐菜鸟教程 TensorFlow2.0学习笔记(2)——Matplotlib数据可视化 数据可视化: 数据分析阶段:理解和洞察数据之间的关系 算法调试阶段:发现问题,优化算法 项目总结阶段:展示项目成果 Matplotlib:第三方库,可以快速生成高质量图表 安装Matplotlib库 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple matplotlib 导入Matplotlib库 import matplotlib as plt #可用pyplot库绘制平面图,常用import matplotlib.pyplot as plt导入 1.常用函数 figure对象:创建画布 pit.figure(figsize=(3,2),facecolor="green") #创建画布 plt.plot() #绘制空白图形
  • 如何在Matplotlib中的子图中添加标题?(How to add title to subplots in Matplotlib?)
    问题 我有一个包含许多子图的图。 fig = plt.figure(num=None, figsize=(26, 12), dpi=80, facecolor='w', edgecolor='k') fig.canvas.set_window_title('Window Title') # Returns the Axes instance ax = fig.add_subplot(311) ax2 = fig.add_subplot(312) ax3 = fig.add_subplot(313) 如何为子图添加标题? fig.suptitle为所有图形添加标题,尽管存在ax.set_title() ,但后者未向我的子图添加任何标题。 感谢您的帮助。 编辑:更正了有关set_title()错字。 谢谢罗格·卡西斯 回答1 ax.title.set_text('My Plot Title')似乎也可以工作。 fig = plt.figure() ax1 = fig.add_subplot(221) ax2 = fig.add_subplot(222) ax3 = fig.add_subplot(223) ax4 = fig.add_subplot(224) ax1.title.set_text('First Plot') ax2.title.set_text('Second Plot
  • 许多子图的 Matplotlib 全局图例(Matplotlib global legend for lots of subplots)
    问题 我在弄清楚如何强制 matplotlib 在我想要的地方添加图例时遇到了一些问题。 我目前的数字是这样的: 我使用以下脚本生成了这个 2 分页图: n = 1 trn = True for i in diff.keys(): plt.subplot(8, 4, n) plt.xlim([0, rounds + 1]) plt.locator_params(axis='y', nbins=5) if PEPTIDE_KD[i] == 1e-2: plt.plot(x_cord, [x[0] for x in diff[i]], 'ro--', label='asd') plt.plot(x_cord, [x[1] for x in diff[i]], 'rv--', label='bsd') else: plt.plot(x_cord, [x[0] for x in diff[i]], 'bo--', label='asd') plt.plot(x_cord, [x[1] for x in diff[i]], 'bv--', label='csd') plt.title(i) n += 1 if n == 33 and trn: n = 1 trn = False plt.suptitle('Ligand energies') plt.locator_params(axis=
  • MATLAB 子图标题和轴标签(MATLAB subplot title and axes labels)
    问题 我有以下脚本来最终绘制一个 4 x 2 的子图: files = getAllFiles('preliminaries'); n = size(files); cases = cell(1, n); m = cell(1, n); for i = 1:1:n S = load(files{i}); cases{i} = retransmission_distribution(S); c = size(cases{i}); m{1,i} = cell(1, c(2)); %figure(i); str_size = size(files{i}); title_str = files{i}(5:str_size(2) - 4); title_str = strrep(title_str, '_', ' '); %title(title_str); for j = 1:1:c(2) [x, y] = hist(cases{i}{1,j}); m{1,i}{1,j} = [x; int32(y)]; % subplot(4, 2, j); % xlabel('Number of Retransmissions'); % ylabel('Number of Occurrences'); % bar(y, x, 'histc'); end end 但是,根据我当前的命令序列顺序
  • 子图组的标题(Title over group of subplots)
    问题 有许多子图,每个子图都有自己的标题。 如何在所有这些子图组上添加标题? 我希望这个标题显示在顶部中心。 x = linspace(-5,5); y1 = sin(x); subplot(2,5,[1:2]) plot(x,y1) title('y=sin(x)') y2 = cos(x); subplot(2,5,[3:4]) plot(x,y2) title('y=cos(x)') y3 = tan(x); subplot(2,5,[5,10]) plot(x,y3) title('y=tan(x)') y4 = sin(2*x); subplot(2,5,[6:7]) plot(x,y1) title('y=sin(2x)') y5 = cos(2*x); subplot(2,5,[8:9]) plot(x,y2) title('y=acos(2x)') 回答1 自 Matlab 2018b 起,新函数 sgtitle 为子图组添加标题,只需添加sgtitle('Subplot Title'); . 它不需要工具箱。 例如: subplot(1,2,1) plot(cos(0:40)); title('cos'); subplot(1,2,2) plot(sin(0:40)) title('sin'); sgtitle('Trigo'); 回答2
  • [matplotlib.pyplot]plt绘制基础图表 笔记
    目录 Matplotlib绘图基础图形的组成图形的层次Matplotlib的三个层次底层-后台层(Backends Layer)特点 中间层-艺术家层(Artist Layer)特点 上层-脚本层(Scripting Layer)特点 小结-1绘制基本的图表绘制散点图scatter绘制条形图bar与直方图hist绘制饼图pie绘制箱线图boxplot绘制折线图plot绘制核密度图plot 小结-2添加文字参数 调整坐标轴绘制子图小结-3面向对象(Object oriented)的API接口代码分析面向对象比较pylot模块提供的函数与Axes对象自带的函数常见Matplotlib类 高级用法误差条图形置信区间的计算 热力图(heatmap) Matplotlib绘图 基础 图形的组成 图形的最外面是文字部分,包括标题,x轴标签,y轴标签。其次是主刻度标签和副刻度标签(不太常用),然后是坐标轴,最里面是数据。 数据的表现形式多种多样,这个例子中有散点和折线。如果存在多种图形样式可以添加图例。 图例尽量不要遮挡住数据,一般会放在角落。 根据数据的特点,还会添加背景网格帮助我们比较数据的变化或大小。 图形的层次 在人工绘画时我们都需要一张纸,在Matplotlib中,这张纸叫画布(图中蓝色框,英文为 Canvas)。 其次需要绘图框(图中绿色框,英文为 Figure)
  • Julia PyPlot:绘制 3D 表面,将表面颜色作为表面梯度的范数(Julia PyPlot: plot 3D surface with as face colors the norm of surface gradient)
    问题 有谁知道如何使用 Julia 的 Pyplot 绘制 3D 表面,例如将表面梯度的范数作为面部颜色? 类似于 Python 的这个主题:Color matplotlib plot_surface command with surface gradient 回答1 我看到了这个,我只需要让它工作。 使用 PyPlot 后端,它几乎被 Plots.jl 支持开箱即用。 我只需要换一个自定义 matplotlib 着色器来应用不同的 z 矩阵。 您会注意到我正在访问 numpy 的梯度函数(通过PyCall导入),并且我正在包装梯度矩阵G以便它不会被分成列。 总而言之......比python示例简单得多! using Plots; pyplot(); x = y = LinRange(-5.0, 5.0, 30) z = sin(sqrt(Float64[xi^2+yi^2 for xi = x, yi = y])) surface(x, y, z, alpha = 0.7) using PyCall Gx, Gy = Plots.pynb.pymember(:gradient)(z) surface(x, y, z, alpha = 0.8, zcolor = wrap(G))
  • python 中 第3章 Matplotlib数据可视化基础
    文章目录 如何查看完整版!!(代码+图片)第3章 Matplotlib 数据可视化基础3.1 掌获绘图基础语法与常用参数3.1.1 掌获pyplot基础语法1.创建画布与创建子图2.添加画布内容3.存与展示图形代码 3-1 pyplot中基础绘图语法代码3-2 包含子图绘制的基础语法 3.1.2 设置pyplot的动态rc参数 代码 3-4 调节字体的rc参数 任务3.2分析特征间的关系3.2.1 绘制散点图 代码 3-5 绘制2000-2017各季度国民生产总值散点图代码 3-6 绘制2000-2017各产业各季度国民生产总值散点图 3.2.2 绘制折线图代码 3-7 绘制2000-2017年各季度国民生产总值折线图代码 3-8 绘制点线图代码3-9 绘制2000-2017年各产业各季度生产总值的折线散点图 3.2.3 任务实现1. 绘制2000-2017各产业与行业的国民生产总值散点图代码 3-11 绘制2000-2017年各产业与行业的国民生产总值折线图 任务 3.3 分析特征内部数据分布与分散状况3.3.1 绘制直方图代码 3-12 绘制2017年第一季度各产业国民生产总值直方图3.3.2 绘制饼图代码3-13 绘制2017年第一季度各产业国民生产总值饼图 3.3.3 绘制箱线图代码3-14 绘制2000~2017年各产业国民生产总值箱线图 3.3.4 任务实现1
  • 原创 | matplotlib绘图教程,设置标签与图例
    大家好,欢迎大家阅读周四数据处理专题,我们继续介绍matplotlib作图工具。 在上一篇文章当中我们介绍了matplotlib这个包当中颜色、标记和线条这三种画图的设置,今天我们同样也介绍三种新的设置。分别是标题、轴标签以及图例,这三个内容也是非常实用并且常用的。颜色、线条、标记这些设置的是图像本身的一些属性,而标题、轴标签这些数据是额外提供的补充数据,所以这两者的内在逻辑是不同的。 设置标题 和公众号一样,图像的标题也很重要,它直接告诉我们这幅图表达的内容。举个例子来说你画了logistics的函数图像,但是给了一个外行人(比如老板)看,他是无论怎样也看不出来这究竟是什么意思的。所以我们需要标题,告诉看这幅图的人,这幅图到底画了一些什么数据。 基础设置设置标题的方法很简单,如果我们就只有一幅图画的话,直接通过plt.title来设置即可。 在子图中设置通过plt设置title非常方便,也是我们最常用的设置方法。但是对于多个子图的场景,我们就不能通过plt来设置title了,而是希望对于每一个子图都能够设置一个单独的title。 我们看一个之前的例子,我们之前用下面这段代码同时画出了两个图像: fig = plt.figure() ax1 = fig.add_subplot(2, 1, 1) ax2 = fig.add_subplot(2, 1, 2) ax1.plot
  • 如何为Seaborn Facet Plot添加标题(How to add a title to Seaborn Facet Plot)
    问题 如何为该海上情节添加标题? 让我们给它一个标题“我是标题”。 tips = sns.load_dataset("tips") g = sns.FacetGrid(tips, col="sex", row="smoker", margin_titles=True) g.map(sns.plt.scatter, "total_bill", "tip") 回答1 稍有更新,以seaborn 0.11.1: Seaborn的relplot函数创建一个FacetGrid并为每个子图赋予其自己的解释性标题: import seaborn as sns tips = sns.load_dataset('tips') rp = sns.relplot(data=tips, x='total_bill', y='tip', col='sex', row='smoker', kind='scatter') # rp is a FacetGrid; # relplot is a nice organized way to use it rp.fig.subplots_adjust(top=0.9) # adjust the Figure in rp rp.fig.suptitle('ONE TITLE FOR ALL') 如果像在原始示例中那样直接创建FacetGrid,则将获得列标签和行标签
  • Matplotlib-向子图中添加子图?(Matplotlib - adding subplots to a subplot?)
    问题 我正在尝试创建一个由2x2网格组成的图形,其中在每个象限中有2个垂直堆叠的子图(即2x1网格)。 不过,我似乎无法弄清楚该如何实现。 我最近得到的是使用gridspec和一些难看的代码(请参见下文),但是由于gridspec.update(hspace=X)更改了所有子图的间距,所以我仍然不在我想要的位置。 理想情况下,我想要的是,以下面的图片为例,减小每个象限内子图之间的间距,同时增加顶部和底部象限之间的垂直间距(即1-3和2-4之间)。 有没有办法做到这一点(使用或不使用gridspec)? 我最初的设想是生成每个子子图网格(即每个2x1网格)并将其插入到更大的2x2子图网格中,但是我还没有弄清楚如何向子图添加子图,即使有离开。 import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec plt.figure(figsize=(10, 8)) gs = gridspec.GridSpec(4,2) gs.update(hspace=0.4) for i in range(2): for j in range(4): ax = plt.subplot(gs[j,i]) ax.spines['top'].set_visible(False) ax.spines['right'].set
  • Python数据分析与应用--Matplotlib数据可视化基础之学习笔记
    #Matplotlib绘图基础 #1.创建画布与子图 #2.添加画布内容 #3.保存与显示图形 import numpy as np import matplotlib.pyplot as plt #pyplot基础绘图语法 data = np.arange(0,1.1,0.01) plt.title(‘lines’) ## 添加标题 plt.xlabel(‘x’)## 添加x轴的名称 plt.ylabel(‘y’)## 添加y轴的名称 plt.xlim((0,1))## 确定x轴范围 plt.ylim((0,1))## 确定y轴范围 plt.xticks([0,0.2,0.4,0.6,0.8,1])## 规定x轴刻度 plt.yticks([0,0.2,0.4,0.6,0.8,1])## 确定y轴刻度 plt.plot(data,data2)## 添加y=x^2曲线 plt.plot(data,data4)## 添加y=x^4曲线 plt.legend([‘y=x2’,'y=x4’]) plt.savefig(‘D:\pycharm file\数据分析与科学可视化\Matplotlib图片\pyplot的基础绘图语法.png’) plt.show() 包含子图绘制的基础语法 rad = np.arange(0,np.pi*2,0.01) ##第一幅子图 p1 = plt
  • matplotlib子图的行标题(Row titles for matplotlib subplot)
    问题 在matplotlib中,除了为整个图形设置的标题和为每个图块设置的标题之外,是否还可以为子图的每一行设置单独的标题? 这将与下图中的橙色文本相对应。 如果没有,您将如何解决这个问题? 在左侧创建一个单独的空子图列,并用橙色文本填充它们? 我知道可以使用text()或annotate()手动定位每个标题,但这通常需要进行大量调整,而且我有很多子图。 有更流畅的解决方案吗? 回答1 一个想法是创建三个“大子图”,给每个子图一个标题,并使它们不可见。 最重要的是,您可以创建较小的子图矩阵。 该解决方案完全基于本文,除了已更加注意实际删除背景子图。 import matplotlib.pyplot as plt fig, big_axes = plt.subplots( figsize=(15.0, 15.0) , nrows=3, ncols=1, sharey=True) for row, big_ax in enumerate(big_axes, start=1): big_ax.set_title("Subplot row %s \n" % row, fontsize=16) # Turn off axis lines and ticks of the big subplot # obs alpha is 0 in RGBA string! big_ax.tick
  • Matplotlib数据可视化基础
    Author:龙箬 数据科学与大数据技术专业 用数据改变世界! CSDN@weixin_43975035 “我可以怀疑一切,但我却不能怀疑我正在怀疑。” Matplotlib数据可视化基础 绘图基础语法与常用参数pyplot基础语法设置pyplot的动态rc参数 分析特征间的关系绘制散点图绘制折线图任务实现 分析特征内部数据分布与分散状况绘制直方图绘制饼图绘制箱线图任务实现 实训及操作分析1996~2015年人口数据特征间的关系分析1996~2015年人口数据各个特征的分布与分散状况读取鸢尾花数据集,使用循环和子图绘制各个特征之间的散点图绘制各个特征的箱线图,查看是否存在异常值 绘图基础语法与常用参数 pyplot基础语法 pyplot中的基础绘图语法: import numpy as np import matplotlib.pyplot as plt # %matplotlib inline表示在行中显示图片,在命令行运行报错 data=np.arange(0,1.1,0.01) plt.title('lines')#添加标题 plt.xlabel('x')#添加x轴名称 plt.ylabel('y')#添加y轴名称 plt.xlim((0,1))#确定x轴范围 plt.ylim((0,1))#确定y轴范围 plt.xticks([0,0.2,0.4,0.6,0.8,1])