相关疑难解决方法(0)

修正matplotlib colorbar ticks

我在一个等值线图旁边放了一个彩条.因为绘制的数据是离散的而不是连续的值,所以我使用了一个LinearSegmentedColormap(使用scipy cookbook中的配方),我用我的最大计数值+1初始化,以显示0的颜色.但是,我现在有两个问题:

在此输入图像描述

  1. 刻度标签间距不正确(除了5或更多或更少) - 它们应位于它们识别的颜色的中间; 即0 - 4应向上移动,6 - 10应向下移动.

  2. 如果我初始化colorbar drawedges=True,以便我可以设置其dividers属性,我得到这个:

在此输入图像描述

我正在创建我的色彩映射和颜色条:

cbmin, cbmax = min(counts), max(counts)
# this normalises the counts to a 0,1 interval
counts /= np.max(np.abs(counts), axis=0)
# density is a discrete number, so we have to use a discrete color ramp/bar
cm = cmap_discretize(plt.get_cmap('YlGnBu'), int(cbmax) + 1)
mappable = plt.cm.ScalarMappable(cmap=cm)
mappable.set_array(counts)
# set min and max values for the colour bar ticks
mappable.set_clim(cbmin, cbmax)
pc = PatchCollection(patches, match_original=True)
# impose …
Run Code Online (Sandbox Code Playgroud)

python matplotlib color-mapping

19
推荐指数
2
解决办法
3万
查看次数

类似热图的情节,但对于seaborn中的分类变量

热图类似的问题一样,但对于分类变量,但使用python和seaborn而不是R:

想象一下,我有以下数据帧:

df = pd.DataFrame({"John":"No Yes Maybe".split(),
                   "Elly":"Yes Yes Yes".split(),
                   "George":"No Maybe No".split()},
                   index="Mon Tue Wed".split())
Run Code Online (Sandbox Code Playgroud)

现在我想绘制一个热图,并按照相应的值为每个单元格着色.那就是"是","否","可能",例如变成"绿色","灰色","黄色".图例应该具有这三种颜色和相应的值.

我自己用以下方式解决了这个问题.我似乎无法将分类颜色映射传递给seaborn的热图,因此我用数字替换所有文本并重新构建seaborn内部使用的颜色映射,即:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patches as mpatches

# create dictionary with value to integer mappings
value_to_int = {value: i for i, value in enumerate(sorted(pd.unique(df.values.ravel())))}

f, ax = plt.subplots()
hm = sns.heatmap(df.replace(value_to_int).T, cmap="Pastel2", ax=ax, cbar=False)
# add legend
box = ax.get_position()
ax.set_position([box.x0, box.y0, box.width * 0.7, …
Run Code Online (Sandbox Code Playgroud)

python matplotlib seaborn

10
推荐指数
2
解决办法
6674
查看次数

有什么方法可以将seaborn中的颜色条(cbar)更改为图例(对于二进制热图)?

我正在使用 seaborn (sns.heatmap) 中的热图来显示二进制值真/假的矩阵。它工作得很好,但正如预期的那样,颜色条显示了 0-1 范围内的值(实际上只有两种颜色)。

有没有办法将其更改为显示真/假颜色的图例?我在文档中找不到任何内容

https://seaborn.pydata.org/generated/seaborn.heatmap.html

例子:

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

df = pd.DataFrame({'a':[False,True,False,True,True,True],
                   'b':[False,False,False,False,True,False],
                   'c':[False,True,True,False,True,True],
                   'd':[False,True,False,True,True,True],
                   'e':[False,True,True,False,False,True],
                   'f':[False,True,False,False,True,True]})


# Set up the matplotlib figure
f, ax = plt.subplots(figsize=(13, 13))

# Generate a custom diverging colormap
cmap = sns.diverging_palette(300, 180, as_cmap=True)

# Draw the heatmap with the mask and correct aspect ratio
_ = sns.heatmap(df, cmap=cmap, center=0, square=True, linewidths=.5, cbar_kws={"shrink": .5})
Run Code Online (Sandbox Code Playgroud)

python matplotlib seaborn

5
推荐指数
1
解决办法
3040
查看次数

cmap 在seaborn 中如何工作以及如何更改分箱?

这个问题的灵感来自于R 中 pheatmap 的中断。问题是我是否可以定义我的着色和分箱在seaborn的热图中的“粗糙”程度、连续/离散程度。我找到了一种使用 cmap 和使用的颜色数量来做到这一点的方法(例如,seaborn 热图中的离散图例)。但是,我不知道这些颜色组的分配是如何完成的。


所以问题是,如果我使用 cmap 并强制 seaborn 仅使用一组离散的 colors=bins,数据如何分箱?我怎样才能手动设置它?例如。对于 R,我可以将中断设置为从 0 到 800,步长为 100,并将其传递给“breaks”参数。

中断列表 = seq(0, 800, by = 100)

如果我的比例是线性的,那么使用 cmap 和颜色数量非​​常简单,但如果我想让 bins=colorbar 对数或只是不等距,我该怎么做?


为了举一个具体的例子,我举一个航班数据集的例子。左边是原来的默认图,右边是我选择 5 种颜色来组成 5 个 bin。那么如何定义这些垃圾箱的边缘呢?我可以重置它们,以便我有例如。垃圾箱 0-200、200-300、300-400、400-600、600 以上?(我故意使用不等的垃圾箱来表达我的意思。)

# choose 5 colours to create 5 bins
cmap = sns.color_palette('rocket', n_colors=5)

# run this without the cmap argument to get the first image
flights = sns.load_dataset("flights")
flights = flights.pivot("month", …
Run Code Online (Sandbox Code Playgroud)

python r heatmap seaborn

2
推荐指数
1
解决办法
3336
查看次数

标签 统计

python ×4

matplotlib ×3

seaborn ×3

color-mapping ×1

heatmap ×1

r ×1