当图形大小改变时,Matplotlib会给出错误的刻度标签值

时间:2018-05-17 15:35:06

标签: python matplotlib

我正在使用以下代码绘制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 :(得分:1)

问题在于,调整大小后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