如何更改绘图的大小并防止y轴重叠?

时间:2016-12-25 11:59:31

标签: python matplotlib plot graph

我绘制了一个带有大量水平条的水平条形图。 有什么方法可以阻止y轴标题和条形图中的条形重叠。或者唯一的方法是增加图表的高度? 我尝试过使用: plt.figure(figsize =(13,14))但当我尝试用 plt替换 plt.show()时,它也不起作用。图(figsize =(13,14))。显示()

我收到错误: UserWarning:matplotlib目前正在使用非GUI后端,因此无法显示图   " matplotlib目前正在使用非GUI后端,"

import matplotlib.pyplot as plt
plt.rcdefaults()
import numpy as np
import matplotlib.pyplot as plt

length=[477, 531, 568, 651, 1599, 1605, 1635, 1960, 2009, 2446, 2668, 3308, 3433, 3889, 4180, 4529, 5388, 6378, 7588, 7671, 7679, 8505, 8763, 8863, 8910, 9028, 9030, 10124, 10722, 10894, 11103, 11388, 12167, 12464, 14217, 14367, 14472, 16501, 18765, 19407, 19627, 20795, 21727, 21912, 22620, 24871, 25045, 25625, 25867, 27512, 30380, 30424, 31264, 32070, 32277, 33879, 35749, 35932, 37406, 37414, 40040, 42070, 42516, 42804, 44381, 46314, 48216, 48349, 50547, 50796, 53759, 54716, 65888, 81106, 86280, 104522, 179133, 189921]
y_pos = np.arange(len(length))
error = np.random.rand(len(length))
plt.barh(y_pos, length, xerr=error*2, align='center', alpha=0.3)
plt.yticks(y_pos, length)
plt.xlabel('Lengths')
plt.title('Comparison of different cuts')
plt.show()  

这是我所指的图表:

enter image description here

2 个答案:

答案 0 :(得分:1)

您正在小空间内绘制大量条形图并标记每个刻度线。使这个清晰易读的最简单方法是增加绘图的长度。立即使用plt.figure(figsize=(10,20))使我的情节清晰可见。

如果你想保持图形相同的大小,你可以调整一些其他的旋钮。首先,您可以使用height参数控制每个水平条的高度。它默认为.8所以尝试使用较低的值。您还可以使用fontsize参数控制yticks的大小。调整这些参数将为您提供不重叠的条形/刻度,但代价是分辨率。要在使用plt.savefig保存图形时提高分辨率,请使用dpi参数将其设置为高于默认值。

答案 1 :(得分:0)

y轴上的标签数量非常多,因此很难将它们全部放入绘图中。增加绘图的大小将有所帮助,另一件可能有帮助的事情是减少y-tick标签的字体大小,如下所示:

ax = plt.gca()
for tick in ax.yaxis.get_major_ticks():
    tick.label.set_fontsize(6)

也许你也可以给出所有其他或第三个y-tick标签。