问题
I'm not advanced user of Python, but due to my scientific work I got tasks to plot some graphs with Matplotlib. Now I have to draw smooth-deformed according to the basemap projection, circles around given point. But in the result I got circles with broken lines:
import numpy as np
import matplotlib.pyplot as plt
def plot_mwd(RA,Dec,org=0,title='GCS', projection='aitoff'):
x = np.remainder(RA+360-org,360) # shift RA values
ind = x>180
x[ind] -=360 # scale conversion to [-180, 180]
x=-x # reverse the scale: East to the left
tick_labels = np.array([150, 120, 90, 60, 30, 0, 330, 300, 270, 240, 210])
tick_labels = np.remainder(tick_labels+360+org,360)
fig = plt.figure(figsize=(10, 5))
ax = fig.add_subplot(111, projection=projection, axisbg ='LightCyan')
ax.scatter(np.radians(x),np.radians(Dec), s = 30, c = 'k', marker = '.') # convert degrees to radians
ax.set_xticklabels(tick_labels) # we add the scale on the x axis
ax.set_title(title)
ax.title.set_fontsize(15)
ax.xaxis.label.set_fontsize(12)
ax.yaxis.label.set_fontsize(12)
ax.grid(color='tab:gray', linestyle='-', linewidth=0.2)
circle1 = plt.Circle((np.radians(35),np.radians(30)), np.radians(40), color='g', fill = False) # Circle parameters
fig = plt.gcf()
ax = fig.gca()
ax.add_artist(circle1)
coord = np.array([(325,30)]) # coordinates that will be ploted
plot_mwd(coord[:,0],coord[:,1], org=0, title ='GCS', projection ='aitoff')
plt.show()
回答1:
The function plt.Circle()
does not allow to specify the number of vertexes to plot. So, you need to write up your own code. Here is my code that you may try:
# Plot circle with 36 vertexes
phi = np.linspace(0, 2.*np.pi, 36) #36 points
r = np.radians(40)
x = np.radians(35) + r*np.cos(phi)
y = np.radians(30) + r*np.sin(phi)
ax.plot(x, y, color="g")
Use my code in place of yours 2 lines:
circle1 = plt.Circle((np.radians(35), np.radians(30)), np.radians(40), color='g', fill = False) # Circle parameters
ax.add_artist(circle1)
The resulting image:
来源:https://stackoverflow.com/questions/48950420/how-to-make-smooth-circles-on-basemap-projections-in-matplotlib-by-python