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

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
本文由作者自行上传,并且作者对本文图文涉及知识产权负全部责任。如有侵权请及时联系(邮箱:nanxingjun@hmkx.cn
关键词:
阿基米德螺线,数据,展示

人点赞

收藏

人收藏

打赏

打赏

我有话说

0条评论

0/500

评论字数超出限制

表情
评论

为你推荐

推荐课程


社群

精彩视频

您的申请提交成功

确定 取消
剩余5
×

打赏金额

认可我就打赏我~

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

打赏

打赏作者

认可我就打赏我~

×

扫描二维码

立即打赏给Ta吧!

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