Ich versuche eine Radarkarte mit Python/Matplotlib zu erstellen, wo gemessene Daten mit dem eingebauten Animationsmodul von Matplotlib "abgespielt" werden können. Ich möchte, dass sich die Datenpunkte entlang ihrer jeweiligen Achsen bewegen, während der Datensatz durchlaufen wird. Ich habe Probleme, die Daten zu lesen und das Diagramm zu aktualisieren, und ich kann kein Beispiel dafür finden.Python animierte Radarkarte
Ich habe ein Stück Code angebracht, die Ihnen eine Vorstellung davon geben, was soll ich zu erreichen bin versucht:
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from math import pi
class SubplotAnimation(animation.TimedAnimation):
def __init__(self, data):
self.data = data
fig = plt.figure()
ax = fig.add_subplot(111, projection='polar')
# Figure definition
cat = ['A', 'B', 'C', 'D', 'E']
values = [10, 10, 10, 10, 10]
N = len(cat)
x_as = [n/float(N) * 2 * pi for n in range(N)]
# Because our chart will be circular we need to append a copy of
# the first value of each list at the end of each list with data
values += values[:1]
x_as += x_as[:1]
plt.rc('axes', linewidth=0.5, edgecolor='#888888') # Set color of axes
# Create polar plot
ax = plt.subplot(111, projection='polar')
# Set clockwise rotation. That is:
ax.set_theta_offset(pi/2)
ax.set_theta_direction(-1)
# Set position of y-labels
ax.set_rlabel_position(0)
# Set color and linestyle of grid
ax.xaxis.grid(True, color="#888888", linestyle='solid', linewidth=0.5)
ax.yaxis.grid(True, color="#888888", linestyle='solid', linewidth=0.5)
# Set number of radial axes and remove labels
plt.xticks(x_as[:-1], [])
# Set yticks
plt.yticks([20, 40, 60, 80, 100], ["20", "40", "60", "80", "100"])
# Set axes limits
plt.ylim(0, 100)
# Draw ytick labels to make sure they fit properly
for i in range(N):
angle_rad = i/float(N) * 2 * pi
if angle_rad == 0:
ha, distance_ax = "center", 10
elif 0 < angle_rad < pi:
ha, distance_ax = "left", 1
elif angle_rad == pi:
ha, distance_ax = "center", 1
else:
ha, distance_ax = "right", 1
ax.text(angle_rad, 100 + distance_ax, cat[i], size=10,
horizontalalignment=ha, verticalalignment="center")
animation.TimedAnimation.__init__(self, fig, interval=25, blit=True)
def new_frame_seq(self):
return iter(range(len(self.data)))
def _draw_frame(self, framedata):
ax.plot(ax, framedata)
testdata = [[10, 20, 30, 40, 50],
[10, 20, 30, 40, 50],
[40, 50, 60, 70, 80],
[40, 50, 60, 70, 80],
[50, 60, 70, 80, 90]]
ani = SubplotAnimation(testdata)
plt.show()
Irgendwelche Tipps, wie sehr zu schätzen, um diese Arbeit zu machen!
Vielen Dank dafür! Ich habe es funktioniert so, wie ich es wollte :-) – esvendsen
Großartig. Wenn dies die Frage beantwortet, können Sie es akzeptieren (https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work). Wenn Sie die Antwort mögen, können Sie [upvote] (https://meta.stackexchange.com/questions/173399/how-to-upvote-on-stack-overflow) es (dies wird gezählt werden, sobald Sie 15 Rep-Punkte erreichen). Wenn Sie dies noch nicht getan haben, ziehen Sie bitte die [Tour] in Betracht. – ImportanceOfBeingErnest