Question

Image size of 1005x132589 pixels is too large. It must be less than 2^16 in each direction

I am using matplotlib.pyplot to plot a graph from a Dataframe.

I want to show the height of the bar upon each rectangle and am using Text(). For normalising the y-axis, I have taken the log. Below is my code, I am getting error

Image size of 1005x132589 pixels is too large. It must be less than 2^16 in each direction

When I am not using plt.yscale('log') then the code is working fine.

According to some suggestions, I have restarted my kernel too, but still getting this issue. Any suggestions regarding this is welcomed.

My Code:

# data collected to list. 
list_alarms = df_region.alarmName
# list_east = df_region.EAST
list_west = df_region.WEST
list_north = df_region.NORTH
list_south = df_region.SOUTH


# X-ticks customization
N = len(list_alarms)
xpos = np.arange(N)

# this json file is used to update the style of the plot. 
s = json.load(open('style.json'))    
rcParams.update(s)

# Graph customize
plt.rcParams['figure.figsize'] = (15,8)
plt.xlabel('AlarmNames at different Regions')
plt.ylabel('Frequency for alarms in MNG-PAN devices')
plt.title('Alarm Generated by MNG-PAN Device at different Regions')
plt.xticks(xpos, list_alarms, rotation = 280)

# bar1 = plt.bar(xpos - 0.3,list_east, width = 0.2, label = 'EAST', color = '#3154C8')
bar2 = plt.bar(xpos - 0.1, list_west, label = 'WEST', color = '#FF9633')
bar3 = plt.bar(xpos + 0.1, list_north, label = 'NORTH', color ='#12B794')
bar4 = plt.bar(xpos + 0.3, list_south, label = 'SOUTH', color ='#EF6FE3')
plt.yscale('log')
plt.legend()

def autolabel(rects):
    for rect in rects:
        height = rect.get_height()
        if height < 10000:
            plt.text(rect.get_x() + rect.get_width()/2., 1.05*height, 
                 '%d'%int(height),
                 ha = 'center', va = 'bottom', rotation = 90, 
    fontsize=9)


# # autolabel(bar1)
autolabel(bar2)
autolabel(bar3)
autolabel(bar4)

plt.show()

I am using Jupyter Notebook, Pandas, Python3.

 46  113257  46
1 Jan 1970

Solution

 45

Check your location variables at plt.text line in autolabel definition. I had the same problem and I found that the y variable I gave to plt.text function was too large compared to the value of my dataset of plot.

This is also an issue with plt.annotate if the location is outside the figure.

2019-06-27

Solution

 9

It worked for me using the transform=ax.transAxes keyword argument:

for example:

plt.text(0.5, 0.5, 'Some text', transform=ax.transAxes)
2020-08-06