如何在标签上显示标签?

时间:2020-02-13 10:15:03

标签: python matplotlib tkinter

我想在barh-图上标记我的条。因此,我创建了文本numpy.array=Maintenance_component,该文本要显示在每个条形旁边。不幸的是我没有找到快速的解决方案。期望的结果应该如下。 expected output

# ___________________________________________________________________________
# Library 
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk 
import tkinter as tk
import numpy as np
# ___________________________________________________________________________
# Maintenance Array
Maintenance_km = np.array([30,400,400,1700,1850,1600])
Maintenance_cost = np.array([500,500,1000,2000,2040, 1800])
Maintenance_component = np.array(['engine','spoiler','diffusor','radio','window','fueltank'])
# ___________________________________________________________________________
# Main
Vis = tk.Tk()
Vis.title("Main") # titel
# ___________________________________________________________________________
# Plot
fig, ax = plt.subplots(1, 1, figsize=(20,5), facecolor = "white")

Plot_Maintenace_cost2 = plt.barh(range(len(Maintenance_km)),   Maintenance_km-Maintenance_cost+500, 
                    left=Maintenance_km,
                    height=0.9,
                    color='#C5E0B4')

ax.spines["bottom"].set_position("zero")
ax.spines["top"].set_color("none")
ax.spines["right"].set_color("none")
ax.spines["left"].set_color("none")
ax.tick_params(axis="x", length=20)

_, xmax = ax.get_xlim()
ymin, ymax = ax.get_ylim()
ax.set_xlim(-15, xmax)
ax.set_ylim(ymin, ymax+10) # legend
ax.text(xmax, -5, "km", ha="right", va="top", size=14)
plt.legend(ncol=5, loc="upper left")
plt.tight_layout() 

# ___________________________________________________________________________
# Canvas, Toolbar
canvas = FigureCanvasTkAgg(fig, master=Vis)
canvas.draw() # TK-Drawingarea
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=True)
canvas._tkcanvas.pack(side = tk.TOP, fill = tk.BOTH, expand = True)

toolbar = NavigationToolbar2Tk(canvas, Vis)
toolbar.update()

Vis.mainloop()

1 个答案:

答案 0 :(得分:1)

Maintenance_km = np.array([30,400,400,1700,1850,1600])
Maintenance_cost = np.array([500,500,1000,2000,2040, 1800])
Maintenance_component = np.array(['engine','spoiler','diffusor','radio','window','fueltank'])

fig, ax = plt.subplots()

Plot_Maintenace_cost2 = plt.barh(range(len(Maintenance_km)),   Maintenance_km-Maintenance_cost+500, 
                    left=Maintenance_km,
                    height=0.9,
                    color='#C5E0B4')
for x,y,t in zip(Maintenance_km+Maintenance_km-Maintenance_cost+500,range(len(Maintenance_km)),Maintenance_component):
    ax.annotate(t, xy=(x,y))

enter image description here