我使用热图来显示混淆矩阵.我喜欢标准颜色,但我希望浅橙色为0,深紫色为最高值.
我设法只使用另一组颜色(从浅到深的紫罗兰色),设置:
colormap = sns.cubehelix_palette(as_cmap=True)
ax = sns.heatmap(cm_prob, annot=False, fmt=".3f", xticklabels=print_categories, yticklabels=print_categories, vmin=-0.05, cmap=colormap)
Run Code Online (Sandbox Code Playgroud)
但我想保留这些标准的.这是我的代码和我得到的图像.
ax = sns.heatmap(cm_prob, annot=False, fmt=".3f", xticklabels=print_categories, yticklabels=print_categories, vmin=-0.05)
Run Code Online (Sandbox Code Playgroud)
我正在环顾互联网,无法找到解决此特定问题的完美算法:
我们的客户有一组点数和重量数据以及每个点,如下图所示:
加权点http://chakrit.net/files/stackoverflow/so_heightmap_points.png
其中,我们有一个GIS程序,可以从这些点和它们的重量值生成"高度图"或一种地形数据但是因为我们有近千个数据点并且这些将随着时间的推移而变化,我们希望创建我们自己的工具来自动生成这些高度图.
到目前为止,我已经尝试计算每个像素从其到最近数据点的Sqrt((x1 - x2) ^ 2 + (y1 - y2) ^ 2)
距离的权重,并将权重和距离因子应用于数据点的颜色,以生成该特定像素的结果渐变颜色:
heightmap结果http://chakrit.net/files/stackoverflow/so_heightmap_result.png
您可以看到某些数据点配置仍然存在问题,并且当存在大量数据点时,算法有时会生成相当多边形的图像.理想的结果应该看起来更像一个省略号,而不像多边形.
这是维基百科关于渐变上升的文章中的一个示例图像,它展示了我想要的结果:
山http://chakrit.net/files/stackoverflow/so_gradient_descent.png
渐变上升算法不是我感兴趣的.我感兴趣的是什么; 是首先计算该图中原始函数的算法,提供具有权重的数据点.
我没有参加拓扑数学课程,但我可以做一些微积分.我想我可能会遗漏一些东西,而且我宁愿迷失在Google搜索框中输入的内容.
我需要一些指示.
谢谢!
我有大约50个人的三个因素(set1,set2和set3).set1,set2和set3的值是"A","B","C".我想制作一个类似热图的这些数据图,但让图例显示与值相关的颜色(例如,A ='红色',B ='蓝色',C ='黑色').有什么建议?
谢谢.
我正在使用Google API v3制作热图.我举个例子.让我们考虑一下地震的大小.我为每个点分配权重以指定它们的大小.但是谷歌会在缩小时考虑点的密度.一个地方的点数越多,它就越红.例如,如果两个地震发生在彼此的英里范围内,一个是3级,另一个是8级,第一个应该是绿色/蓝色,第二个应该是红色.但是一旦缩小并且两个点在地图中越来越近,谷歌地图会考虑点数而不是权重,因此它看起来是读取的.我希望它是平均值,即(3 + 8)/2=5.5 ......无论代表什么颜色.这可能吗?
当许多点重叠时,散点图很难解释,因为这种重叠会掩盖特定区域中的数据密度.一种解决方案是对绘制点使用半透明颜色,以便不透明区域表示在这些坐标中存在许多观察.
下面是我在R中的黑白解决方案的示例:
MyGray <- rgb(t(col2rgb("black")), alpha=50, maxColorValue=255)
x1 <- rnorm(n=1E3, sd=2)
x2 <- x1*1.2 + rnorm(n=1E3, sd=2)
dev.new(width=3.5, height=5)
par(mfrow=c(2,1), mar=c(2.5,2.5,0.5,0.5), ps=10, cex=1.15)
plot(x1, x2, ylab="", xlab="", pch=20, col=MyGray)
plot(x1, x2, ylab="", xlab="", pch=20, col="black")
Run Code Online (Sandbox Code Playgroud)
然而,我最近在PNAS中发现了这篇文章,它采用了类似的方法,但使用热图着色而不是不透明度作为重叠点数的指标.这篇文章是Open Access,所以任何人都可以下载.pdf并查看图1,其中包含我想要创建的图形的相关示例.本文的方法部分表明分析是在Matlab中完成的.
为方便起见,这里是上述文章中图1的一小部分:
如何在R中创建一个散点图,使用颜色而不是不透明度作为点密度的指标?
对于初学者,R用户可以install.packages("fields")
使用该功能在库中访问此Matlab配色方案tim.colors()
.
是否有一种简单的方法可以制作出类似于上述文章图1的数字,但是在R?谢谢!
我正在使用gplot生成热图,显示治疗组与配对对照的log2倍变化.使用以下代码:
heatmap.2(as.matrix(SeqCountTable), col=redgreen(75),
density.info="none", trace="none", dendrogram=c("row"),
symm=F,symkey=T,symbreaks=T, scale="none")
Run Code Online (Sandbox Code Playgroud)
我输出了一张真实倍数变化值(即非Row-Z得分)的热图,这是我所追求的,是每个生物学家最喜欢的红黑绿配色方案!
log2倍变化的实际范围是-3/+ 7,其中许多值在-2/-1和+ 1/+ 2范围内,分别显示为深红色/绿色(分别).这使整个热图非常暗,难以解释.
我们正在使用R来吐出在闪亮的应用程序(网页)上呈现的绘图(热图).目前,我们面临着一个问题,即R渲染绘图需要花费时间来进行计算.让我通过一个人为的例子来表达同样的看法.在这个基本测试用例中,R需要大约17秒的时间来渲染并将热图文件保存为png(数据计算机时间被取出:行和列集群已预先计算)
我想知道有没有办法减少渲染这种情节类型所需的时间.也许我在其他一些常量计算中缺失,这些计算也可以从热图函数中取出.
谢谢!
生成数据
m1 <- matrix(rnorm(500000,mean=15,sd=4),ncol=100)
m2 <- matrix(rnorm(500000,mean=30,sd=3),ncol=100)
m <- cbind(m1,m2)
dim(m)
Run Code Online (Sandbox Code Playgroud)
所有计算的基本热图
png('test_heatmap.png')
system.time(heatmap(m))
user system elapsed
29.327 0.637 30.526
Run Code Online (Sandbox Code Playgroud)
从热图功能中进行聚类:主要是测试绘图渲染时间
> system.time(hcr <- hclust(dist(m)))
user system elapsed
9.992 0.126 10.144
> system.time(hcc <- hclust(dist(t(m))))
user system elapsed
0.659 0.002 0.662
> system.time(ddr <- as.dendrogram(hcr))
user system elapsed
0.498 0.010 0.508
> system.time(ddc <- as.dendrogram(hcc))
user system elapsed
0.011 0.000 0.011
Run Code Online (Sandbox Code Playgroud)
热图渲染时间与预先计算的行/列树形图
png('test_heatmap.png')
> system.time(heatmap(m,Rowv=ddr,Colv=ddc))
user system elapsed
16.128 0.558 17.171
Run Code Online (Sandbox Code Playgroud) heatmap.2默认为dist用于计算距离矩阵和hclust用于聚类.现在有人怎么设置dist来使用欧几里德方法和hclust来使用质心方法?我提供了一个可编译的代码示例.我尝试过:distfun = dist(method ="euclidean"),但这不起作用.有任何想法吗?
library("gplots")
library("RColorBrewer")
test <- matrix(c(79,38.6,30.2,10.8,22,
81,37.7,28.4,9.7,19.9,
82,36.2,26.8,9.8,20.9,
74,29.9,17.2,6.1,13.9,
81,37.4,20.5,6.7,14.6),ncol=5,byrow=TRUE)
colnames(test) <- c("18:0","18:1","18:2","18:3","20:0")
rownames(test) <- c("Sample 1","Sample 2","Sample 3", "Sample 4","Sample 5")
test <- as.table(test)
mat=data.matrix(test)
heatmap.2(mat,
dendrogram="row",
Rowv=TRUE,
Colv=NULL,
distfun = dist,
hclustfun = hclust,
xlab = "Lipid Species",
ylab = NULL,
colsep=c(1),
sepcolor="black",
key=TRUE,
keysize=1,
trace="none",
density.info=c("none"),
margins=c(8, 12),
col=bluered
)
Run Code Online (Sandbox Code Playgroud) 我刚刚开始使用cal-heatmap创建一个类似Github的日历(例如,一年中每一天的热图以块为单位).理想情况下,我希望它看起来像这样:
不幸的是,通过我的设置,我不断得到更多的东西:
当前问题是几个月之间的空白,例如,中间存在白色块.我认为这个问题将是与the domain
,the subdomain
,and,and the range
and rowLimit
; 但我不能100%确定应该是什么组合.我试过几个 - 这是我目前的设置:
(function($) {
$(document).ready(function() {
var cal = new CalHeatMap();
cal.init({
start: new Date(2013, 0), // January 1, 2013
maxDate: new Date(),
range: 12,
rowLimit: 7,
domain: "month",
subDomain: "day",
data: "/api/users/1/annotations/",
cellSize: 12
});
});
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
我很确定这是可能的; 我想问题是,是否可以使用月/年域,以及我需要使用哪些设置来实现它.
编辑2014年1月27日:根据@kamisama的说法,我已经尽可能接近了.这是我目前的设置:
cal.init({
start: oneYearAgo(),
maxDate: new Date(),
range: 1,
rowLimit: 7,
domain: "year",
subDomain: "day",
data: "/api/users/1/annotations/",
cellSize: 10.5
});
Run Code Online (Sandbox Code Playgroud)
哪个可以得到这样的东西:
没有月份标签,也没有星期几的标签.
我在Python中使用Seaborn来创建Heatmap.我能够使用传入的值来注释单元格,但是我想添加表示单元格意味着什么的注释.例如,0.000000
我不想仅仅看到,而是希望看到相应的标签,例如"Foo"或0.000000 (Foo)
.
热图功能的Seaborn文档有点神秘,我相信参数是关键所在:
annot_kws : dict of key, value mappings, optional
Keyword arguments for ax.text when annot is True.
Run Code Online (Sandbox Code Playgroud)
我尝试设置annot_kws
值的别名字典,即{'Foo' : -0.231049060187, 'Bar' : 0.000000}
等,但我得到一个AttributeError.
这是我的代码(我在这里手动创建了数据数组以实现可重现性):
data = np.array([[0.000000,0.000000],[-0.231049,0.000000],[-0.231049,0.000000]])
axs = sns.heatmap(data, vmin=-0.231049, vmax=0, annot=True, fmt='f', linewidths=0.25)
Run Code Online (Sandbox Code Playgroud)
当我不使用annot_kws
参数时,这是(工作)输出:
在这里,当我在堆栈跟踪做包括annot_kws
PARAM:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-57-38f91f1bb4b8> in <module>()
12
13
---> 14 axs = sns.heatmap(data, vmin=min(uv), vmax=max(uv), annot=True, annot_kws=kws, linewidths=0.25)
15 concepts
/opt/anaconda/2.3.0/lib/python2.7/site-packages/seaborn/matrix.pyc …
Run Code Online (Sandbox Code Playgroud)