Python 如何使用多个np.Array创建一个barh图?
我正在用Python构建一个可视化,包括tkinter、matplotlib和numpy。 我想在一个barh图中可视化几个numpy数组。这样我就可以分析这个图中的所有内容了。 在我以前的代码中,我只使用子地块实现了这一点。但我总是要注释掉另外两个子地块。 你能帮我把这六个numpy阵列(Netflix_Beg/End、Youtube_Beg/End、Vimeo_Beg/End)想象成一个barh图吗 预期结果应如下所示。这是我用powerpoint和以前的代码创建的 以下是我以前的代码:Python 如何使用多个np.Array创建一个barh图?,python,numpy,matplotlib,data-visualization,visualization,Python,Numpy,Matplotlib,Data Visualization,Visualization,我正在用Python构建一个可视化,包括tkinter、matplotlib和numpy。 我想在一个barh图中可视化几个numpy数组。这样我就可以分析这个图中的所有内容了。 在我以前的代码中,我只使用子地块实现了这一点。但我总是要注释掉另外两个子地块。 你能帮我把这六个numpy阵列(Netflix_Beg/End、Youtube_Beg/End、Vimeo_Beg/End)想象成一个barh图吗 预期结果应如下所示。这是我用powerpoint和以前的代码创建的 以下是我以前的代码:
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()
像这样
#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))]
fig, ax = plt.subplots(figsize=(8,8))
Plot_Netflix = plt.barh(range(len(Netflix_Beg)), Netflix_End-Netflix_Beg+20,
left=Netflix_Beg,
color='#BDD7EE')
Plot_Youtube = plt.barh(len(Netflix_Beg)+np.arange(len(Youtube_Beg)), Youtube_End-Youtube_Beg+20,
left=Youtube_Beg,
color='#C5E0B4')
Plot_Vimeo = plt.barh(len(Netflix_Beg)+len(Youtube_Beg)+np.arange(len(Vimeo_Beg)), Vimeo_End-Vimeo_Beg+20,
left=Vimeo_Beg,
color="red",
alpha=0.5)
plt.yticks(range(len(Netflix_Beg)+len(Youtube_Beg)+len(Vimeo_Beg)), Netflix+Ytb+Vim)
plt.tight_layout()
非常感谢!我现在有很多数据系列(行)。因此,绘图的比例非常小。你知道如何激活条形图中的滚动条吗?也许我可以为每个条指定一个固定的宽度?