【发布时间】:2016-04-27 18:27:03
【问题描述】:
有没有办法设置彩条比例以登录 seaborn 热图?
我正在使用 pandas 的数据透视表输出作为调用的输入
sns.heatmap(df_pivot_mirror,annot=False,xticklabels=256,yticklabels=128,cmap=plt.cm.YlOrRd_r)
谢谢。
【问题讨论】:
标签: python pandas seaborn colorbar
有没有办法设置彩条比例以登录 seaborn 热图?
我正在使用 pandas 的数据透视表输出作为调用的输入
sns.heatmap(df_pivot_mirror,annot=False,xticklabels=256,yticklabels=128,cmap=plt.cm.YlOrRd_r)
谢谢。
【问题讨论】:
标签: python pandas seaborn colorbar
如果您当前安装了 seaborn,则调用 heatmap 中的 norm=LogNorm() 现在可以使用。 (在 cmets 中指出——谢谢。)将此添加到其中一个 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 包装器中将颜色条参数作为关键字传递,但它们有时会与 seaborn 选项发生冲突:
sns.heatmap(flights, square=True, norm=LogNorm(), cbar_kws={'ticks':MaxNLocator(2), 'format':'%.e'})
为了比较,这是 matplotlib 没有 seaborn 改进的热图——颜色条参数都被应用了:
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 中不起作用,请参阅此答案的先前版本以获取解决方法。
【讨论】:
sns.jointplot完成的二维直方图中启用对数色标?
norm=LogNorm(),这也会导致对数刻度。
简答:
from matplotlib.colors import LogNorm
sns.heatmap(df, norm=LogNorm())
【讨论】:
您可以使用matplotlib.colors.LogNorm 标准化颜色条上的值。 我还必须在 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}
)
【讨论】:
响应 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()
祝你有美好的一天。
【讨论】:
LogNorm 来自哪里?此外,sns.heatmap 的热图没有显示 norm:它有什么作用?