我使用的是geoplot,它使用matplotlib来创建绘图。
其中一个这样的功能是geoplot.pointplot
,它在您每次调用它时都会创建一个AxesSubplot
。这允许您多次调用它并覆盖一堆matplotlib,底层代码只是创建一个pointplot
scatter
。
我的问题是,对于这些pointplot
中的每一个,geoplot
会分别为它们分配一个唯一的cmap
,因此如果一个图的值为40
时是黄色的,那么另一个图可能是蓝色的。这是一个问题,因为我不想在一个情节中有多个图例。理想情况下,所有绘图都遵循单个图例,并且绘图之间的值是一致的。
下面是一个示例:
任何帮助解决这个问题的人都将不胜感激。我试着把vmin
和vmax
喂给geoplot.pointplot
,但是它们都没有效果。
编辑:
我找到了一个“解决方案”。通过在南极处的每个子图中添加一个点,它会落在图形的边界之外,并因此人为地增加色条的范围。我不会回答这个问题,因为这是一种非常老套的方式来完成我想要做的事情,而且不是很理想。这是通过以下代码完成的:
t = t.append({'altitude': max_alt, 'geometry': Point(0, -90)}
发布于 2020-01-16 05:12:43
正确的做法是创建一个matplotlib.cm.cmap
实例和一个matplotlib.colors.Normalize
,并分别通过关键字参数cmap
和norm
将它们传递给geoplot.pointplot
。问题中的图像使用的色彩映射表是viridis
,下面是创建和规范化viridis
cmap
的示例
import numpy as np
from matplotlib import colors, cm
cmap = cm.get_cmap('viridis')
norm = colors.Normalize(min(x), max(x))
这将使色彩映射表标准化为x
的比例,然后将这些对象传递到geoplot.pointplot
的每次调用中。
geoplot.pointplot(..., cmap=cmap, norm=norm)
geoplot.pointplot(..., cmap=cmap, norm=norm)
# etc...
这将为所有绘图提供相同的颜色条。
https://stackoverflow.com/questions/59745103
复制