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

陌路散爱 提交于 2021-02-04 14:28:26

问题


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.


回答1:


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.




回答2:


Your X axis might be string values and plt.text() only take scalar values to move on the axis. So that's why your range might be beyond the image size. Convert the x-axis to scalar values. I had same problem, I did the same.




回答3:


You can adujust pixels and update your update_datalim()

fig = plt.figure(1, figsize=(8, 14), frameon=False, dpi=100)
fig.add_axes([0, 0, 1, 1])
ax = plt.gca()

corners = ((x1, y1), (x2, y2))
ax.update_datalim(corners)



回答4:


Another possible explanation could be that one of your y-axis values is zero. Thus you could edit your autolabel function into something like this:

def autolabel(rects):
for rect in rects:
    height = rect.get_height()
    if (height != 0):
        ax.annotate('{}'.format(height),
                    xy=(rect.get_x() + rect.get_width() / 2, height),
                    xytext=(0, 3),  # 3 points vertical offset
                    textcoords="offset points",
                    ha='center', va='bottom')



回答5:


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

for example:

plt.text(0.5, 0.5, 'Some text', transform=ax.transAxes)


来源:https://stackoverflow.com/questions/51980366/image-size-of-1005x132589-pixels-is-too-large-it-must-be-less-than-216-in-each

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!