使用不同的颜色映射绘制热力图
- 一、使用 Seaborn 库创建热力图
- 二、cmap关于其他颜色的设置
- 三、自己设置颜色映射
一、使用 Seaborn 库创建热力图
选择Seaborn颜色官网
使用 Seaborn 库创建热力图,你可以使用 seaborn.heatmap() 函数。下面是一个示例代码:
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
# 生成二维数组
data = np.random.rand(10, 10)
# 使用 Seaborn 创建热力图
sns.heatmap(data, cmap="YlGnBu", annot=True, fmt=".2f", cbar=True)
# 显示图形
plt.show()
在这个示例中,我们首先使用 numpy.random.rand() 函数生成了一个 10x10 的随机二维数组 data。
然后,我们使用 seaborn.heatmap() 函数创建了热力图。我们将 data 作为输入数据,并指定了颜色映射 cmap 为 “YlGnBu”,这是 Seaborn 中的一个预定义颜色映射。
通过设置 annot=True,我们可以在热力图中显示每个单元格的数值,并使用 fmt=“.2f” 指定显示的数值格式为小数点后两位。
最后,使用 cbar=True 创建一个颜色条。
cmap=“YlGnBu” 表示使用了 Seaborn 预定义的颜色映射,它代表了从黄色到绿色再到蓝色的渐变。这种颜色映射通常用于表示数据的大小或密度,颜色从浅到深逐渐增加可以很好地展示数据的变化情况。
二、cmap关于其他颜色的设置
可以去官网中找
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
data = pd.DataFrame(np.random.rand(20, 50))
# 使用不同的颜色映射绘制热力图
cmap_styles = ['viridis', 'plasma', 'inferno', 'magma', 'cividis', 'Greys', 'Purples', 'Blues', 'Greens', 'Oranges','Reds', 'YlOrBr', 'YlOrRd', 'OrRd', 'PuRd', 'RdPu', 'BuPu', 'GnBu', 'PuBu', 'YlGnBu','PuBuGn', 'BuGn', 'YlGn', 'binary', 'gist_yarg', 'gist_gray', 'gray', 'bone', 'pink', 'spring','summer', 'autumn', 'winter', 'cool', 'Wistia', 'hot', 'afmhot', 'gist_heat', 'copper', 'PiYG','PRGn', 'BrBG', 'PuOr', 'RdGy', 'RdBu', 'RdYlBu', 'RdYlGn', 'Spectral', 'coolwarm', 'bwr','seismic', 'twilight', 'twilight_shifted', 'hsv'
]
fig, axes = plt.subplots(6, 9, figsize=(16, 8))
axes = axes.ravel()
for i, cmap in enumerate(cmap_styles):ax = axes[i]sns.heatmap(data, cmap=cmap, ax=ax)ax.set_title(cmap)plt.tight_layout()
plt.show()
三、自己设置颜色映射
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
import numpy as np
import seaborn as sns# 自定义颜色映射
colors = ['red', 'yellow', 'blue']
cm = LinearSegmentedColormap.from_list('myc', colors, N=10)
# 生成随机二维数组作为示例数据
data = np.random.rand(20, 50)
# # 绘制热力图并应用自定义颜色映射,设置纵横比为正方形,边框颜色为黑色
sns.heatmap(data, cmap=cm, cbar=True, linecolor='black', linewidths=0.5)
# 显示图形
plt.show()