Встраивание диаграммы matplotlib с помощью FigureCanvasTkAgg - установка xticks - PullRequest
0 голосов
/ 13 мая 2018

Я создаю графический интерфейс, который включает в себя множество встроенных диаграмм. Для этого я использую matplotlib и FigureCanvasTkAgg с tkinter , и все отлично работает, кроме меток оси x. Я могу легко установить метки с помощью plt.xticks при создании диаграммы matplotlib, которая появляется в новом окне, но не при использовании FigureCanvasTkAgg .

Я не включил свой полный код, так как он слишком длинный, но я включил весь код, который я считаю релевантным (pyplot используется в другом месте, но не должен относиться к моей проблеме). chart.set_xticks здесь на самом деле ничего не делает: вместо отображения меток в списке с заголовком objects , он показывает 0, затем поднимается в целых числах с каждой другой точкой данных, фактически помеченной как согласно изображению ниже. Я пробовал разные вещи, используя chart.set_xticks , но могу удалить только все метки, используя chart.set_xticks ([]) или указать целые числа, используя chart.set_xticks ([0 , 1,2,3 ...]) , которая помечает каждую точку данных, но не соответствует меткам, которые мне требуются.

Есть идеи?

Bar chart without correct x labels

import matplotlib.pyplot as plt
import matplotlib
matplotlib.use("TkAgg")
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure

objects = ["2x", "3x", "4x", "5x", "6x", "7x", "8x", "9x", "10x", "11x", "12x", "Year 2", "Year 3", "Year 4"]    
y_pos = np.arange(len(objects))

fig = Figure(figsize=(font * 8, font * 5))

chart = fig.add_subplot(111)
chart.set_ylim(ymin=0, ymax=32)
chart.bar(y_pos, plotList, color=colours, alpha=0.5, label="Table")
chart.bar(y_pos, inversePlotList, color=colours, label="Inverse")
chart.set_xticks(y_pos, objects)
chart.set_ylabel("Average score")
chart.legend()

canvas = FigureCanvasTkAgg(fig, master=userTablesFrame)
canvas.get_tk_widget().place(relx=0.5, rely=0.5, anchor=CENTER)
canvas.draw()

1 Ответ

0 голосов
/ 14 мая 2018

Из документации plt.xticks:

Вызов этой функции с аргументами является эквивалентом pyplot вызова set_xticks и set_xticklabels на текущих осях.

Таким образом, чтобы получить одинаковое поведение, вы должны использовать set_xticks и set_xticklabels:

chart.set_xticks(y_pos)
chart.set_xticklabels(objects)
...