答读者问:关于R语言ggplot2做花瓣图的几个问题

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 答读者问:关于R语言ggplot2做花瓣图的几个问题

image.png

有读者在公众号留言问到之前在公众号分享的R语言ggplot做花瓣图的代码相关问题,首先非常感谢这位读者能够这么认真的看我分享的内容,今天的推文主要回答一下这几个问题

先回答第二个问题

df1模拟生成中,1:18, 10, 180这些是怎么决定的呢?是应为df里面分组数量决定的吗?总是用180除以分组数量等分圆吗?

我这里的花瓣图是通过构造正弦函数的数据,然后画图展示正弦函数,然后再利用R语言ggplot2的极坐标实现的,

比如

y=sin(x) 在0到pi这个区间内就是一个峰

y = sin(2x)在0到pi这个区间内是2个峰,但是2个峰有正有负,所以我们取绝对值

所以就是最终出图有几个花瓣,我们就用y=sin(几x)的函数,比如最终有8个花瓣,就是用y=sin(8x)的函数

ggplot2画图是点,然后连线,这里x的取值越多,y值也会越多,最终呈现出来的线也会越平滑,这里我选择每个峰值用30个点来链接(你可以增加这个或者减少这个),如果是8个变量,x的取值范围就是1到8*30也就是1到240

8个变量构造数据的代码如下

library(ggplot2)
x<-1:(8*30)
x
y<-abs(sin(8*(x/(8*30))*pi))
ggplot(data = data.frame(x=x,y=y),
       aes(x=x,y=y))+
  geom_point()

ggplot(data = data.frame(x=x,y=y),
       aes(x=x,y=y))+
  geom_point()+
  coord_polar()

出图效果如下

image.png

image.png

我们把点图的函数换成面积图的函数就会出现如下效果

ggplot(data = data.frame(x=x,y=y),
       aes(x=x,y=y))+
  geom_area()

ggplot(data = data.frame(x=x,y=y),
       aes(x=x,y=y))+
  geom_area()+
  coord_polar()

image.png

image.png

为了给每个峰都映射一个颜色,我么还得给数据增加一个分组,8个变量,每个变量30个值,生成这个的代码是,这里的变量我就直接用ABCD这些字母代替了

rep(LETTERS[1:8],each=30)
ggplot(data = data.frame(x=x,y=y,group=rep(LETTERS[1:8],each=30)),
       aes(x=x,y=y))+
  geom_area(aes(fill=group))

ggplot(data = data.frame(x=x,y=y,group=rep(LETTERS[1:8],each=30)),
       aes(x=x,y=y))+
  geom_area(aes(fill=group))+
  coord_polar()

image.png

image.png

然后是第三个问题

您的这个玫瑰图的代码,在作图这里按您的模拟数据df2中并不存在x的列了,怎么还能x=x呢?

这个推文里的代码 对应是10个变量,每个峰使用18个点,所以x生成的就是1:180

这个代码是

library(tidyverse)
library(ggplot2)

set.seed(123456)

df<-data.frame(x=LETTERS[1:10],
               y=sample(1:20,10))
df

x<-1:180
x
y<-sin(10*x*pi/180)

df1<-data.frame(x1=x,
                y1=abs(y),
                var=gl(10,18,labels = LETTERS[1:10]))
head(df1)
merge(df1,df,by.x = 'var',by.y = 'x') %>% 
  mutate(new_y=y1*y) -> df2

ggplot(data=df2,aes(x=x,y=new_y))+
  geom_area(aes(fill=var),
            alpha=0.8,
            color="black",
            show.legend = F)+
  coord_polar()+
  theme_bw()+
  theme(axis.text.y = element_blank(),
        axis.ticks = element_blank(),
        panel.border = element_blank(),
        axis.title = element_blank())+
  scale_x_continuous(breaks = seq(9,180,18),
                     labels = df$x)+
  geom_text(data=df,aes(x=seq(9,180,18),
                        y=y+1,
                        label=y))

df这个数据集

image.png

df1这个数据集

image.png

合并以后生成df2这个数据集

image.png

df2这个数据集确实没有了x这个变量,但是用如下画图代码也能够画出来图

ggplot(data=df2,aes(x=x,y=new_y))+
  geom_area(aes(fill=var),
            alpha=0.8,
            color="black",
            show.legend = F)+
  coord_polar()+
  theme_bw()+
  theme(axis.text.y = element_blank(),
        axis.ticks = element_blank(),
        panel.border = element_blank(),
        axis.title = element_blank())+
  scale_x_continuous(breaks = seq(9,180,18),
                     labels = df$x)+
  geom_text(data=df,aes(x=seq(9,180,18),
                        y=y+1,
                        label=y))

把x换成x1也能出图

