Hallo,
ich habe ein Dataframe mit zehn Spalten. Von diesen Spalten möchte ich zwei in einem Punktidagramm plotten. Dabei sollen die neusten, also obersten 50 Werte, mit einem größeren Punkt geplottet werden als die Restlichen. Zudem sollen alle grün markiert werden, außer diejenigen Datenpunkte, welche sich außerhalb gewisser XY-Grenzen bewegen. Diese sollen rot markiert werden. Klar könnte ich jetzt aus dem Dataframe vier "Einzelne" machen. Also:
-Tabelle 1: letzte 50 Teile okay (i.O.) -> Datenpunkte groß + Farbe grün
-Tabelle 2: letzte 50 Teile nicht okay (n.i.O.) -> Datenpunkte groß + Farbe rot
-Tabelle 3: alle Teile außer die ersten 50 Stk. okay (i.O.) -> Datenpunkte klein + Farbe grün
-Tabelle 4: alle Teile außer die ersten 50 Stk. nicht okay (n.i.O.) -> Datenpunkte klein + Farbe rot
und dann alle einzeln mit scatter Plotten. So habe ich es jetzt gemacht. Aber ich wollte mal abklären weil ich dazu nichts im Netz gefunden habe, ob es noch eine andere, evtl. bessere, Lösung gibt. Wäre dankbar über Eure Erfahrungen dazu.
Danke!
Datenpunkte aus Dataframe mit unterschiedlichen Farben und Punktgrößen plotten
Erster Anlaufpunkt wäre, in die Dokumentation (https://pandas.pydata.org/docs/referenc ... atter.html) zu schauen, vor allem, was da zu Size und Color steht.
-
- User
- Beiträge: 77
- Registriert: Samstag 25. April 2020, 19:03
Ich habe es wie folgt gelöst:
Code: Alles auswählen
self.a_scatter_colors = ['red' if x==1 or y==1 else 'green' for x,y in zip(self.df_Data_GM['BM_niO'], self.df_Data_GM['AS_niO'])]
self.a_scatter_sizes = [15 if i <= self.n_latest_X_values-1 else 1 for i in range(len(self.df_Data_GM))]
self.a_scatter_edgecolors = ['black' if i <= self.n_latest_X_values-1 else 'none' for i in range(len(self.df_Data_GM))]
self.fig1, self.ax = plt.subplots(figsize=(7.5, 6.5))
self.ax.scatter(list(self.df_Data_GM['Beugemoment']), list(self.df_Data_GM['Axialspiel']), color=self.a_scatter_colors, s=self.a_scatter_sizes, edgecolor=self.a_scatter_edgecolors)
self.ax.set_xlabel('Beugemoment [Nm]', fontsize=12)
self.ax.set_ylabel('Axialspiel [mm]', fontsize=12)
self.ax.grid()
self.canvas = FigureCanvasTkAgg(self.fig1, master = self.frame_chart)
self.canvas.draw()
self.canvas.get_tk_widget().grid(row=0, column=0)
@NinoBaumann: ein guter Einstieg ist es, das Pandas-Tutorial durchzuarbeiten. Dort lernt man die wichtigsten Funktionen von Pandas kennen.
Es macht meist keinen Sinn, alles an self zu binden. ax, colors, sizes und edgecolors sind nur für das Plotten relevant und kaum in anderen Bereichen Deines Programms.
Bei fig1 scheint die 1 willkürlich.
Es macht meist keinen Sinn, alles an self zu binden. ax, colors, sizes und edgecolors sind nur für das Plotten relevant und kaum in anderen Bereichen Deines Programms.
Bei fig1 scheint die 1 willkürlich.
Code: Alles auswählen
bm_or_as = (self.df_Data_GM['BM_niO'] == 1) | (self.df_Data_GM['AS_niO'] == 1)
first_datasets = (bm_or_as.index.to_series() < self.n_latest_X_values)
colors = bm_or_as.map({False: "red", True: "green"})
sizes = first_datasets.map({True: 15, False: 1})
edge_colors = first_datasets.map({True: 'black', False: 'none'})
figure, axis = plt.subplots(figsize=(7.5, 6.5))
self.df_Data_GM.plot.scatter(
'Beugemoment', 'Axialspiel',
ax=axis
c=colors,
s=sizes,
edgecolor=edge_colors
xlabel='Beugemoment [Nm]',
ylabel='Axialspiel [mm]',
fontsize=12,
grid=True
)
self.canvas = FigureCanvasTkAgg(figure, master=self.frame_chart)
self.canvas.draw()
self.canvas.get_tk_widget().grid(row=0, column=0)