如何在底图中绘制圆圈或添加艺术家

时间:2018-03-06 15:38:26

标签: python matplotlib matplotlib-basemap

我想知道如何使用纬度和经度绘制带底图的圆圈。

import matplotlib.pyplot as plt
fig,ax = plt.subplots()
ax.axis([0,10,0,10])
circle1 = plt.Circle((5, 5), 2, color='black',fill=False)
x = ax.add_artist(circle1)
plt.show()

enter image description here

我想做同样的事情,但在我的底图图中使用x,y,radius作为lon lat

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

m = Basemap(projection="mill", #miller est une projection connu
    llcrnrlat =0,#lower left corner latitude
    llcrnrlon =0,
    urcrnrlat =10, #upper right lat
    urcrnrlon =10,
    resolution = "l") #c croud par defaut, l low , h high , f full 
m.drawcoastlines() #dessiner les lignes
m.drawcountries()
m.drawstates()
m.drawcounties(color="b")
#m.fillcontinents() #colorier les payes
#m.etopo()

x,y=m(5,5)
m.plot(x,y,"o")
plt.show()

enter image description here

2 个答案:

答案 0 :(得分:2)

所以我不确定你想要你的圆圈在你的地图中的半径,但是这段代码会在你的地图顶部绘制一个圆形多边形m

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from matplotlib.patches import Circle

m = Basemap(projection="mill", #miller est une projection connu
    llcrnrlat =0,#lower left corner latitude
    llcrnrlon =0,
    urcrnrlat =10, #upper right lat
    urcrnrlon =10,
    resolution = "l") #c croud par defaut, l low , h high , f full

对于这里的圆圈,我只是随意选择半径为y轴整个长度的1/3 ......

circle = Circle(xy=m(5,5),radius=(m.ymax - m.ymin) / 3, fill=False)
plt.gca().add_patch(circle)

m.drawcoastlines() #dessiner les lignes
m.drawcountries()
m.drawstates()
plt.show()

enter image description here

答案 1 :(得分:1)

准备好两个代码后,您可以将其复制到另一个代码中。唯一的问题可能是需要在地图坐标中计算圆半径,

r = 2
x,y=m(5,5)
x2,y2 = m(5,5+r) 
circle1 = plt.Circle((x, y), y2-y, ..)

完整示例:

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

fig,ax = plt.subplots()

m = Basemap(projection="mill", #miller est une projection connu
    llcrnrlat =0,#lower left corner latitude
    llcrnrlon =0,
    urcrnrlat =10, #upper right lat
    urcrnrlon =10,
    resolution = "l", ax=ax) #c croud par defaut, l low , h high , f full 
m.drawcoastlines() #dessiner les lignes
m.drawcountries()
m.drawstates()
m.drawcounties(color="b")

x,y=m(5,5)
x2,y2 = m(5,5+2) 
circle1 = plt.Circle((x, y), y2-y, color='black',fill=False)
ax.add_patch(circle1)
plt.show()

enter image description here