郑维 發表於 2024-2-2 08:27:44

R语言环状热力图的画法

<p>环状热力图(Circular Heatmap)是一种以环状布局展示数据的可视化方法。它结合了热力图和极坐标系统,能够有效地显示数据的关系、模式和趋势。</p>
<p>环状热力图通常用于可视化二维数据矩阵,其中行和列代表不同的类别或变量,而单元格内的颜色则表示对应变量的数值大小。与传统的矩形热力图不同,环状热力图将矩形排列成一个环状,使得数据在环上的分布更加直观。</p>
<p>环状热力图的优势在于它可以同时展示多个变量之间的关系,并且可以通过调整环的顺序和角度来改变数据展示的方式。此外,通过在环状热力图中添加其他图层,如聚类树图或标签,可以进一步增强数据的解读和呈现效果。</p>
<p>创建环状热力图的步骤通常包括以下几个方面:</p>
<ul><li>准备数据:将需要展示的数据转换成适合环状热力图的格式,通常是一个二维矩阵。</li><li>绘制环状布局:使用相应的绘图库创建一个环状布局,确定数据的摆放位置。</li><li>绘制热力图:在环状布局上绘制热力图,通过颜色的不同来表示数据的大小或差异。</li><li>添加其他图层:根据需要,可以在环状热力图中添加聚类树图、标签等其他元素,以增强可视化效果。</li><li>设置样式和标签:调整环状热力图的样式、颜色、标签等细节,使其更具吸引力和清晰度。</li><li>显示和解读:将环状热力图呈现给观众,并解读其中的数据模式、关系和趋势。</li></ul>
<p>环状热力图在生物学、基因组学、社交网络分析等领域得到广泛应用。它能够有效地展示大量的数据,并帮助人们发现隐藏在数据中的规律和结构。</p>
<p>这段代码主要是使用了<code>ggplot2</code>包来绘制热图,并最终实现了环状热图的效果。下面是对代码思路的解释:</p>
<ul><li><p>首先,使用<code>set.seed(8)</code>设置了随机数种子,以确保结果的可重复性。</p></li><li><p>接着,创建了一个 25x25 的随机矩阵&nbsp;<code>m</code>,并使用&nbsp;<code>colnames</code>&nbsp;和&nbsp;<code>rownames</code>&nbsp;给这个矩阵添加行列名称。</p></li><li><p>使用&nbsp;<code>melt</code>&nbsp;函数将矩阵&nbsp;<code>m</code>&nbsp;转换成长格式的数据框&nbsp;<code>df</code>,其中包含三列:&quot;x&quot;、&quot;y&quot; 和 &quot;value&quot;,分别代表横坐标、纵坐标和值。</p></li><li><p>接下来,使用&nbsp;<code>ggplot</code>&nbsp;函数创建了一个基础的热图&nbsp;<code>p1</code>,其中使用&nbsp;<code>geom_tile</code>&nbsp;函数绘制了矩形热图,并使用&nbsp;<code>scale_fill_gradient2</code>&nbsp;函数设置了颜色渐变。</p></li><li><p>然后,通过&nbsp;<code>xlim</code>&nbsp;和&nbsp;<code>ylim</code>&nbsp;函数调整了图形的比例大小,并将调整后的图保存在&nbsp;<code>p2</code>&nbsp;中。</p></li><li><p>最后,使用&nbsp;<code>coord_polar</code>&nbsp;函数将热图转换为环状热图,并将结果保存在&nbsp;<code>p3</code>&nbsp;中。</p></li></ul>
<p>整体思路就是先创建数据,然后使用&nbsp;<code>ggplot2</code>&nbsp;包绘制热图,并通过一系列函数调整图形的样式和比例,最终实现了环状热图的效果。</p>
<div class="jb51code"><pre class="brush:plain;">library(reshape)
library(ggplot2)

# 创建数据
set.seed(8)
m &lt;- matrix(round(rnorm(200), 2), 25, 25)
colnames(m) &lt;- paste(1:25)
rownames(m) &lt;- paste(1:25)
df &lt;- melt(m)
colnames(df) &lt;- c("x", "y", "value")


#ggplot2绘图
p1&lt;-ggplot(df, aes(x = x, y = y, fill = value)) +
geom_tile(color = "skyblue") +
#添加values值
#geom_text(aes(label = value), color = "white", size = 4) +
scale_fill_gradient2(low = "#075AFF",
                     mid = "#FFFFCC",
                     high = "#FF0000") +
coord_fixed()

p1
#调整图形比例大小
p1 + xlim(-10,25) + ylim(-10,25) -&gt; p2
p2

#环状热图
p2 + coord_polar(theta = "x", start = pi/4) -&gt; p3
p3</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202402/202402020824521.png" /></p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202402/202402020824522.png" /></p>
<p>代码美观改进</p>
<div class="jb51code"><pre class="brush:plain;">library(reshape2)
library(ggplot2)

# 创建数据
set.seed(8)
m &lt;- matrix(round(rnorm(200), 2), 25, 25)
colnames(m) &lt;- paste(1:25)
rownames(m) &lt;- paste(1:25)
df &lt;- melt(m)
colnames(df) &lt;- c("x", "y", "value")

# 创建环状热图
p &lt;- ggplot(df, aes(x = x, y = y, fill = value)) +
geom_tile(color = "skyblue") +
scale_fill_gradient2(low = "#075AFF",
                     mid = "#FFFFCC",
                     high = "#FF0000") +
coord_polar(start = pi / 4) +
theme_void() +
theme(plot.margin = margin(10, 10, 10, 10))

# 调整图形大小和比例
p + xlim(-10, 25) + ylim(-10, 25) +
theme(axis.title = element_blank(),
      axis.text = element_blank(),
      axis.ticks = element_blank(),
      panel.grid = element_blank()) +
labs(title = "环状热图") +
theme(plot.title = element_text(hjust = 0.5)) -&gt; p

# 显示环状热图
print(p)
</pre></div>
<p>在这个优化的版本中,进行了以下改进:</p>
<ul><li><p>添加了&nbsp;<code>theme_void()</code>&nbsp;函数来移除默认的背景和网格线,使热图更加简洁。</p></li><li><p>使用&nbsp;<code>theme(plot.margin = margin(10, 10, 10, 10))</code>&nbsp;调整了图形的边距,使其在画布中居中显示。</p></li><li><p>使用&nbsp;<code>theme(...)</code>&nbsp;函数来移除坐标轴、刻度线和网格线,以进一步简化图形。</p></li><li><p>使用&nbsp;<code>labs(title = &quot;环状热图&quot;)</code>&nbsp;添加了一个标题,可以根据需要自定义标题内容。</p></li></ul>
<p>这些改进旨在提高环状热图的可读性,同时使图形更加美观。你可以将代码复制到R环境中运行,查看优化后的环状热图效果。</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202402/202402020824523.png" /></p>
<p>到此这篇关于R语言环状热力图的画法的文章就介绍到这了,更多相关R语言环状热力图 内容请搜索琼殿技术社区以前的文章或继续浏览下面的相关文章希望大家以后多多支持琼殿技术社区!</p>
                           
                            <div class="art_xg">
                              <b>您可能感兴趣的文章:</b><ul><li>R语言学习之基础绘图详解</li><li>R语言绘制双坐标图的案例详解</li><li>R语言ggplot2设置图例(legend)的操作大全</li><li>R语言绘制带误差线的条形图</li><li>R语言绘制corrplot相关热图分析美化示例及详细图解</li></ul>
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: R语言环状热力图的画法