Matplotlib дает неправильные значения меток тиков при изменении размера фигуры - PullRequest
0 голосов
/ 17 мая 2018

Я использую следующий код для построения графика стека matplotlib:

mpl.rcdefaults()

fig, ax = plt.subplots()
years = [1980, 1990, 2000, 2010, 2020]
data = [
    [10000, 11000, 12000, 13000, 11000], [20000, 21000, 31000, 61000, 65000],
    [0, 10000, 30000, 100000, 90000]]

 ax.stackplot(years, data)

ax.grid(linestyle='--', color='k', alpha=0.15, axis='y')
ax.set_yticklabels([x / 1000 for x in ax.get_yticks()])

width = 6
height = width/1.6

fig.set_size_inches(width, height)

Это создает следующую диаграмму с правильными метками оси y: stackplot

Однако, когда я изменяю размер графика с помощью width = 4, я получаю следующую диаграмму, где значения тика y по некоторым причинам, по-видимому, сократились вдвое:

stack plot with the y tick labels showing half the value they should be

Что дает?

Ура!

1 Ответ

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

Проблема в том, что после изменения размера yticks они различаются, и, следовательно, вы получаете больший набор меток, который на самом деле не подходит соответственно.Вам нужно установить метки после изменения размера.Как вы видите, измененный график имеет только четыре галочки.Первые четыре метки от графика до изменения размера отображаются в ваших выходных данных, которые не являются правильными.

Просто для пояснения, я сохранил print() для tick и ticklabels до и после изменения размера.

import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

mpl.rcdefaults()

fig, ax = plt.subplots()

years = [1980, 1990, 2000, 2010, 2020]
data = [
    [10000, 11000, 12000, 13000, 11000], [20000, 21000, 31000, 61000, 65000],
    [0, 10000, 30000, 100000, 90000]]

ax.stackplot(years, data)
ax.grid(linestyle='--', color='k', alpha=0.15, axis='y')
print("Ticks before:",list(ax.get_yticks()))
width = 4
height = width/1.6
fig.set_size_inches(width, height)
ax.set_yticklabels([x/1000 for x in ax.get_yticks()])
print("Ticks after:",list(ax.get_yticks()))
plt.show()

Выход:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...