是否有任何JavaScript库允许您使用浏览器内的图形渲染功能(如<canvas>
SVG)创建热图?
我知道HeatMapAPI.com,但他们的热图是在服务器端生成的.我认为在<canvas>
元素时代,我们不再需要它了!
如果还没有这样的话,是否有志愿者参与创建这样的工具?
我比较R中树状图,一个与创建热图的两个方面made4
的heatplot
,一个用gplots
的heatmap.2
.适当的结果取决于分析,但我试图理解为什么默认值是如此不同,以及如何让两个函数给出相同的结果(或高度相似的结果),以便我理解所有'blackbox'参数进入这个.
这是示例数据和包:
require(gplots)
# made4 from bioconductor
require(made4)
data(khan)
data <- as.matrix(khan$train[1:30,])
Run Code Online (Sandbox Code Playgroud)
使用heatmap.2对数据进行聚类得出:
heatmap.2(data, trace="none")
Run Code Online (Sandbox Code Playgroud)
使用heatplot
给出:
heatplot(data)
Run Code Online (Sandbox Code Playgroud)
最初的结果和缩放非常不同.heatplot
在这种情况下,结果看起来更合理,所以我想了解要用heatmap.2
它来做同样的参数,因为heatmap.2
我有其他优点/功能我想使用,因为我想了解缺少的成分.
heatplot
使用具有相关距离的平均链接,以便我们可以将其输入heatmap.2
以确保使用类似的聚类(基于:https://stat.ethz.ch/pipermail/bioconductor/2010-August/034757.html)
dist.pear <- function(x) as.dist(1-cor(t(x)))
hclust.ave <- function(x) hclust(x, method="average")
heatmap.2(data, trace="none", distfun=dist.pear, hclustfun=hclust.ave)
Run Code Online (Sandbox Code Playgroud)
导致:
这使得行侧树状图看起来更相似但是列仍然不同,因此比例也是如此.看来,heatplot
默认情况下,以某种方式缩放列,默认情况下heatmap.2
不会这样做.如果我向heatmap.2添加行缩放,我得到:
heatmap.2(data, trace="none", distfun=dist.pear, hclustfun=hclust.ave,scale="row")
Run Code Online (Sandbox Code Playgroud)
它仍然不相同但更接近.我怎样才能重现heatplot
结果heatmap.2
?有什么区别?
edit2:看起来关键的区别在于使用以下方法重新heatplot
调整行和列的数据:
if (dualScale) {
print(paste("Data (original) range: …
Run Code Online (Sandbox Code Playgroud) r cluster-analysis hierarchical-clustering heatmap bioconductor
我想在ggplot2中制作热图.我的玩具数据和代码是:
set.seed(12345)
dat <-
data.frame(
Row = rep(x = LETTERS[1:5], times = 10)
, Col = rep(x = LETTERS[1:10], each = 5)
, Y = rnorm(n = 50, mean = 0, sd = 1)
)
library(ggplot2)
p <- ggplot(data = dat, aes(x = Row, y = Col)) +
geom_tile(aes(fill = Y), colour = "white") +
scale_fill_gradient(low = "white", high = "steelblue")
p
Run Code Online (Sandbox Code Playgroud)
我希望为这样的范围值设置颜色方案:
-3 <= Y < -2 ---> Dark Blue
-2 <= Y < -1 ---> Blue
-1 <= …
Run Code Online (Sandbox Code Playgroud) 我想知道如何为矩阵相关热图添加另一层重要且需要的复杂性,例如除了R2值(-1到1)之外,在显着性水平星的方式之后的p值?
在这个问题中没有意图将显着性水平星或p值作为文本放在矩阵BUT的每个方格上,而不是在矩阵的每个方格上的显着性水平的图形开箱即用表示中.我认为只有那些享受创新思维祝福的人才能赢得掌声,解开这种解决方案,以便有最好的方式来代表我们的"半真半导体相关热图"中复杂的复杂成分.我google了很多但从未见过正确或我会说"眼睛友好"的方式来表示显着性水平加上反映R系数的标准色调.
可重现的数据集可在此处找到:
http://learnr.wordpress.com/2010/01/26/ggplot2-quick-heatmap-plotting/
R代码请在下面找到:
library(ggplot2)
library(plyr) # might be not needed here anyway it is a must-have package I think in R
library(reshape2) # to "melt" your dataset
library (scales) # it has a "rescale" function which is needed in heatmaps
library(RColorBrewer) # for convenience of heatmap colors, it reflects your mood sometimes
nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv")
nba <- as.data.frame(cor(nba[2:ncol(nba)])) # convert the matrix correlations to a dataframe
nba.m <- data.frame(row=rownames(nba),nba) # create a column called "row"
rownames(nba) …
Run Code Online (Sandbox Code Playgroud) 在R中创建热图已成为许多帖子,讨论和迭代的主题.我的主要问题是将格子levelplot()
或基本图形中可用解决方案的视觉灵活性image()
与基本heatmap()
,pheatmap pheatmap()
或gplots'的轻松聚类结合起来很棘手heatmap.2()
.这是我想要改变的一个小细节 - x轴上标签的对角线方向.让我告诉你我在代码中的观点.
#example data
d <- matrix(rnorm(25), 5, 5)
colnames(d) = paste("bip", 1:5, sep = "")
rownames(d) = paste("blob", 1:5, sep = "")
Run Code Online (Sandbox Code Playgroud)
您可以使用levelplot()
以下方法轻松更改方向到对角
require(lattice)
levelplot(d, scale=list(x=list(rot=45)))
Run Code Online (Sandbox Code Playgroud)
但应用聚类似乎很痛苦.其他视觉选项也是如此,例如在热图单元格周围添加边框.
现在,转移到实际的heatmap()
相关功能,聚类和所有基本视觉效果都非常简单 - 几乎不需要调整:
heatmap(d)
Run Code Online (Sandbox Code Playgroud)
所以在这里:
require(gplots)
heatmap.2(d, key=F)
Run Code Online (Sandbox Code Playgroud)
最后,我最喜欢的一个:
require(pheatmap)
pheatmap(d)
Run Code Online (Sandbox Code Playgroud)
但所有这些都无法旋转标签.手册pheatmap
建议我可以使用grid.text
自定义标签.真是太高兴 - 尤其是在聚类和更改显示标签的顺序时.除非我在这里遗漏了什么......
最后,还有一件旧货image()
.我可以旋转标签,一般来说它是最可定制的解决方案,但没有聚类选项.
image(1:nrow(d),1:ncol(d), d, axes=F, ylab="", xlab="")
text(1:ncol(d), 0, srt = 45, labels = rownames(d), xpd …
Run Code Online (Sandbox Code Playgroud) 我用seaborn创建了一个热图
df1.index = pd.to_datetime(df1.index)
df1 = df1.set_index('TIMESTAMP')
df1 = df1.resample('30min').mean()
ax = sns.heatmap(df1.iloc[:, 1:6:], annot=True, linewidths=.5)
Run Code Online (Sandbox Code Playgroud)
但问题是,当数据帧中有大量数据时,热图太小而且内部的值开始不清楚,如附图中所示.
编辑
我尝试:
df1.index = pd.to_datetime(df1.index)
fig, ax = plt.subplots(figsize=(10,10)) # Sample figsize in inches
sns.heatmap(df1.iloc[:, 1:6:], annot=True, linewidths=.5, ax=ax)
df1 = df1.set_index('TIMESTAMP')
df1 = df1.resample('1d').mean()
ax = sns.heatmap(df1.iloc[:, 1:6:], annot=True, linewidths=.5)
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
KeyError Traceback (most recent call last)
C:\Users\Demonstrator\Anaconda3\lib\site-packages\pandas\indexes\base.py in get_loc(self, key, method, tolerance)
1944 try:
-> 1945 return self._engine.get_loc(key)
1946 except KeyError:
pandas\index.pyx in pandas.index.IndexEngine.get_loc (pandas\index.c:4154)()
pandas\index.pyx in pandas.index.IndexEngine.get_loc (pandas\index.c:4018)()
pandas\hashtable.pyx …
Run Code Online (Sandbox Code Playgroud) 如果我有以下数据和Seaborn Heatmap:
import pandas as pd
data = pd.DataFrame({'x':(1,2,3,4),'y':(1,2,3,4),'z':(14,15,23,2)})
sns.heatmap(data.pivot_table(index='y', columns='x', values='z'))
Run Code Online (Sandbox Code Playgroud)
如何在颜色条中添加标签?
我正在使用Paul Bleicher的日历热图来随着时间的推移可视化一些事件,我有兴趣添加 黑白填充图案而不是(或在颜色编码之上)以增加日历热图的可读性.黑白打印.
以下是Calendar Heatmap颜色的示例,
这是黑白相间的样子,
很难区分黑人和白人的各个级别.
是否有一种简单的方法可以让R为6级而不是颜色添加某种模式?
source("http://blog.revolution-computing.com/downloads/calendarHeat.R")
stock <- "MSFT"
start.date <- "2012-01-12"
end.date <- Sys.Date()
quote <- paste("http://ichart.finance.yahoo.com/table.csv?s=", stock, "&a=", substr(start.date,6,7), "&b=", substr(start.date, 9, 10), "&c=", substr(start.date, 1,4), "&d=", substr(end.date,6,7), "&e=", substr(end.date, 9, 10), "&f=", substr(end.date, 1,4), "&g=d&ignore=.csv", sep="")
stock.data <- read.csv(quote, as.is=TRUE)
# convert the continuous var to a categorical var
stock.data$by <- cut(stock.data$Adj.Close, b = 6, labels = F)
calendarHeat(stock.data$Date, stock.data$by, varname="MSFT Adjusted Close")
Run Code Online (Sandbox Code Playgroud)
我有一个热图应用程序和存储我存储点击的x,y坐标以及视口宽度和高度.2次点击的真实数据:
x, y, width, height
433, 343, 1257, 959
331, 823, 1257, 959
Run Code Online (Sandbox Code Playgroud)
问题是当我在响应式网站上调整屏幕大小时,显示的点击现在全部关闭.我的搜索结果是空的,但有一个公式或算法可以重新计算不同分辨率的x和y坐标.例如,第一次点击,如果width
从去1257
到990
和height
从云959
到400
,如何重新计算我的X和Y,使他们在同一地点排队?
编辑:我在数据库中添加了2个字段,width_percentage和height百分比来存储x
宽度的y
百分比和高度的百分比.因此,如果x
是433并且屏幕的宽度是1257,那么x
距离屏幕的左边缘是35%.然后我对高度使用相同的理论并运行计算,但它没有将点击点缩放到与我相同的位置,尽管百分比将用于缩放分辨率.我通过点击全分辨率1257宽度然后以900宽度重新打开来测试它.请参阅下面的代码以显示较低分辨率的点击点.
Ajax PHP
while ($row = mysql_fetch_array($results)) {
if( $_GET['w'] < $row['width'] ) {
$xcorr = $row['width_percentage'] * $_GET['w'];
$ycorr = $row['y'];
}
}
Run Code Online (Sandbox Code Playgroud)
这使用$_GET
变量,在页面加载时传递屏幕分辨率的宽度和高度.然后它从数据库中获取点击点$results
.由于我只将分辨率宽度从1257缩放到900,因此我没有计算高度和与初始点击相同的像素.新宽度I乘以百分比,并设置屏幕左侧百分比边距的点.由于百分比为35%,新的x坐标变为900 *.35 = 315px
左边缘.它无法正常工作,我仍然摸不着头脑,为响应式网站点击同一位置.
我有heatmap
(来自一组样本的基因表达):
set.seed(10)
mat <- matrix(rnorm(24*10,mean=1,sd=2),nrow=24,ncol=10,dimnames=list(paste("g",1:24,sep=""),paste("sample",1:10,sep="")))
dend <- as.dendrogram(hclust(dist(mat)))
row.ord <- order.dendrogram(dend)
mat <- matrix(mat[row.ord,],nrow=24,ncol=10,dimnames=list(rownames(mat)[row.ord],colnames(mat)))
mat.df <- reshape2::melt(mat,value.name="expr",varnames=c("gene","sample"))
require(ggplot2)
map1.plot <- ggplot(mat.df,aes(x=sample,y=gene))+geom_tile(aes(fill=expr))+scale_fill_gradient2("expr",high="darkred",low="darkblue")+scale_y_discrete(position="right")+
theme_bw()+theme(plot.margin=unit(c(1,1,1,-1),"cm"),legend.key=element_blank(),legend.position="right",axis.text.y=element_blank(),axis.ticks.y=element_blank(),panel.border=element_blank(),strip.background=element_blank(),axis.text.x=element_text(angle=45,hjust=1,vjust=1),legend.text=element_text(size=5),legend.title=element_text(size=8),legend.key.size=unit(0.4,"cm"))
Run Code Online (Sandbox Code Playgroud)
(由于plot.margin
我正在使用的论据,左侧被切断,但我需要这个,如下所示).
然后,我prune
行dendrogram
根据深度截止值来获得较少的集群(即,只有深深的分裂),并做一些编辑所产生dendrogram
有它绘制他们的方式,我希望它:
depth.cutoff <- 11
dend <- cut(dend,h=depth.cutoff)$upper
require(dendextend)
gg.dend <- as.ggdend(dend)
leaf.heights <- dplyr::filter(gg.dend$nodes,!is.na(leaf))$height
leaf.seqments.idx <- which(gg.dend$segments$yend %in% leaf.heights)
gg.dend$segments$yend[leaf.seqments.idx] <- max(gg.dend$segments$yend[leaf.seqments.idx])
gg.dend$segments$col[leaf.seqments.idx] <- "black"
gg.dend$labels$label <- 1:nrow(gg.dend$labels)
gg.dend$labels$y <- max(gg.dend$segments$yend[leaf.seqments.idx])
gg.dend$labels$x <- gg.dend$segments$x[leaf.seqments.idx]
gg.dend$labels$col <- "black"
dend1.plot <- ggplot(gg.dend,labels=F)+scale_y_reverse()+coord_flip()+theme(plot.margin=unit(c(1,-3,1,1),"cm"))+annotate("text",size=5,hjust=0,x=gg.dend$label$x,y=gg.dend$label$y,label=gg.dend$label$label,colour=gg.dend$label$col)
Run Code Online (Sandbox Code Playgroud)
require(cowplot)
plot_grid(dend1.plot,map1.plot,align='h',rel_widths=c(0.5,1)) …
Run Code Online (Sandbox Code Playgroud) heatmap ×10
r ×6
ggplot2 ×4
javascript ×2
python ×2
seaborn ×2
bioconductor ×1
canvas ×1
coordinates ×1
correlation ×1
cowplot ×1
dendrogram ×1
html ×1
jquery ×1
label ×1
lattice ×1
plot ×1
significance ×1
visualize ×1