python Seaborn热图,带有对数比例色条

ycggw6v2  于 2023-04-04  发布在  Python
关注(0)|答案(4)|浏览(154)

有没有办法设置颜色条比例来登录海运热图图形?
我使用pandas的数据透视表输出作为调用的输入

sns.heatmap(df_pivot_mirror, annot=False, xticklabels=256, yticklabels=128, cmap=plt.cm.YlOrRd_r)
x8diyxa7

x8diyxa71#

如果您当前安装了seaborn,则调用heatmap中的norm=LogNorm()现在可以工作了。(在评论中指出-谢谢。)将此添加到seaborn示例之一:

import numpy as np
import seaborn as sns; sns.set_theme(style='white')
import matplotlib.pyplot as plt
from matplotlib.colors import LogNorm, Normalize
from matplotlib.ticker import MaxNLocator

flights = sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")

f3, ax5 = plt.subplots(1,1)
sns.heatmap(flights, square=True, norm=LogNorm())

您可以在seaborn Package 器中将colorbar参数作为关键字传递,但它们有时会与seaborn选项发生冲突:

sns.heatmap(flights, square=True, norm=LogNorm(), cbar_kws={'ticks':MaxNLocator(2), 'format':'%.e'})

作为比较,这是没有seaborn改进的matplotlib热图-colorbar参数都被应用:

f5, ax6 = plt.subplots(1,1)
im6 = plt.imshow(flights, norm=LogNorm())
cbar6 = ax.figure.colorbar(im6, ax=ax6, ticks=MaxNLocator(2), format='%.e')

如果您必须使用较旧的安装,并且LogNorm在seaborn中不工作,请参阅此答案的以前版本以获得解决方法。

kb5ga3dv

kb5ga3dv2#

简答:

from matplotlib.colors import LogNorm

sns.heatmap(df, norm=LogNorm())
gdrx4gfi

gdrx4gfi3#

你可以使用matplotlib.colors.LogNorm规范化colorbar上的值。我还不得不手动设置seaborn中的标签,最后得到了以下代码:

#!/usr/bin/env python3

import math

import numpy as np
import seaborn as sn
from matplotlib.colors import LogNorm

data = np.random.rand(20, 20)

log_norm = LogNorm(vmin=data.min().min(), vmax=data.max().max())
cbar_ticks = [math.pow(10, i) for i in range(math.floor(math.log10(data.min().min())), 1+math.ceil(math.log10(data.max().max())))]

sn.heatmap(
    data,
    norm=log_norm,
    cbar_kws={"ticks": cbar_ticks}
)

rks48beu

rks48beu4#

回应cphlewis(我没有足够的声誉),我使用cbar_kws解决了这个问题;正如我在这里看到的:seaborn clustermap: set colorbar ticks .
例如cbar_kws={"ticks":[0,1,10,1e2,1e3,1e4,1e5]}

from matplotlib.colors import LogNorm
s=np.random.rand(20,20)
sns.heatmap(s, norm=LogNorm(s.min(),s.max()),
            cbar_kws={"ticks":[0,1,10,1e2,1e3,1e4,1e5]},
            vmin = 0.001, vmax=10000)
plt.show()

祝你愉快。

相关问题