【问题标题】:Get working alpha value of scatter points in mpl_toolkits.basemap.Basemap获取 mpl_toolkits.basemap.Basemap 中散点的工作 alpha 值
【发布时间】:2016-03-02 22:36:16
【问题描述】:

以here 的示例为基础,我想在地图上用不同的 alpha 值和不同的面颜色绘制点(我计划更新它们)。但是,alpha 值似乎没有更新(它们似乎一开始也被忽略了)。

首先,根据示例创建地图并绘制三个点:

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()

map = Basemap(projection='merc', lat_0 = 57, lon_0 = -135,
    resolution = 'h', area_thresh = 0.1,
    llcrnrlon=-136.25, llcrnrlat=56.0,
    urcrnrlon=-134.25, urcrnrlat=57.75)

map.drawcoastlines()
map.drawcountries()
map.fillcontinents(color = 'lightgray', zorder = 0)
map.drawmapboundary()

lons = [-135.3318, -134.8331, -134.6572]
lats = [57.0799, 57.0894, 56.2399]
x,y = map(lons, lats)
pts = map.scatter(x, y, c ='r', marker = 'o', s = 80, alpha = 1.0)

然后用新的 rgba 值更新 facecolors。

pts.set_facecolor([(0.7, 0.3, 0.3, 1.0), (1, 0.0, 1, 0.5), (1.0, 1.0, 0.2, 0.2)])
fig.canvas.draw()

颜色更新,但 alpha 值未正确绘制。我也尝试过使用pts.set_alpha,但这不允许列表作为参数。

【问题讨论】:

    标签: python matplotlib alpha matplotlib-basemap


    【解决方案1】:

    所以,after posting this as an issue on github,如果您不首先设置 alpha 值,似乎可以更新 alpha 值。

    from mpl_toolkits.basemap import Basemap
    import matplotlib.pyplot as plt
    import numpy as np
    import matplotlib
    matplotlib.interactive(True)
    
    fig, ax = plt.subplots()
    
    map = Basemap(projection='merc', lat_0 = 57, lon_0 = -135,
        resolution = 'i', area_thresh = 0.1,
        llcrnrlon=-136.25, llcrnrlat=56.0,
        urcrnrlon=-134.25, urcrnrlat=57.75)
    
    map.drawcoastlines(zorder = 0)
    map.drawcountries(zorder = 0)
    map.fillcontinents(color = 'lightgray', zorder = 0)
    map.drawmapboundary(zorder = 0)
    
    lons = [-135.3318, -134.8331, -134.6572]
    lats = [57.0799, 57.0894, 56.2399]
    x,y = map(lons, lats)
    pts = map.scatter(x, y, c ='r', marker = 'o', s = 600)
    

    并且这些 alpha 值可以通过使用set_facecolor 来更新,如下所示:

    pts.set_facecolor([(0.7, 0.3, 0.3, 1.0), (1, 0.0, 1, 0.5), (1.0, 1.0, 0.2, 0.2)])
    fig.canvas.draw()
    

    【讨论】:

    • 谢谢@p-robot。这阻止了我解决我的问题(在散点图上打开/关闭点)。
    【解决方案2】:

    不清楚是否可以单独设置每个点的 alpha 值,但如果使用 multiple plot 命令,它可以工作。

    pts = bmap.scatter(x[0], y[0], c ='b', marker = 'o', s = 80, alpha = 0.7)
    pts = bmap.scatter(x[1], y[1], c ='g', marker = 'o', s = 80, alpha = 0.3)  
    pts = bmap.scatter(x[2], y[2], c ='r', marker = 'o', s = 80, alpha = 0.5)
    

    【讨论】:

    • 这对我不起作用。 alpha 值不变。例如,尝试将它们设置为 1:pts = map.scatter(x[0], y[0], c ='b', marker = 'o', s = 80, alpha = 1)pts = map.scatter(x[1], y[1], c ='g', marker = 'o', s = 80, alpha = 1)pts = map.scatter(x[2], y[2], c ='r', marker = 'o', s = 80, alpha = 1)
    • 将它们设置为 1 怎么样?使用 alpha=1,现在看起来像图 1。
    • 谢谢。但是,在 alpha=1 的情况下,您仍然可以看到下面的海岸线,因此它并不是真正的 alpha=1。我也希望这些点具有不同的 alpha 值。
    猜你喜欢
    • 2014-09-06
    • 1970-01-01
    • 2018-12-07
    • 2013-07-13
    • 2021-06-24
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    相关资源
    最近更新 更多