改变Matplotlib中颜色条范围
参考:change colorbar range matplotlib
Matplotlib是一个用于创建二维图表的Python库,其中有许多精美的图形可供使用,包括热图、散点图、柱状图等。在Matplotlib中,颜色条(colorbar)用于展示数据的范围和对应的颜色值。有时候我们需要手动改变颜色条的范围,以更好地展示数据的分布情况。本文将介绍如何使用Matplotlib改变颜色条的范围。
示例代码
1. 使用vmin
和vmax
参数设置颜色条范围
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
data = np.random.rand(10, 10)
# 绘制热图
plt.imshow(data, cmap='viridis', vmin=0.2, vmax=0.8)
plt.colorbar()
plt.show()
Output:
2. 使用set_clim
方法设置颜色条范围
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
data = np.random.rand(10, 10)
# 绘制热图
img = plt.imshow(data, cmap='viridis')
plt.colorbar()
img.set_clim(0.3, 0.7)
plt.show()
Output:
3. 使用norm
参数设置颜色条范围
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import numpy as np
# 生成随机数据
data = np.random.rand(10, 10)
# 设置颜色映射
norm = mcolors.Normalize(vmin=0.2, vmax=0.8)
# 绘制热图
plt.imshow(data, cmap='viridis', norm=norm)
plt.colorbar()
plt.show()
Output:
4. 使用BoundaryNorm
设置颜色条范围
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import numpy as np
# 生成随机数据
data = np.random.randint(1, 10, (10, 10))
# 设置分界值
bounds = np.linspace(1, 10, 6)
norm = mcolors.BoundaryNorm(boundaries=bounds, ncolors=256)
# 绘制热图
plt.imshow(data, cmap='viridis', norm=norm)
plt.colorbar()
plt.show()
Output:
5. 使用symlog
设置对数颜色条范围
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
data = np.random.rand(10, 10)
# 绘制热图
plt.imshow(data, cmap='viridis', norm=matplotlib.colors.SymLogNorm(linthresh=0.1, linscale=0.1, vmin=0, vmax=1))
plt.colorbar()
plt.show()
6. 使用LogNorm
设置对数颜色条范围
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
data = np.random.rand(10, 10)
# 绘制热图
plt.imshow(data, cmap='viridis', norm=matplotlib.colors.LogNorm(vmin=0.1, vmax=1))
plt.colorbar()
plt.show()
7. 使用TwoSlopeNorm
设置双斜率颜色条范围
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
data = np.random.rand(10, 10)
# 设置分界值
vmin, vcenter, vmax = 0.2, 0.5, 0.8
norm = matplotlib.colors.TwoSlopeNorm(vmin=vmin, vcenter=vcenter, vmax=vmax)
# 绘制热图
plt.imshow(data, cmap='viridis', norm=norm)
plt.colorbar()
plt.show()
8. 使用BoundaryNorm
设置特殊颜色条范围
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import numpy as np
# 生成随机数据
data = np.random.randint(1, 10, (10, 10))
# 设置颜色映射
cmap = plt.get_cmap('viridis')
bounds = np.array([0, 2, 4, 6, 8, 10])
norm = mcolors.BoundaryNorm(boundaries=bounds, ncolors=cmap.N, clip=False)
# 绘制热图
plt.imshow(data, cmap=cmap, norm=norm)
plt.colorbar()
plt.show()
Output:
9. 设置颜色条为反向顺序
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
data = np.random.rand(10, 10)
# 绘制热图
plt.imshow(data, cmap='viridis', norm=matplotlib.colors.Normalize())
plt.colorbar()
plt.gca().invert_yaxis()
plt.show()
10. 使用自定义颜色映射设置颜色条范围
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import numpy as np
# 生成随机数据
data = np.random.rand(10, 10)
# 自定义颜色映射
colors = [(1, 0, 0), (0, 1, 0), (0, 0, 1)] # 红绿蓝
cmap = mcolors.ListedColormap(colors)
# 设置颜色范围
bounds = [0, 0.5, 1]
norm = mcolors.BoundaryNorm(boundaries=bounds, ncolors=3)
# 绘制热图
plt.imshow(data, cmap=cmap, norm=norm)
plt.colorbar()
plt.show()
Output:
以上是如何在Matplotlib中改变颜色条范围的示例代码,通过这些方法可以灵活地设置颜色条以更好地展示数据的特点。