专栏首页庄闪闪的R语言手册私人定制日历代码改进

私人定制日历代码改进

简介

2021年即将到来,小编学习了calendR这个包,并写了两篇推送。分别为:

R可视乎|2021年日历大派送

calendR包—私人定制专属日历

并开源了自己的代码在github上,但是细心的读者发现代码还存在可以优化的地方。

这里十分感谢楚新元师兄,对我给出的代码进行了优化,并分享了修改后的代码和私人日历。

以下给出优化的几个方面:

1.导出图片中文文字问题

大家知道Rstudio导出带中文图会出现乱码的形式(或者说是省略号的情况),如下所示:

对于下这个问题,我在前段时间转载过R语言统计与绘图公众号的一篇推文中有介绍过:加载Windows系统字体到图上,解决PDF导出字体无法显示的问题。这里我们采用的是其中的一种方法:使用showtext包,将中文字体(楷书kaishu等)进行导入,并在calendR()中加入font.family = "kaishu"。这样最后导出的结果就不会存在乱码的情况。结果如下:

2.输出pdf文件名重复

原来代码重复运行时,pdf输出会存在报错情况,如下所示:

当时为了方便直接改文件名了。现在对代码进行优化,在输出日历前加入以下代码来判断文件是否存在,如果存在先删除。这样就不会存在文件名重复的情况,如果你想保留原来的文件,可以自己写代码把这段代码换了。

if (file.exists("My_calendar2021.pdf") == T) {
        file.remove("My_calendar2021.pdf")
}

完整代码优化

calendR()函数内部的各个参数调节给出了细致的中文解释,这样读者可以进行轻松的修改。生成年度日历图优化后代码如下:

library(calendR)
library(showtext)
setwd("C:\\Users\\ZLL\\Desktop\\wechat\\庄闪闪原创\\R\\R可视乎\\2020.11.13日历\\wechat\\calendar\\读者(楚新元)")
font_add("kaishu", "simkai.ttf")
showtext_auto()

# 判断文件是否存在,如果存在先删除
if (file.exists("calendar2021.pdf") == T) {
  file.remove("calendar2021.pdf")
} 



calendR(
  # 定义标题
  # title, # 如果缺失,则以年或年月替代
  year = 2021,
  title.size = 40,
  title.col = "white",  # 年份字体颜色
  
  # 定义副标题
  subtitle = "每天好心情",
  subtitle.size = 10,
  subtitle.col = "gray30",
  
  # 定义月份
  mbg.col = "#274652",   # 月份背景颜色
  months.col = "white",  # 月份字体颜色 
  months.size = 10, # 定义月份字体大小
  months.pos = 0.5, # 定义月份水平居中
  
  # 定义周
  weeknames = c(
    "Mo", "Tu", "We", "Th", "Fr", 
    "Sa", "Su"
  ),  # 定义周名称
  weeknames.col = "white",  # 周字体颜色
  weeknames.size = 4.5, # 定义周字体大小
  start = "M",  # 设置从周一开始

  # 定义日期
  days.col = "gray30", # 定义日期的颜色
  day.size = 3, # 定义日期的字体大小
  special.days = "weekend",  # 定义周末为特殊日期
  special.col = "lightblue",  # 特殊日期背景颜色
  low.col = "white", # 非特殊日期背景颜色
  lty = 0,  # 去掉边框线 
  col = "white",
  
  # 定义背景、放置方向、生成文件
  font.family = "kaishu", # 设置字体
  orientation = "landscape",  # 垂直放置
  papersize = "A4", # 设置纸张大小
  bg.img = "./img.jpg", # 设置背景图片
  pdf = TRUE, # 生成pdf文件
  doc_name = "calendar2021"  # 给pdf文件命名
)

showtext_auto(FALSE)

3.小编有话说

最近有个想法把这个“无用”的例子做成一个shiny界面,用户只需点击调节参数即可,不需要写代码,并且最终可以导出pdf版本,该结果已经完成,这里先给出动画结果。

当然该版本还是非常差的,还需要进一步优化,例如:

  1. 参数设置选项太少,只有年度日历。以后需要加入更多参数选项,颜色自定义版本;
  2. 可以考虑加个按钮,一键导出pdf或者图片;
  3. 添加节假日和重要日期信息,自动化加入定制日历中;
  4. 部署到网页上,重要日期自动发邮件提醒,可以使用travis;

小编争取在年底开源项目(有机会的话部署到网页上)。期间会实时给出项目进展情况,也欢迎各位大佬们给出建设性建议。我的联系方式可通过公众号菜单的[资源分享]中找到。

