Cartopy/MatplotlibRGBA错误
Cartopy/Matplotlib RGBA error
我正在尝试使用 cartopy 和 matplotlib 在地图上使用自定义颜色绘制 shapefile。
import numpy as np
import matplotlib.pyplot as plt
import cartopy as cartopy
import pandas as pd
import random as rd
def getcolor(buurtnaam):
a = rd.uniform(0.0, 255.0)
b = rd.uniform(0.0, 255.0)
c = rd.uniform(0.0, 255.0)
return tuple([a, b, c, 1])
ax = plt.axes(projection=cartopy.crs.PlateCarree())
ax.set_extent((5.35, 5.60, 51.4, 51.5), crs=cartopy.crs.PlateCarree())
filelocation=('buurt.shp')
reader = cartopy.io.shapereader.Reader(filelocation)
for label,shape in zip(reader.records(),reader.geometries()):
coordinates=cartopy.feature.ShapelyFeature(shape, cartopy.crs.PlateCarree(),edgecolor='black')
ax.add_feature(coordinates, facecolor=getcolor(label.attributes['buurtnaam']))
plt.show()
但是,这会产生以下结果:
ValueError: Invalid RGBA argument: 5.850575504984446
当我通过在 for 循环中打印它们来检查我的 RGBA 值时,它们看起来是正确的。
print(label.attributes['buurtnaam'])
Rochusbuurt
print (getcolor(label.attributes['buurtnaam']))
(109.8833008320893, 179.51867989390442, 211.09771601504892, 1)
print (type(getcolor(label.attributes['buurtnaam'])))
class 'tuple'
我的 RGBA 格式正确吗?这是 cartopy/matplotlib 中的错误吗?
看起来您的 get_color
函数正在生成与您的 shapefile 无关的随机数,并且这些数字正用于您的 RGB 值。当您将属性名称 buurtnaam
传递给函数时,您需要以某种方式将其合并到 RGB 值生成中。
同时我解决了它。 RGBA 元组应包含 4 个介于 0 和 1 之间的值。
import numpy as np
import matplotlib.pyplot as plt
import cartopy as cartopy
import pandas as pd
import random as rd
def getcolor(buurtnaam):
a = rd.uniform(0.0, 1.0)
b = rd.uniform(0.0, 1.0)
c = rd.uniform(0.0, 1.0)
return tuple([a, b, c, 1])
ax = plt.axes(projection=cartopy.crs.PlateCarree())
ax.set_extent((5.35, 5.60, 51.4, 51.5), crs=cartopy.crs.PlateCarree())
filelocation=('buurt.shp')
reader = cartopy.io.shapereader.Reader(filelocation)
for label,shape in zip(reader.records(),reader.geometries()):
coordinates=cartopy.feature.ShapelyFeature(shape, cartopy.crs.PlateCarree(),edgecolor='black')
ax.add_feature(coordinates, facecolor=getcolor(label.attributes['buurtnaam']))
plt.show()
我正在尝试使用 cartopy 和 matplotlib 在地图上使用自定义颜色绘制 shapefile。
import numpy as np
import matplotlib.pyplot as plt
import cartopy as cartopy
import pandas as pd
import random as rd
def getcolor(buurtnaam):
a = rd.uniform(0.0, 255.0)
b = rd.uniform(0.0, 255.0)
c = rd.uniform(0.0, 255.0)
return tuple([a, b, c, 1])
ax = plt.axes(projection=cartopy.crs.PlateCarree())
ax.set_extent((5.35, 5.60, 51.4, 51.5), crs=cartopy.crs.PlateCarree())
filelocation=('buurt.shp')
reader = cartopy.io.shapereader.Reader(filelocation)
for label,shape in zip(reader.records(),reader.geometries()):
coordinates=cartopy.feature.ShapelyFeature(shape, cartopy.crs.PlateCarree(),edgecolor='black')
ax.add_feature(coordinates, facecolor=getcolor(label.attributes['buurtnaam']))
plt.show()
但是,这会产生以下结果:
ValueError: Invalid RGBA argument: 5.850575504984446
当我通过在 for 循环中打印它们来检查我的 RGBA 值时,它们看起来是正确的。
print(label.attributes['buurtnaam'])
Rochusbuurt
print (getcolor(label.attributes['buurtnaam']))
(109.8833008320893, 179.51867989390442, 211.09771601504892, 1)
print (type(getcolor(label.attributes['buurtnaam'])))
class 'tuple'
我的 RGBA 格式正确吗?这是 cartopy/matplotlib 中的错误吗?
看起来您的 get_color
函数正在生成与您的 shapefile 无关的随机数,并且这些数字正用于您的 RGB 值。当您将属性名称 buurtnaam
传递给函数时,您需要以某种方式将其合并到 RGB 值生成中。
同时我解决了它。 RGBA 元组应包含 4 个介于 0 和 1 之间的值。
import numpy as np
import matplotlib.pyplot as plt
import cartopy as cartopy
import pandas as pd
import random as rd
def getcolor(buurtnaam):
a = rd.uniform(0.0, 1.0)
b = rd.uniform(0.0, 1.0)
c = rd.uniform(0.0, 1.0)
return tuple([a, b, c, 1])
ax = plt.axes(projection=cartopy.crs.PlateCarree())
ax.set_extent((5.35, 5.60, 51.4, 51.5), crs=cartopy.crs.PlateCarree())
filelocation=('buurt.shp')
reader = cartopy.io.shapereader.Reader(filelocation)
for label,shape in zip(reader.records(),reader.geometries()):
coordinates=cartopy.feature.ShapelyFeature(shape, cartopy.crs.PlateCarree(),edgecolor='black')
ax.add_feature(coordinates, facecolor=getcolor(label.attributes['buurtnaam']))
plt.show()