Другое событие NullPointerException
возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.
String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals
для гарантированного непустого объекта.
Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null
.
Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.
String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Обратите внимание, что новые версии MPL имеют ярлык для этой задачи. Пример показан в другом ответе на этот вопрос: https://stackoverflow.com/a/11386056/42346
Код ниже приведен в иллюстративных целях и может не обязательно оптимизироваться.
import matplotlib.pyplot as plt
import numpy as np
def xticklabels_example():
fig = plt.figure()
x = np.arange(20)
y1 = np.cos(x)
y2 = (x**2)
y3 = (x**3)
yn = (y1,y2,y3)
COLORS = ('b','g','k')
for i,y in enumerate(yn):
ax = fig.add_subplot(len(yn),1,i+1)
ax.plot(x, y, ls='solid', color=COLORS[i])
if i != len(yn) - 1:
# all but last
ax.set_xticklabels( () )
else:
for tick in ax.xaxis.get_major_ticks():
tick.label.set_fontsize(14)
# specify integer or one of preset strings, e.g.
#tick.label.set_fontsize('x-small')
tick.label.set_rotation('vertical')
fig.suptitle('Matplotlib xticklabels Example')
plt.show()
if __name__ == '__main__':
xticklabels_example()
[/g1]
Вы также можете изменить параметры отображения ярлыков, например fontsize, с помощью следующей строки:
zed = [tick.label.set_fontsize(14) for tick in ax.yaxis.get_major_ticks()]
В текущих версиях Matplotlib вы можете сделать axis.set_xticklabels(labels, fontsize='small')
.
На самом деле существует более простой способ. Я только что нашел:
import matplotlib.pyplot as plt
# We prepare the plot
fig = plt.figure(1)
# We define a fake subplot that is in fact only the plot.
plot = fig.add_subplot(111)
# We change the fontsize of minor ticks label
plot.tick_params(axis='both', which='major', labelsize=10)
plot.tick_params(axis='both', which='minor', labelsize=8)
Это только ответы на размер label
части вашего вопроса.
plt.tick_params (axis = 'both', which = 'minor', labelize = 12)
Другая альтернатива
У меня есть два графика бок о бок и хотелось бы настроить метки меток отдельно.
Вышеупомянутые решения были близки, но они не работали для меня. Я нашел свое решение с этой страницы matplotlib .
ax.xaxis.set_tick_params(labelsize=20)
Это сделало трюк и было прямо к делу. Для моего случая использования это был сюжет справа, который нужно было отрегулировать. Для графика слева, так как я создавал новые метки меток, я смог отрегулировать шрифт в том же процессе, что и установка меток.
т.е.
ax1.set_xticklabels(ax1_x, fontsize=15)
ax1.set_yticklabels(ax1_y, fontsize=15)
, таким образом, я использовал для правого сюжета,
ax2.xaxis.set_tick_params(labelsize=24)
ax2.yaxis.set_tick_params(labelsize=24)
Минор тонко ... Я знаю ... но я надеюсь, что это кому-то помогает:)
Бонусные баллы, если кто знает, как настроить размер шрифта метки порядка величины.
Для меньшего шрифта я использую
ax1.set_xticklabels (xticklabels, fontsize = 7)
blockquote>, и он работает!
Для меня работало следующее:
ax2.xaxis.set_tick_params(labelsize=7)
ax2.yaxis.set_tick_params(labelsize=7)
Преимущество вышеизложенного заключается в том, что вам не нужно предоставлять array
из labels
и работать с любыми данными на axes
.
Чтобы указать как размер шрифта, так и вращение в одно и то же время, попробуйте следующее:
plt.xticks(fontsize=14, rotation=90)
В качестве альтернативы вы можете просто сделать:
import matplotlib as mpl
label_size = 8
mpl.rcParams['xtick.labelsize'] = label_size
plt.setp
. (Также посмотритеax.tick_params
). Например, вы можете просто сделатьplt.setp(ax.get_xticklabels(), rotation='vertical', fontsize=14)
. Кроме того, объекты осей имеют методax.is_last_row()
, который может быть полезен в таких случаях, как ваш пример. Вместоif i != len...
вы можете сделатьif not ax.is_last_row()
. (Почему это метод, я понятия не имею ... Matplotlib ненавидит свойства, по-видимому!) – Joe Kington 18 June 2011 в 03:11is_last_row()
, спасибо! Я использовалplt.setp
в прошлом, и не обязательно был уверен, что он представляет собой более канонический способ настройки тиковых меток. Вы убрали это сомнение, спасибо. В более широком смысле: ваши ответы, особенно в тегеmatplotlib
, часто оставляют меня в страхе. Продолжайте в том же духе. – bernie 18 June 2011 в 03:51plt.setp
является «matlab-ism», а явный цикл, вероятно, намного более питонов. Будучи преобразованием в Matlab, я,setp
чувствует себя естественным, но каждому свое. Любой из них вполне читабельен, т.е. – Joe Kington 18 June 2011 в 04:36ax.tick_params(axis='x', labelsize=8)
– Vladtn 16 February 2012 в 22:49get_ticklabels
неget_major_ticks
– jez 15 June 2015 в 10:25