本文分享自微信公众号 - 庄闪闪的R语言手册(Zss_R4ds),作者:庄闪闪

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-12-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • R- calendR包 - 私人定制专属日历

    前两天给大家派送了小编自己定制的2021年日历和月历,看到好多读者下载了,小编表示很欣慰?。上期推送可见:R可视乎|2021年日历大派送

    DataCharm
  • Paradise勒索软件源代码被公开,攻击者可进行“私人定制”

    Paradise勒索软件的完整源代码已被发布在一个黑客论坛上,这将使任何网络罪犯都能够开发自己的定制版勒索软件。

    FB客服
  • R可视乎|2021年日历大派送

    一眨眼2020即将过去,2020年是杂乱的一年,感谢我们还活着。让我们放下这年,展望2021年吧。要不用R给2021年做个私人定制版日历吧?

    庄闪闪
  • 日拟修个人信息保护法助大数据利用

    大数据文摘
  • 【聚焦】大数据时代 谁动了我们的隐私

    乐享电商的便利,憧憬智慧城市的美好,期待“互联网+”的无限可能……大数据正在改变我们的生活以及理解世界的方式。在这个万物互联的时代里,技术的进步让每个人都可能成...

    小莹莹
  • 一个优秀的镜像仓库是什么样的?

    魏新宇
  • AI时代,如何平衡的用户体验和隐私矛盾

    提供个性化客户体验的方式远远超过了通过自动电子邮件机器式的向用户发送信息带来的感受。个性化客户体验不仅需要提供商提前了解客户的兴趣、经历以及潜在的意图,并用这些...

    数据通20847430
  • 区块链技术公司浅谈如何解决看病难问题

    对医疗的关注源于之前异常火爆的一部电影《我不是药神》,整个故事源于这个天价药。因为天价,有人吃到倾家荡产,有人吃到另寻他方,用低价假药替代,。不是所有的假药都可...

    qq2398788267
  • 快速入门GitHub

    GitHub在程序开发领域家喻户晓,现在几乎整个互联网的开发者都将版本管理工具GitHub作为版本控制的首选,甚至像笔者这样非开发者,一名每天和数据打交道的人也...

    皮大大
  • 通信人格权初探:刍议号权

    王红霞  中南大学法学院博士后,中南大学法学院讲师 一、通讯社交利益之发轫 社会交往自人之产生就已经开始,是人的基本需求和存在方式。美国社会学家库利主...

    腾讯研究院
  • 币聪百科:ZenCash改名为Horizen,新品牌战略正在加速布局

    品牌重塑是一种改变公司或组织的企业形象的策略。这可能包括名称,术语,徽标,设计或这些的组合。这种变化的实质是为公司或公司的产品和服务提供新的外观和感觉。这不仅适...

    币聪财经
  • git入门大全

    GitHub在程序开发领域家喻户晓,现在几乎整个互联网的开发者都将版本管理工具GitHub作为版本控制的首选,甚至像笔者这样非开发者,一名每天和数据打交道的人也...

    皮大大
  • Android11测试预告片

    用户5521279
  • 一个披萨电影夜,你到底泄露了多少个人数据?

    大数据文摘
  • 保护日志中的用户隐私数据

    与中国人“愿意”用隐私交换便利性的心态完全不同,欧美国家在个人隐私保护方面明显走得更早也更远一些。在2018年5月GDPR发布前后的一段时间里,保护个人隐私相关...

    极客人
  • 区块链技术公司 预测区块链以后的生活

    与任何新兴技术一样,Web 3.0 仍在不断完善,它的场景将真实的发生在我们身边,甚至就是我们自己身上,人们将可以通过 DApps,实现和其他服务的交互。涉及的...

    用户3126099
  • 从这5个场景, 看MPC多方安全计算的行业应用

    在我们之前的“多方安全计算”系列文章中,我们首先通过姚期智教授的“百万富翁问题”引出了数据安全计算这个密码学话题,并介绍了多方安全计算在数据隐私中的应用场景。第...

    区块链大本营
  • 2019年20个最佳版本控制系统

    版本控制工具的核心是以简单的方式工作。它跟踪所做的协作更改,并确保每个协作者都知道并可以访问项目的最新版本。由于不同的项目各不相同,VCS工具也有各种产品。此外...

    Blue姐
  • 日志中的用户隐私安全

    对于敏捷团队,安全卡应该提到比业务卡更高的优先级,同样需要放在backlog里面进行track,需要kick off、deskcheck,需要一个正经的流程或者...

    ThoughtWorks

扫码关注云+社区

领取腾讯云代金券