R heatmap() 文档说 forRowv和Colv(即行和列排序参数):
如果默认情况下缺少其中一个,则相应树状图的排序将按行/列的平均值进行,即,在行的情况下,Rowv <- rowMeans(x, na.rm = na.rm) 。
我认为这很简单,但现在我想默认排序算法中一定还有更多的东西。
让我们得到这个相关矩阵:
m = matrix(nrow=7, ncol = 7, c(1,0.578090870728824,0.504272263365781,0.526539138953634,0.523049273011785,0.503296777916728,0.638770769734758,0.578090870728824,1,0.59985543029105,0.663649941610205,0.630998114483389,0.66814547270115,0.596161809036262,0.504272263365781,0.59985543029105,1,0.62468477053142,0.632715952452297,0.599037620726669,0.607925540860012,0.526539138953634,0.663649941610205,0.62468477053142,1,0.7100707346884,0.738094117424525,0.639668277558577,0.523049273011785,0.630998114483389,0.632715952452297,0.7100707346884,1,0.651331659193182,0.64138213322125,0.503296777916728,0.66814547270115,0.599037620726669,0.738094117424525,0.651331659193182,1,0.612326706593738,0.638770769734758,0.596161809036262,0.607925540860012,0.639668277558577,0.64138213322125,0.612326706593738,1))
m
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 1.0000000 0.5780909 0.5042723 0.5265391 0.5230493 0.5032968 0.6387708
[2,] 0.5780909 1.0000000 0.5998554 0.6636499 0.6309981 0.6681455 0.5961618
[3,] 0.5042723 0.5998554 1.0000000 0.6246848 0.6327160 0.5990376 0.6079255
[4,] 0.5265391 0.6636499 0.6246848 1.0000000 0.7100707 0.7380941 0.6396683
[5,] 0.5230493 0.6309981 0.6327160 0.7100707 1.0000000 0.6513317 0.6413821
[6,] 0.5032968 0.6681455 0.5990376 0.7380941 0.6513317 1.0000000 0.6123267 …Run Code Online (Sandbox Code Playgroud) 新 R 用户在这里。我正在尝试向使用 ggplot2 创建的热图添加树状图。我怎样才能做到这一点?我已将代码添加到下面的热图中。
#Mtcars using ggplots and reshape2
install.packages("ggplot2")
library(ggplot2)
intall.packages("reshape2")
library(reshape2)
data(mtcars)
Cars <- mtcars[c(1:7)] #subset to 6 genres
cor(Cars) # 6x6 cor matrix
#ggplot likes the data 'melted' one value per row
m <-melt(cor(Cars))
p <- ggplot(data=m, aes(x=Var1, y=Var2, fill=value)) + geom_tile()
p
#set up a coloring scheme using colorRampPalette
red=rgb(1,0,0); green=rgb(0,1,0); blue=rgb(0,0,1); black=rgb(0,0,0)
RtoBrange<-colorRampPalette(c(red, black ) )
BtoGrange<-colorRampPalette(c(black, green) )
p <- p + scale_fill_gradient2(low=RtoBrange(100), mid="black", high=BtoGrange(100))
p
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助,
夏洛特
我想使用plotly 绘制层次聚类的树状图,并显示该图的一小部分子集,因为对于大量样本,该图在底部可能非常密集。
我使用绘图包装函数 create_dendrogram 和以下代码绘制了该图:
from scipy.cluster.hierarchy import linkage
import plotly.figure_factory as ff
fig = ff.create_dendrogram(test_df, linkagefun=lambda x: linkage(test_df, 'average', metric='euclidean'))
fig.update_layout(autosize=True, hovermode='closest')
fig.update_xaxes(mirror=False, showgrid=True, showline=False, showticklabels=False)
fig.update_yaxes(mirror=False, showgrid=True, showline=True)
fig.show()
Run Code Online (Sandbox Code Playgroud)
下面是使用 matplotlib 绘制的图,scipy 库默认使用该图,为了便于解释,该图被截断为 4 个级别:
from scipy.cluster.hierarchy import dendrogram,linkage
x = linkage(test_df,method='average')
dendrogram(x,truncate_mode='level',p=4)
plt.show()
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,截断对于解释大量样本非常有用,我如何在绘图中实现这一点?
我一直试图在R中为一些微阵列数据生成热图,并且大部分已经成功地生成了一个基于在线指令的热图,但它并没有完全符合我的要求.我想要的是基于Pearson距离而不是欧几里德距离来聚类数据,但我遇到了一些困难.
使用heatmap2(来自gplots包)我使用以下代码来制作我的初始热图:
heatmap.2(Test402,trace="none",density="none",scale="row", ColSideColors=c("red","blue") [data.test.factors],col=redgreen,labRow="",hclustfun=function(x) hclust(x,method="complete"))
Run Code Online (Sandbox Code Playgroud)
Test402是具有402行(基因)和31列(患者)的矩阵,data.test.factors是每个患者所属的结果组的指标.使用hclustfun在这里工作正常,热图似乎对方法和整体工作的变化做出响应.问题是,聚类距离都是欧几里德距离,我想把它改为Pearson距离.所以我尝试以下方法:
heatmap.2(Test402,trace="none",density="none",scale="row", ColSideColors=c("red","blue")[data.test.factors],col=redgreen,labRow="",hclustfun=function(x) hclust(x,method="complete"), distfun=function(x) as.dist((1-cor(x))/2) )
Run Code Online (Sandbox Code Playgroud)
上面的命令失败.那是因为Test402 需要是一个方阵.所以看一些额外的建议我尝试了以下内容:
cU = cor(Test402)
heatmap.2(cU,trace="none",density="none",scale="row", ColSideColors=c("red","blue")[data.test.factors],col=redgreen,labRow="",hclustfun=function(x) hclust(x,method="complete"), distfun=function(x) as.dist((1-x)/2) )
Run Code Online (Sandbox Code Playgroud)
这是有效的,但这是问题所在.热图,而不是在TEST402中具有原始表达式值,现在仅显示相关性.这不是我想要的!我想要这个,我只希望树形图以不同的方式聚类,我不想改变热图中实际表示的数据!这可能吗?
我想在R中生成一个高分辨率的树状图.
困难在于有超过200个叶节点,每个节点由一个字符串标识.我想确保每个字符串标签在生成(打印)的图中都是可读的.
另一件事是我想将原始的x轴(对应于叶节点)切换到y轴,并将原始的y轴切换到x轴.为了更清楚的演示目的,我想在图的顶部再添加一个x轴(对应于切换图中的距离信息).如何在R中做到这一点?
我有这个简单的代码来绘制树形图,但该功能ylim似乎不起作用.因此无论我将它设置为什么,它在绘制时都有[0,0.5]的范围.
在绘制树状图时,我应该使用其他参数来设置ylim吗?
plot(hclust(total_dist),main=NULL,ylab=NULL,ylim=c(0,1))
Run Code Online (Sandbox Code Playgroud)

