我正在使用以下代码绘制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轴标签:
但是,当我使用width = 4
更改绘图的大小时,我得到以下图表,其中y刻度值似乎由于某种原因减半:
是什么给出了?
干杯!
答案 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()
输出: