不知不觉,公众号已经是第100篇文章了。明天就是母亲节,那么这第100篇就献给亲爱的妈妈,没有什么是比亲人更珍贵的。
近期小编遇到人生中很艰难的一个插曲,还好现在结果是好的,感谢群内小伙伴的帮助。本文的玫瑰花们,也一同献给热心的群友们和关心小编的朋友们,感谢你们
。
单支玫瑰带3D坐标轴系,大家可以修改花瓣状态和透明度等,小编都备注好了。
# 加载plotly包,用于生成交互式图表
library(plotly)
# 创建x和t的序列。x用于表示径向分量,t用于角度。
x <- seq(0, 24) / 24
t <- seq(0, 575, by = 0.5) / 575 * 20 * pi + 4 * pi
# 生成x和t的组合网格
grid <- expand.grid(x = x, t = t)
# 转换grid数据为矩阵形式,方便进行后续计算
x <- matrix(grid$x, ncol = 25, byrow = TRUE)
t <- matrix(grid$t, ncol = 25, byrow = TRUE)
# 计算p值,p控制花瓣的开合状态
p <- (pi / 2) * exp(-t / (8 * pi))
# change用于增加花瓣形状的多样性
change <- sin(15 * t) / 150
# u是花瓣的径向调制,通过周期性函数增加图形的复杂性
u <- 1 - (1 - (3.6 * t) %% (2 * pi) / pi) ^ 4 / 2 + change
# y是基于x的二次函数,用于调制花瓣的高度
y <- 2 * (x ^ 2 - x) ^ 2 * sin(p)
# r是最终的径向距离,结合u和y进行调整
r <- u * (x * sin(p) + y * cos(p))
# 计算x,y,z坐标
xx = r * cos(t)
yy = r * sin(t)
zz = u * (x * cos(p) - y * sin(p))
# 使用plotly生成三维曲面图,颜色为红色系,透明度为0.5
plot <- plot_ly(x = ~xx, y = ~yy, z = ~zz, colors = 'Reds', opacity = 0.5) %>% add_surface()
# 向图中添加绿色线条,这些线条可以代表花茎或其它装饰线
add_trace(plot, x = rep(0), y = rep(0), z = seq(-0.5, 0, length = 4),
mode = 'lines', line = list(color = 'green', width = 8))
相比上面3D坐标,小编更喜欢纯粹的简约版。
#----1??去文字版----
# 加载plotly包,用于生成交互式图表
library(plotly)
# 创建x和t的序列。x用于表示径向分量,t用于角度。
x <- seq(0, 24) / 24
t <- seq(0, 575, by = 0.5) / 575 * 20 * pi + 4 * pi
# 生成x和t的组合网格
grid <- expand.grid(x = x, t = t)
# 转换grid数据为矩阵形式,方便进行后续计算
x <- matrix(grid$x, ncol = 25, byrow = TRUE)
t <- matrix(grid$t, ncol = 25, byrow = TRUE)
# 计算p值,p控制花瓣的开合状态
p <- (pi / 2) * exp(-t / (8 * pi))
# change用于增加花瓣形状的多样性
change <- sin(15 * t) / 150
# u是花瓣的径向调制,通过周期性函数增加图形的复杂性
u <- 1 - (1 - (3.6 * t) %% (2 * pi) / pi) ^ 4 / 2 + change
# y是基于x的二次函数,用于调制花瓣的高度
y <- 2 * (x ^ 2 - x) ^ 2 * sin(p)
# r是最终的径向距离,结合u和y进行调整
r <- u * (x * sin(p) + y * cos(p))
# 计算x,y,z坐标
妈妈_母亲节快乐 = r * cos(t)
yy = r * sin(t)
zz = u * (x * cos(p) - y * sin(p))
# 使用plotly生成三维曲面图,颜色为红色系,透明度为0.5
plot <- plot_ly(x = ~妈妈_母亲节快乐, y = ~yy, z = ~zz, colors = 'Reds', opacity = 0.5) %>% add_surface()
# 向图中添加绿色线条,这些线条可以代表花茎或其它装饰线
plot <- plot %>% add_trace(plot, x = rep(0), y = rep(0), z = seq(-0.3, 0, length = 4),
mode = 'lines', line = list(color = 'green', width = 8)) %>%
layout(scene = list(xaxis = list(showline = FALSE, # 不显示X轴线
zeroline = FALSE, # 不显示零线
showgrid=FALSE, # 不显示网格
showticklabels = FALSE ), # 不显示刻度标签
yaxis = list(visible = FALSE),
zaxis = list(visible = FALSE)))
plot
紫色蓝色玫瑰,多彩缤纷哦。
#---- ??多彩玫瑰----
setwd("D:/聂个人文件/我的公众号/母亲节玫瑰花")
# 加载plotly包
library(plotly)
# 定义一个函数用于生成玫瑰花的坐标和属性;批量生成花朵
generate_flower <- function(offset, color, petals_factor) {
x <- seq(0, 24) / 24
t <- seq(0, 575, by = 0.5) / 575 * 20 * pi + offset
grid <- expand.grid(x = x, t = t)
x <- matrix(grid$x, ncol = 25, byrow = TRUE)
t <- matrix(grid$t, ncol = 25, byrow = TRUE)
p <- (pi / 2) * exp(-t / (8 * pi))
change <- sin(petals_factor * t) / 150
u <- 1 - (1 - (3.6 * t) %% (2 * pi) / pi) ^ 4 / 2 + change
y <- 2 * (x^2 - x)^2 * sin(p)
r <- u * (x * sin(p) + y * cos(p))
xx = r * cos(t)
yy = r * sin(t)
zz = u * (x * cos(p) - y * sin(p))
list(xx = xx, yy = yy, zz = zz, color = color)
}
# 生成3朵不同的花
flowers <- lapply(1:3, function(i) {
generate_flower(offset = 2 * pi * runif(1), color = sample(c('Reds','Purples','Oranges'), 1), petals_factor = sample(5:20, 1))
})
# 创建一个plotly对象的列表3
plots <- vector("list", length = 3)
for (i in 1:3) {
plots[[i]] <- plot_ly() %>%
add_surface(x = ~flowers[[i]]$xx, y = ~flowers[[i]]$yy, z = ~flowers[[i]]$zz, opacity = 0.5, colors = flowers[[i]]$color, showscale = FALSE) %>%
layout(scene = list(xaxis = list(visible = FALSE),
yaxis = list(visible = FALSE),
zaxis = list(visible = FALSE)))
}
# 保存plotly图形
library(htmlwidgets)
saveWidget(plots[[1]], "plotly_plot1.html", selfcontained = TRUE)
saveWidget(plots[[2]], "plotly_plot2.html", selfcontained = TRUE)
saveWidget(plots[[3]], "plotly_plot3.html", selfcontained = TRUE)
PS: plotly对象无法直接patchwork或者组合,有知道的小伙伴请留言,如何一幅图内组合这些玫瑰?
爱心玫瑰
送给每位妈妈。