Как показать фактические данные на листе Дендрограмма [дубликат]

Ну, простыми словами:

Вы пытаетесь получить доступ к объекту, который не создан или в настоящее время не находится в памяти.

Итак, как это решить:

  1. Отладить и отпустить отладчик ... Он сразу приведет вас к переменной, которая сломана ... Теперь ваша задача - просто исправить это. Используя новое ключевое слово в соответствующем месте.
  2. Если это вызвано некоторыми командами базы данных, потому что объект отсутствует, все, что вам нужно сделать, это выполнить нулевую проверку и обработать его:
    if (i == null) {
        // Handle this
    }
    
  3. Самый сложный. если GC уже собрал объект ... Это обычно происходит, если вы пытаетесь найти объект, используя строки ... То есть, найдя его по имени объекта, может случиться, что GC, возможно, уже очистил его ... Это трудно найти и станет проблемой. Лучшим способом решения этой проблемы является выполнение нулевых проверок везде, где это необходимо в процессе разработки. Это сэкономит вам много времени.

Поиск по имени означает, что некоторые фреймворки позволяют использовать FIndObjects с помощью строк, а код может выглядеть так: FindObject («ObjectName»);

10
задан benson 4 January 2012 в 22:29
поделиться

1 ответ

Я бы удалил метки меток и заменил текст на патчи . Вот краткий пример выполнения этой задачи:

import matplotlib.pyplot as plt
import matplotlib.patches as patches


# define where to put symbols vertically
TICKYPOS = -.6

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(10))

# set ticks where your images will be
ax.get_xaxis().set_ticks([2,4,6,8])
# remove tick labels
ax.get_xaxis().set_ticklabels([])


# add a series of patches to serve as tick labels
ax.add_patch(patches.Circle((2,TICKYPOS),radius=.2,
                            fill=True,clip_on=False))
ax.add_patch(patches.Circle((4,TICKYPOS),radius=.2,
                            fill=False,clip_on=False))
ax.add_patch(patches.Rectangle((6-.1,TICKYPOS-.05),.2,.2,
                               fill=True,clip_on=False))
ax.add_patch(patches.Rectangle((8-.1,TICKYPOS-.05),.2,.2,
                               fill=False,clip_on=False))

Это приводит к следующему рисунку:

enter image description here [/g2]

чтобы установить clip_on на False, в противном случае patches вне осей не будут показаны. Координаты и размеры (радиус, ширина, высота и т. Д.) Патчей будут зависеть от того, где ваши оси находятся на рисунке. Например, если вы планируете делать это с помощью подзаголовков, вам нужно быть чувствительным к размещению патчей, чтобы не перекрывать другие оси. Возможно, стоит потратить время на исследование Transformations и определить позиции и размеры в другом блоке (оси, рисунок или дисплей).

Если у вас есть определенные файлы изображений, которые вы хотите использовать для символов, вы можете использовать класс BboxImage для создания художников, которые будут добавлены к осям вместо патчей. Например, я сделал простую иконку со следующим скриптом:

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(1,1),dpi=400)
ax = fig.add_axes([0,0,1,1],frameon=False)
ax.set_axis_off()

ax.plot(range(10),linewidth=32)
ax.plot(range(9,-1,-1),linewidth=32)

fig.savefig('thumb.png')

, создавая это изображение:

enter image description here [/g3]

Затем я создал BboxImage в месте, где я хочу ярлык метки и размера, который я хочу:

lowerCorner = ax.transData.transform((.8,TICKYPOS-.2))
upperCorner = ax.transData.transform((1.2,TICKYPOS+.2))

bbox_image = BboxImage(Bbox([lowerCorner[0],
                             lowerCorner[1],
                             upperCorner[0],
                             upperCorner[1],
                             ]),
                       norm = None,
                       origin=None,
                       clip_on=False,
                       )

Заметил, как я использовал преобразование transData для преобразования из единиц данных в единицы отображения, которые требуются в определение Bbox.

Теперь я прочитал изображение с помощью imread и установил его результаты (массив numpy) на данные bbox_image и добавил художника к осям:

bbox_image.set_data(imread('thumb.png'))
ax.add_artist(bbox_image)

Это приводит к обновленному рисунку: enter image description here [/g4]

Если вы используете непосредственно изображения, обязательно импортируйте необходимые классы и методы:

from matplotlib.image import BboxImage,imread
from matplotlib.transforms import Bbox
23
ответ дан Yann 26 August 2018 в 11:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: