J'utilise matplotlib.pyplot pour tracer le graphique à partir de Dataframe. Ici, je veux montrer la hauteur de la barre sur chaque rectangle et j'utilise Text (). Et pour normaliser l'axe Y, j'ai pris Logscale sur l'axe Y. Ci-dessous mon code, je reçois une erreur
Image size of 1005x132589 pixels is too large. It must be less than 2^16 in each direction
Lorsque je n'utilise pas plt.yscale('log')
, le code fonctionne correctement. Selon certaines suggestions, j'ai également redémarré mon noyau, mais j'obtiens toujours ce problème. Toute suggestion à ce sujet est la bienvenue.
Mon code:
"
# données collectées dans la liste. 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()
"
J'utilise Jupyter Notebook, Pandas, Python3.
Vérifiez vos variables d'emplacement à plt.text
ligne dans la définition de l'autolabel. J'ai eu le même problème et j'ai trouvé cette variable y que j'ai donnée à plt.text
la fonction est trop grande par rapport à la valeur de mon jeu de données de tracé.
Vous pouvez ajuster les pixels et mettre à jour votre 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)