Wie erstellt man einen Barh-Plot mit vielen np.arrays?
Verfasst: Mittwoch 5. Februar 2020, 12:22
Ich baue eine Visualisierung mit Python auf, die tkinter, matplotlib und numpy enthält. Ich möchte mehrere Numpy-Arrays in einem Barh-Plot visualisieren. Damit ich alles in diesem einen Plot analysieren kann. In meinem vorherigen Code habe ich das nur mit Subplots geschafft. Aber ich musste immer zwei andere Subplots auskommentieren. Könnt ihr mir helfen, diese sechs Numpy-Arrays (Netflix_Beg / Ende, Youtube_Beg / Ende, Vimeo_Beg / Ende) in einem Barh-Plot zu visualisieren?
Das gewünschte Ergebnis sollte wie folgt aussehen. Dieses habe ich mit Powerpoint und meinem vorherigen Code erstellt.

Das gewünschte Ergebnis sollte wie folgt aussehen. Dieses habe ich mit Powerpoint und meinem vorherigen Code erstellt.

Code: Alles auswählen
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
import tkinter as tk
import numpy as np
fig, ax = plt.subplots(3, 1, facecolor = "white")
#data
Netflix_Beg = np.array([1,4,500,1500,2800,2960,2700, 5,2000,2000,3100,4000,4150,4150])
Netflix_End = np.array([5,1000,1000,2100,3000,3150,3150, 20,50,600,3500,3800,3960,3700])
Youtube_Beg = np.array([2,5,600,2600,3900,3970,3800, 6,3000,3000,4200,5000,5260,5260])
Youtube_End = np.array([6,2000,2000,3200,4000,4260,4260, 30,60,700,4600,4900,4070,4800])
Vimeo_Beg = np.array([0,3,400,400,1700,1850,1600,4,1000,1000,2000,3000,3040,3040])
Vimeo_End = np.array([4,500,500,1000,2000,2040,2040, 10,40,500,2400,2700,2850,2600])
Netflix = ["Netflix {}".format(i) for i in range(len(Netflix_Beg))]
Ytb = ["Youtube {}".format(i) for i in range(len(Youtube_Beg))]
Vim = ["Vimeo {}".format(i) for i in range(len(Vimeo_Beg))]
#window
root = tk.Tk()
root.title("Overview")
#plot
Plot_Netflix = plt.barh(range(len(Netflix_Beg)), Netflix_End-Netflix_Beg+20,
left=Netflix_Beg,
color='#BDD7EE')
#Plot_Youtube = plt.barh(range(len(Youtube_Beg)), Youtube_End-Youtube_Beg+20,
# left=Youtube_Beg,
# color='#C5E0B4')
#
#Plot_Vimeo = plt.barh(range(len(Vimeo_Beg)), Vimeo_End-Vimeo_Beg+20,
# left=Vimeo_Beg,
# color="red",
# alpha=0.5)
plt.yticks(range(len(Netflix_Beg)), Netflix)
#plt.yticks(range(len(Youtube_Beg)), Ytb)
#plt.yticks(range(len(Vimeo_Beg)), Vim)
plt.tight_layout()
#plot in tkinter window
canvas = FigureCanvasTkAgg(fig, master = root)
canvas.draw()
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=True)
canvas._tkcanvas.pack(side = tk.TOP, fill = tk.BOTH, expand = True)
#plot toolbar
toolbar = NavigationToolbar2Tk(canvas, root)
toolbar.update()
root.mainloop()