我无法让像这样的imshow图形上的颜色条与图形的高度相同,因为事后没有使用Photoshop。我如何让高度匹配?
当前回答
上面所有的解决方案都很好,但我喜欢@Steve的和@bejota的最好,因为它们不涉及花哨的调用,而且是通用的。
所谓通用,我的意思是它适用于任何类型的轴,包括GeoAxes。例如,如果你有投影轴进行映射:
projection = cartopy.crs.UTM(zone='17N')
ax = plt.axes(projection=projection)
im = ax.imshow(np.arange(200).reshape((20, 10)))
呼叫
cax = divider.append_axes("right", size=width, pad=pad)
将失败的KeyException: map_projection
因此,处理所有类型轴的颜色条大小的唯一通用方法是:
ax.colorbar(im, fraction=0.046, pad=0.04)
使用0.035到0.046的分数来获得最佳尺寸。但是,分数和填充的值将需要进行调整,以获得最适合您的绘图,并且将根据颜色条的方向是垂直位置还是水平位置而有所不同。
其他回答
使用matplotlib AxisDivider可以很容易地做到这一点。
链接页面中的例子也可以不使用子图:
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
import numpy as np
plt.figure()
ax = plt.gca()
im = ax.imshow(np.arange(100).reshape((10,10)))
# create an axes on the right side of ax. The width of cax will be 5%
# of ax and the padding between cax and ax will be fixed at 0.05 inch.
divider = make_axes_locatable(ax)
cax = divider.append_axes("right", size="5%", pad=0.05)
plt.colorbar(im, cax=cax)
如果不想声明另一组轴,我找到的最简单的解决方案是使用figsize调用更改图形大小。
在上面的例子中,我将从
fig = plt.figure(figsize = (12,6))
然后用不同的比例重新渲染,直到颜色条不再使主要情节相形见绌。
另一种选择是
shrink=0.7, aspect=20*0.7
收缩缩放高度和宽度,但aspect参数恢复原始宽度。默认长宽比为20。0.7是根据经验确定的。
我最近遇到了这个问题,我使用ax.twinx()来解决它。例如:
from matplotlib import pyplot as plt
# Some other code you've written
...
# Your data generation goes here
xdata = ...
ydata = ...
colordata = function(xdata, ydata)
# Your plotting stuff begins here
fig, ax = plt.subplots(1)
im = ax.scatterplot(xdata, ydata, c=colordata)
# Create a new axis which will be the parent for the colour bar
# Note that this solution is independent of the 'fig' object
ax2 = ax.twinx()
ax2.tick_params(which="both", right=False, labelright=False)
# Add the colour bar itself
plt.colorbar(im, ax=ax2)
# More of your code
...
plt.show()
我发现这在创建将matplotlib Axes对象作为参数、在它们上绘图并返回对象的函数时特别有用,因为这样我就不需要传入必须从图形对象生成的单独轴,也不需要传入图形对象本身。
创建颜色条时,尝试使用分数和/或收缩参数。
从文件中:
分数0.15;用于颜色条的原始轴的部分 减少1.0;用来缩小颜色条的分数
推荐文章
- 如何在交互式Python中查看整个命令历史?
- 如何显示有两个小数点后的浮点数?
- 如何用OpenCV2.0和Python2.6调整图像大小
- 在每个列表元素上调用int()函数?
- 当使用代码存储库时,如何引用资源的相对路径
- 如何在Flask-SQLAlchemy中按id删除记录
- 在Python中插入列表的第一个位置
- Python Pandas只合并某些列
- 如何在一行中连接两个集而不使用“|”
- 从字符串中移除前缀
- 代码结束时发出警报
- 如何在Python中按字母顺序排序字符串中的字母
- 在matplotlib中将y轴标签添加到次要y轴
- 如何消除数独方块的凹凸缺陷?
- 为什么出现这个UnboundLocalError(闭包)?