数据太多展示不全?试试阿基米德螺线吧!

2021
08/31

+
分享
评论
作图丫
A-
A+

通过阿基米德螺线对长轴数据进行可视化,可以解决由于数据量过大造成的可视化难题!


导语

GUIDE 

阿基米德螺线(亦称等速螺线),得名于公元前三世纪希腊数学家阿基米德。阿基米德螺线是一个点匀速离开一个固定点的同时又以固定的角速度绕该固定点转动而产生的轨迹。阿基米德在其著作《螺旋线》中对此作了描述。 

 
背景介绍




对于长轴数据的可视化,使用常规的图形往往不能够完全展示,小编就给大家推荐一个新发布的R包-spiralize,通过阿基米德螺线来对数据进行高分辨率的可视化,能够让我们的图形更加高大上!


 
 
R包安装




install.packages("spiralize")library(spiralize)##最新版本library(devtools)install_github("jokergoo/spiralize")[object Object]
可视化展示




01  
基本构图  

不同的起始值和旋转圈数
# 左spiral_initialize(start = 90, end = 360)spiral_track()##初始化#右spiral_initialize(start = 180, end = 360*4 + 180)spiral_track()


参数 scale_by 控制线性缩放螺旋上的数据,scale_by = "curve_length" 的极线也被删除。
# 左spiral_initialize(scale_by = "angle") # defaultspiral_track(height = 0.6)spiral_axis()
# 右spiral_initialize(scale_by = "curve_length")spiral_track(height = 0.6)spiral_axis()


创建轨道
height控制轨道的高度,值是一个介于 0 和 1 之间的值,是螺旋中两个相邻环之间距离的分数。
#左spiral_initialize()spiral_track(height = 1, background_gp = gpar(col = "black"))##黑色边框#右spiral_initialize()spiral_track(height = 0.5)


多个轨道时,高度总和不能超过1
spiral_initialize()spiral_track(height = 0.4, background_gp = gpar(fill = 2))spiral_track(height = 0.2, background_gp = gpar(fill = 3))spiral_track(height = 0.1, background_gp = gpar(fill = 4))


02  
图形功能  

散点图、折线图
#散点图spiral_initialize() # by default xlim = c(0, 1)spiral_track() # by default ylim = c(0, 1)spiral_points(x = runif(1000), y = runif(1000))#折线图x = sort(runif(1000))y = runif(1000)spiral_initialize()spiral_track()spiral_lines(x, y)


# the left plotspiral_initialize()spiral_track()spiral_lines(x, y, type = "h")
# the right plotspiral_initialize()spiral_track()spiral_lines(x, y, type = "h", baseline = 0.5, gp = gpar(col = ifelse(y > 0.5, "red", "blue")))


矩形
n = 1000require(circlize)spiral_initialize(xlim = c(0, n))spiral_track(height = 0.9)
x1 = runif(n)col1 = circlize::colorRamp2(c(0, 0.5, 1), c("blue", "white", "red"))spiral_rect(1:n - 1, 0, 1:n, 0.5, gp = gpar(fill = col1(x1), col = NA))
x2 = runif(n)col2 = circlize::colorRamp2(c(0, 0.5, 1), c("green", "white", "red"))spiral_rect(1:n - 1, 0.5, 1:n, 1, gp = gpar(fill = col2(x2), col = NA))


柱状图
x = seq(1, 1000, by = 1) - 0.5 # middle points of barsy = runif(1000)
# the left plotspiral_initialize(xlim = c(0, 1000))spiral_track(height = 0.8)spiral_bars(x, y)
# the right plotspiral_initialize(xlim = c(0, 1000))spiral_track(height = 0.8)spiral_bars(x, y, baseline = 0.5, gp = gpar(fill = ifelse(y > 0.5, 2, 3), col = NA))


y = matrix(runif(3*1000), ncol = 3)y = y/rowSums(y)spiral_initialize(xlim = c(0, 1000))spiral_track(height = 0.8)spiral_bars(x, y, gp = gpar(fill = 2:4, col = NA))

Horizon chart
df = readRDS(system.file("extdata""ggplot2_downloads.rds"package = "spiralize"))
df = df[df$date < as.Date("2021-01-01"), ]day_diff = as.double(df$date[nrow(df)] - df$date[1], "days")year_mean = tapply(df$count, lubridate::year(df$date), function(x) mean(x[x > 0]))
df$diff = log2(df$count/year_mean[as.character(lubridate::year(df$date))])df$diff[is.infinite(df$diff)] = 0q = quantile(abs(df$diff), 0.99) # adjust outliersdf$diff[df$diff > q] = qdf$diff[df$diff < -q] = -q


树状图和系统发育树
library(ape)data(hivtree.newick)tree.hiv = read.tree(textConnection(hivtree.newick))n = length(tree.hiv$tip.label) # number of leaves
spiral_initialize(xlim =c(0, n), start = 360, end = 360*2 + 180, scale_by = "curve_length")spiral_track()spiral_phylo(tree.hiv)
split = dendextend::cutree(phylo_to_dendrogram(tree.hiv), k = 8)tb = table(split)for(i in seq_along(tb)) { spiral_highlight(sum(tb[seq_len(i-1)]), sum(tb[seq_len(i)]), gp = gpar(fill = i))}




spiral_initialize(xlim =c(0, n), start = 360, end = 360*2 + 180, scale_by = "curve_length")spiral_track()spiral_phylo(tree.hiv, group = split)

   

小编总结




通过阿基米德螺线对长轴数据进行可视化,可以解决由于数据量过大造成的可视化难题!如果大家想进行更加细致的了解,可以参考作者的说明文档,作者对如何实现构图进行了非常详细的描述,非常值得大家学习!
https://jokergoo.github.io/spiralize_vignettes/spiralize.html#the-archimedean-spira

不感兴趣

看过了

取消

本文由“健康号”用户上传、授权发布,以上内容(含文字、图片、视频)不代表健康界立场。“健康号”系信息发布平台,仅提供信息存储服务,如有转载、侵权等任何问题,请联系健康界(jkh@hmkx.cn)处理。
关键词:
阿基米德螺线,数据,展示

人点赞

收藏

人收藏

打赏

打赏

不感兴趣

看过了

取消

我有话说

0条评论

0/500

评论字数超出限制

表情
评论

为你推荐

推荐课程


社群

  • 第九季擂台赛官方群 加入
  • 手术室精益管理联盟 加入
  • 健康界VIP专属优惠 加入
  • 健康界药学专业社群 加入
  • 医健企业伴飞计划 加入

精彩视频

您的申请提交成功

确定 取消
5秒后自动关闭

您已认证成功

您已认证成功,可享专属会员优惠,买1年送3个月!
开通会员,资料、课程、直播、报告等海量内容免费看!

忽略 去看看
×

打赏金额

认可我就打赏我~

1元 5元 10元 20元 50元 其它

打赏

打赏作者

认可我就打赏我~

×

扫描二维码

立即打赏给Ta吧!

温馨提示:仅支持微信支付!

已收到您的咨询诉求 我们会尽快联系您

添加微信客服 快速领取解决方案 您还可以去留言您想解决的问题
去留言
立即提交