ggplot(data=df2,aes(x=x1,y=new_y))+
  geom_area(aes(fill=var),
            alpha=0.8,
            color="black",
            show.legend = F)+
  coord_polar()+
  theme_bw()+
  theme(axis.text.y = element_blank(),
        axis.ticks = element_blank(),
        panel.border = element_blank(),
        axis.title = element_blank())+
  scale_x_continuous(breaks = seq(9,180,18),
                     labels = df$x)+
  geom_text(data=df,aes(x=seq(9,180,18),
                        y=y+1,
                        label=y))

这个是为啥我暂时也想不明白了。如果有人知道这个原因,欢迎大家留言

(这里我突然想明白了,正常情况下是应该写x=x1的,写x=x之所以没有报错,是因为我们在构造数据的时候写了x<-1:180,这里的x实际是使用了这个x)

问题1

方不方便用点常见的数据,比如土壤理化这类的出个教程呢?因为感觉您做这张图的确比普通的极坐标图好看很多

如果方便的话,可以发我一个示例数据,我用示例数据再写一个推文

欢迎大家关注我的公众号

小明的数据分析笔记本

小明的数据分析笔记本 公众号 主要分享:1、R语言和python做数据分析和数据可视化的简单小例子;2、园艺植物相关转录组学、基因组学、群体遗传学文献阅读笔记;3、生物信息学入门学习资料及自己的学习笔记!

微信公众号好像又有改动,如果没有将这个公众号设为星标的话,会经常错过公众号的推文,个人建议将 小明的数据分析笔记本 公众号添加星标,添加方法是

点开公众号的页面,右上角有三个点

image.png

点击三个点,会跳出界面

image.png

直接点击 设为星标 就可以了

image.png

相关实践学习
快速体验PolarDB开源数据库
本实验环境已内置PostgreSQL数据库以及PolarDB开源数据库:PolarDB PostgreSQL版和PolarDB分布式版,支持一键拉起使用,方便各位开发者学习使用。
相关文章
|
6月前
|
数据可视化 算法
R语言近似贝叶斯计算MCMC(ABC-MCMC)轨迹图和边缘图可视化
R语言近似贝叶斯计算MCMC(ABC-MCMC)轨迹图和边缘图可视化
|
3月前
|
数据可视化 数据挖掘 图形学
R语言基础可视化:使用ggplot2构建精美图形的探索
【8月更文挑战第29天】 `ggplot2`是R语言中一个非常强大的图形构建工具,它基于图形语法提供了一种灵活且直观的方式来创建各种统计图形。通过掌握`ggplot2`的基本用法和美化技巧,你可以轻松地将复杂的数据转化为直观易懂的图形,从而更好地理解和展示你的数据分析结果。希望本文能够为你探索`ggplot2`的世界提供一些帮助和启发。
|
3月前
|
数据可视化
R语言自定义图形:ggplot2中的主题与标签设置
【8月更文挑战第30天】`ggplot2`作为R语言中功能强大的绘图包,其自定义能力让数据可视化变得更加灵活和多样。通过合理使用`theme()`函数和`labs()`函数,以及`geom_text()`和`geom_label()`等几何对象,我们可以轻松创建出既美观又富有表达力的图形。希望本文的介绍能够帮助你更好地掌握`ggplot2`中的主题与标签设置技巧。
|
6月前
|
数据可视化
R语言生态学进化树推断物种分化历史:分类单元数与时间关系、支系图可视化
R语言生态学进化树推断物种分化历史:分类单元数与时间关系、支系图可视化
R语言生态学进化树推断物种分化历史:分类单元数与时间关系、支系图可视化
|
6月前
|
监控 数据可视化 数据挖掘
R语言质量控制图、质量管理研究分析采购订单数量、CPU时间、纸厂产出、钢板数据可视化
R语言质量控制图、质量管理研究分析采购订单数量、CPU时间、纸厂产出、钢板数据可视化
|
6月前
|
数据可视化 前端开发
在R语言中实现sem进行结构方程建模和路径图可视化1
在R语言中实现sem进行结构方程建模和路径图可视化
|
6月前
|
数据可视化
在R语言中实现sem进行结构方程建模和路径图可视化2
在R语言中实现sem进行结构方程建模和路径图可视化
|
6月前
|
数据可视化 Python
R语言分析糖尿病数据:多元线性模型、MANOVA、决策树、典型判别分析、HE图、Box's M检验可视化
R语言分析糖尿病数据:多元线性模型、MANOVA、决策树、典型判别分析、HE图、Box's M检验可视化
|
6月前
|
数据可视化
R语言两阶段最小⼆乘法2SLS回归、工具变量法分析股息收益、股权溢价和surfaces曲面图可视化
R语言两阶段最小⼆乘法2SLS回归、工具变量法分析股息收益、股权溢价和surfaces曲面图可视化
|
6月前
|
数据可视化 前端开发
R语言中实现sem进行结构方程建模和路径图可视化(下)
R语言中实现sem进行结构方程建模和路径图可视化

热门文章

最新文章

相关实验场景

更多