网站建设用什么视频播放器,网页设计与制作难不难,郑州做企业网站的,昆明猫咪网站建设公司简介
小编在撰写学术论文时#xff0c;为了突出所提模型的优越性#xff0c;你可以通过放大图形中的局部位置来进行比较。尽管从全局来看#xff0c;各个方法的拟合效果都还不错#xff0c;但通过放大图中的特定区域#xff0c;可以更清楚地展示所提模型相对于其他模型的…简介
小编在撰写学术论文时为了突出所提模型的优越性你可以通过放大图形中的局部位置来进行比较。尽管从全局来看各个方法的拟合效果都还不错但通过放大图中的特定区域可以更清楚地展示所提模型相对于其他模型的优势。 例如你可以选择在图中放大一个具有显著差异的区域或者突出显示所提模型在某个关键阶段的表现。通过这种方式读者能够更加直观地观察所提模型的预测趋势并对其在特定情况下的优越性有更深刻的理解如上图。这样的展示方式将有助于更全面地展示所提模型的独特优势提高论文的可读性和说服力。
这种图在工业工程方向的顶级期刊中经常看到。本文小编将给出几种 R 中绘制局部细节放大图的方法。 注意小编搜到过 matlab 和 Origin 绘制局部细节放大图的文章。但是很少看到有人写 R 相关的教程。 初级版本
这章节给出利用 ggplot 包绘制模拟数据的线性图。下一章节将会介绍两种细节放大方法。
模拟数据产生
这里以一个模拟数据作为例子读者可以根据自身数据情况进行替换。
# 生成模拟数据
com_battery data.frame(Time 1:30,True cumsum(abs(rnorm(30,2,0.4))),Proposed cumsum(abs(rnorm(30,2,0.5))),Linear cumsum(abs(rnorm(30,2,0.4))), Power cumsum(abs(rnorm(30,2,0.1))),Exp cumsum(abs(rnorm(30,2,0.3))))基础绘图
以时间作为 x 轴各个模型拟合/预测值作为 y 轴。绘制出不同方法的拟合/预测对比图。
library(ggplot2)
library(tidyverse)
# 基础绘图
cols - c(black,#85BA8F, #A3C8DC,#349839,#EA5D2D,#EABB77,#F09594)
p com_battery %% pivot_longer(cols !Time, names_to Model, values_to Value) %%mutate(Model factor(Model, levels c(True, Proposed, Linear,Power,Exp))) %% ggplot(aes(Time,Value,col Model,shape Model)) geom_line() geom_point(size1.5,alpha0.8) scale_color_manual(values cols) theme_bw() theme(panel.grid element_blank()) #,legend.titleelement_text(size12), legend.textelement_text(size11) xlab(Time) ylab(Rate(%))可以看到各个方法的拟合/预测结果非常接近。此时可以通过放大局部细节来突出某个模型的优越性。
ggforce 包
ggforce 包中的 facet_zoom() 可以通过一行代码实现局部细节放大的效果。官网给出了各个参数的细节以及示例。
这里假设我们想对 xlim c(18, 24),ylim c(40, 43) 范围内的数据进行放大。只需要使用以下代码即可其中 zoom.size 0.4表示放大后的图形大小占比整个图的比例。
library(ggforce)
p facet_zoom(xlim c(18, 24),ylim c(40, 43), zoom.size 0.4)注意当然还有其他几个参数可以调整这里不做过多介绍。 如果你觉得这个图已经满足要求并且美观程度还不错的话。那你就随意使用吧但对于小编而言这里的灰色框太奇怪了不会改而且整个构造也很突兀。
所以小编打算直接基于 ggplot 包的思想自己添加内容并通过 patchwork 包对图进行合并复现出类似图一的效果。
patchwork 包
基于 ggplot 包我们再绘制一幅需要局部放大的图只需在 xlim() 和 ylim() 上做文章并去除标签和图例。
ppp p xlim(5,10) ylim(10,20) theme(legend.position none) xlab() ylab()之后将该图放到原图的合适位置即可可以使用 patchwork 包中的 inset_element() 实现该功能。 注意也可以使用cowplot包进行图形合并。相关推文见合并多幅图形、利用 cowplot 包快速对齐图片。 library(patchwork)
p inset_element(ppp, 0.01, 0.6, 0.6, 0.95, on_top TRUE)此时基本完成了我们的要求接下来进行一些细节处理添加选择放大位置的框添加指向箭头修改图例位置等注释在代码后。
p geom_rect(aes(xmin 5, xmax 10, ymin 10, ymax 20),fill transparent, color black, alpha 0, linetype dashed, linewidth 0.2) #添加选择放大位置的框theme(legend.position c(0.9,.2),legend.background element_rect(fill white, colour black)) #修改图例位置geom_segment(aes(x 7, xend 10, y 20, yend 38.3), col gray60, linewidth 0.2,linetype dashed,arrow arrow(length unit(0.2, cm), type closed)) # 添加指向箭头inset_element(ppp, 0.01, 0.6, 0.6, 0.95, on_top TRUE)小编有话说 模拟数据绘制出的效果可能不是很好本文主要是给出2种绘制局部细节的方法供大家参考。这是小编平常科研中出现的一种画图需求防止后续还会使用类似图形所以在这做个记录也分享给大家。 小编使用过 matlab 进行绘制这种图形发现 matlab 可以互动式选择放大位置以及展示位置非常方便。不知道这种功能是否可以借鉴到 R 中 如果有更好的方法欢迎读者们评论留言。也欢迎大家一键三连 注意本文所有代码已经上传至 Github 中欢迎下载使用。