Ich möchte Kreise über einem 2D-Diagramm in Matplotlib als Positionsmarkierungen überlagern. Zur Zeit sehen sie sehr viel wie das, was sie sind, farbige Kreise:Rendern Sie einen Kreis, so dass er in Matplotlib als 3D-Kugel erscheint
import matplotlib.pyplot as plt
plt.axes()
circle = plt.Circle((0, 0), radius=0.3,fc='b')
circle1 = plt.Circle((1, 1), radius=0.3, fc='y')
circle2 = plt.Circle((1, 0), radius=0.3, fc='r')
plt.gca().add_patch(circle)
plt.gca().add_patch(circle1)
plt.gca().add_patch(circle2)
plt.axis('scaled')
plt.show()
Gibt es eine Möglichkeit Thesen zu geben, das Aussehen eines 3D-Objekt umkreist ohne MayaVi zu verwenden?
Dies sind Beispiele für mein Ziel:
EDIT
Mit den Informationen in dem von user3419537 geliefert Link und die Idee, hier Custom color maps präsentiert ich die folgende Idee geschaffen, die lassen mich irgendwie plot Kreise mit einem Gefälle gefüllt:
import numpy as np
import matplotlib.colors as mcolors
def make_colormap(seq):
"""Return a LinearSegmentedColormap
seq: a sequence of floats and RGB-tuples. The floats should be increasing
and in the interval (0,1).
"""
seq = [(None,) * 3, 0.0] + list(seq) + [1.0, (None,) * 3]
cdict = {'red': [], 'green': [], 'blue': []}
for i, item in enumerate(seq):
if isinstance(item, float):
r1, g1, b1 = seq[i - 1]
r2, g2, b2 = seq[i + 1]
cdict['red'].append([item, r1, r2])
cdict['green'].append([item, g1, g2])
cdict['blue'].append([item, b1, b2])
return mcolors.LinearSegmentedColormap('CustomMap', cdict)
def gauplot(centers, radiuses, xr=None, yr=None, P_color='black'):
c = mcolors.ColorConverter().to_rgb
# Maybe it is possible to change the values to get a better gradient?
current_cmap = make_colormap([c(P_color),0.05,c(P_color),0.1,c(P_color), c('white')])
nx, ny = 1000.,1000.
xgrid, ygrid = np.mgrid[xr[0]:xr[1]:(xr[1]-xr[0])/nx,yr[0]:yr[1]:(yr[1]-yr[0])/ny]
im = xgrid*0 + np.nan
xs = np.array([np.nan])
ys = np.array([np.nan])
fis = np.concatenate((np.linspace(-np.pi,np.pi,100), [np.nan]))
#cmap = plt.cm.gray
cmap = current_cmap
cmap.set_bad('white')
thresh = 2.8
for curcen,currad in zip(centers,radiuses):
curim=(((xgrid-curcen[0])**2+(ygrid-curcen[1])**2)**.5)/currad*thresh
im[curim<thresh]=np.exp(-.5*curim**2)[curim<thresh]
xs = np.append(xs, curcen[0] + currad * np.cos(fis))
ys = np.append(ys, curcen[1] + currad * np.sin(fis))
plt.imshow(im.T, cmap=cmap, extent=xr+yr)
plt.plot(xs, ys, 'r-')
gauplot([(0,0), (2,3), (5,1), (6, 7), (6.1, 6.1)], [.3,.4, .5, 1, .4], [-1,10], [-1,10],P_color="#75507b")
plt.show()
Leider nur die roten Kreise erscheinen an der richtigen Stelle:
Ich würde einen Tipp schätzen, was die Ursache dafür sein könnte.
Im Moment ich so meine Kreise im Skript in Frage bin Plotten:
circle = Circle(x,y,*kwargs)
plt.gca().add_patch(circle)
wäre es möglich, die obige Lösung in einer Art und Weise anzupassen, dass es Kreise mit verschiedenen Farben an der Position dargestellt werden kann, (x, y) und überlagern sie auch einem vorhandenen Plot?
Wie wäre es etwas, um [diese] (https://stackoverflow.com/a/10995481/3419537)? – user3419537
Sie könnten ein Bild verwenden, wie in [diese Frage] (https://stackoverflow.com/questions/44989950/place-an-image-between-custom-lines-in-a-plot-in-python) und ersetzen Sie die Blaubeeren mit Ihrem Bild. – ImportanceOfBeingErnest
@ user3419537 Danke, das sieht nach einer Lösung aus, die ich anpassen könnte! – NorrinRadd