2016-12-07 3 views
-1

Я использую Spyder (python 2.7) и строит графики с использованием matplotlib. Когда у меня есть кусок кода (см. Ниже), все выглядит отлично, если я выделил и выполнил мой код вручную. Однако, если я нажал кнопку запуска для полного скрипта или выполнил этот код в цикле, ярлыки y-tick исчезнут с каждого графика. Не могу для меня жизнь найти проблему.Ярлыки Y-tick исчезают, если я запускаю полный скрипт Python (matplotlib)

data2plot = [120.0, 56.0, 26.0, 11.0, 6.0, 6.0, 5.0, 5.0, 3.0, 3.0, 2.0, 2.0, 2.0] 
bar_locs = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0] 
x_labs = ['','','','','','','','','','','','',''] 
fig, ax = plt.subplots() 
#plot_help.bigfig()  
rects = ax.bar(bar_locs, data2plot, 0.75, color='steelblue', align='center')     
ax.set_xticks(bar_locs) 
ax.set_xticklabels(x_labs, fontweight='bold', fontsize=13, rotation=-45, ha='left')  
ax.set_xlim(0, len(x_labs)+0.75) 
#ax.set_ylim(0, y_max) 
ax.set_ylabel('Pageviews', fontweight='bold', fontsize=15) 
ax.set_yticklabels(ax.get_yticklabels(), fontweight='bold', fontsize=13) 
ax.set_title('Title', fontweight='bold', fontsize=16)  

plt.gcf().subplots_adjust(bottom=0.45) 
#plot_help.simpleaxis(ax) 
+0

Вы не должны публиковать код, который работает. Но вместо этого отправьте код, который дает ошибку. – ImportanceOfBeingErnest

+0

Если я нажму «запустить» на этом скрипте, то этот код действительно даст «ошибку» в том смысле, что на графике не будет ярлыков y-tick. – pavlov

+0

Никто не может проверить это, потому что у нас нет ваших переменных. Если вам интересно получить ответ, вы должны предоставить [MCVE]. – ImportanceOfBeingErnest

ответ

0

Проблема, с которой вы столкнулись, находится в этой строке ax.set_yticklabels(ax.get_yticklabels(), ...).
В данный момент времени вы звоните ax.get_yticklabels() ticklabels еще не установлены, поэтому ax.get_yticklabels() возвращает список пустых строк. Эти пустые строки затем устанавливаются как новые идентификаторы. Вы можете предотвратить это, если вы вызываете fig.canvas.draw() перед вызовом. Это нарисует фигуру и инициализирует метки метки, чтобы список не был пустым, когда он был передан сеттеру.

Вот полный код.

import matplotlib.pyplot as plt 

data2plot = [120.0, 56.0, 26.0, 11.0, 6.0, 6.0, 5.0, 5.0, 3.0, 3.0, 2.0, 2.0, 2.0] 
bar_locs = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0] 
x_labs = ['','','','','','','','','','','','',''] 

fig, ax = plt.subplots() 
rects = ax.bar(bar_locs, data2plot, 0.75, color='steelblue', align='center') 

# x-axis    
ax.set_xticks(bar_locs) 
ax.set_xticklabels(x_labs, fontweight='bold', fontsize=13, rotation=-45, ha='left')  
ax.set_xlim(0, len(x_labs)+0.75) 

#y-axis 
ax.set_ylabel('Pageviews', fontweight='bold', fontsize=15) 
fig.canvas.draw() 
ax.set_yticklabels(ax.get_yticklabels(), fontweight='bold', fontsize=13) 


ax.set_title('Title', fontweight='bold', fontsize=16)  
plt.gcf().subplots_adjust(bottom=0.45) 
plt.show() 


В качестве альтернативы, если ваше намерение получить все тексты, этикетки и названия на рисунке жирным и большим, то вы могли бы рассмотреть вопрос об использовании matplotlib rcParams следующим образом.

plt.rc('font', size=13, weight='bold') 
plt.rc('figure', titlesize="x-large", titleweight ='bold') 
plt.rc("axes", labelsize = "large", labelweight = "bold", titlesize="x-large", titleweight="bold") 

data2plot = [120.0, 56.0, 26.0, 11.0, 6.0, 6.0, 5.0, 5.0, 3.0, 3.0, 2.0, 2.0, 2.0] 
bar_locs = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0] 
x_labs = ['','','','','','','','','','','','',''] 

fig, ax = plt.subplots() 
rects = ax.bar(bar_locs, data2plot, 0.75, color='steelblue', align='center') 

# x-axis    
ax.set_xticks(bar_locs) 
ax.set_xticklabels(x_labs, rotation=-45, ha='left')  
ax.set_xlim(0, len(x_labs)+0.75) 

#y-axis 
ax.set_ylabel('Pageviews') 

ax.set_title('Title')  
plt.gcf().subplots_adjust(bottom=0.45) 
plt.show()