我试图找出输出的scipy.cluster.hierarchy.dendrogram工作方式...我以为我知道它是如何工作的,并且能够使用输出来重建树状图,但是似乎我不再理解它,或者似乎有错误Python 3模块的版本。
这个答案,如何获得由scipy.cluster.hierarchy制作的树状图的子树,意味着dendrogram输出字典给出的dict_keys(['icoord', 'ivl', 'color_list', 'leaves', 'dcoord'])w /大小都相同,因此您可以将zip它们和plt.plot它们重建树状图。
看起来很简单,使用时确实可以恢复,Python 2.7.11但是一旦升级到Python 3.5.1旧脚本,就无法获得相同的结果。
我开始通过一个非常简单的可重复示例对集群进行返工,并认为我可能在Python 3.5.1版本的中发现了一个错误SciPy version 0.17.1-np110py35_1。要使用Scikit-learn数据集b / c,大多数人都从conda发行版中获得了该模块。
这些为什么不排成一列,为什么我不能以这种方式重建树状图?
# Init
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
# Load data
from sklearn.datasets import load_diabetes
# Clustering
from scipy.cluster.hierarchy import dendrogram, fcluster, leaves_list
from scipy.spatial import distance
from fastcluster …Run Code Online (Sandbox Code Playgroud) python machine-learning hierarchical-clustering dendrogram scipy
我正在尝试使用 Python 绘制树状图,最好使用 Plotly。我有一个包含各种对象聚类的数据集。我可以使用这个数据集来生成所需的数据或至少进行推断。但是,我不明白 create_dendrogram 的输入实际上是什么。该文档只是说它是一个 ndarray - 作为数组数组的观察矩阵。我熟悉 Numpy ndarrays,但我想知道数组必须包含什么。
更具体地说,值X[i][j]的意义是什么。它似乎只是 0 和 1 之间的浮点数。我在这里查看了 Python 的 Plotly API 文档 - https://plot.ly/python/dendrogram/
import plotly.plotly as py
from plotly.tools import FigureFactory as FF
import numpy as np
X = np.random.rand(10, 10)
fig = FF.create_dendrogram(X, orientation='left', labels=names)
py.iplot(fig, filename='dendrogram_with_labels')
Run Code Online (Sandbox Code Playgroud)
如果有另一种更直观的方法在 Python 中获取树状图,我也想知道。我对此很陌生,任何帮助将不胜感激。(如果我需要重新表述问题,请告诉我!)
我有一个单词列表,我对其执行了 TF-IDF 算法以获得前 100 个单词的列表。之后我应该执行聚类。现在我能够完成这两项任务(我正在共享代码和输入文件的相关部分,输出屏幕截图)。
我的查询是我想要在输出树状图中形成的集群列表,我该怎么做?Dendrogram 函数返回一个ax包含一些坐标和节点列表的元组。我如何操作它们以获取完整的集群列表。
以下是从输入文件中提取的内容。
"recommended stories dylan scott stat advertisement kate sheridan dylan scott dylan scott",
"email touting former representative mike fergusons genuine connection",
"email touting former representative mike ferguson \u2019",
"facebook donald trump fda hhs privacy policy",
"president trump appoints dr scott gottlieb",
"trade groups including novartis ag",
"bush alumni coalition supporting trump",
"online presidential transition analysis center",
"tennessee republican representative marsha blackburn",
"nonprofit global health care company",
"paula stannard ,\u201d …Run Code Online (Sandbox Code Playgroud) 鉴于以下示例来自:https : //python-graph-gallery.com/404-dendrogram-with-heat-map/
它生成一个树状图,我假设它是基于 scipy 的。
# Libraries
import seaborn as sns
import pandas as pd
from matplotlib import pyplot as plt
# Data set
url = 'https://python-graph-gallery.com/wp-content/uploads/mtcars.csv'
df = pd.read_csv(url)
df = df.set_index('model')
del df.index.name
df
# Default plot
sns.clustermap(df)
Run Code Online (Sandbox Code Playgroud)
问题:如何获得非图形形式的树状图?
背景信息:从该树状图的根部,我想以最大长度切割它。例如,我们有一条从根到左簇 (L) 的边和一条到右簇 (R) 的边……从这两个中我想得到它们的边长并以最长的时间切割整个树状图这两条边。
此致