def adult_cohort_bins(complete_df, my_worms = None, bin_width_days = 2):
	'''
	Compute bins of cohorts of worms.
	'''
	if my_worms == None:
		my_worms = complete_df.worms
	adultspans = get_adultspans(complete_df)/24
	max_adultspans = int(np.ceil(np.max(adultspans)))
	my_bins = [(i*bin_width_days, i*bin_width_days + bin_width_days) for i in range(0, max_adultspans//bin_width_days + 1)]
	life_cohorts = [[] for a_bin in my_bins]
	for i in range(0, adultspans.shape[0]):
		if complete_df.worms[i] in my_worms:
			my_lifespan = adultspans[i]
			my_bin = int(my_lifespan//bin_width_days)
			life_cohorts[my_bin].append(i)
	
	# Remove empty bins and cohorts.
	my_bins = [my_bins[i] for i in range(0, len(life_cohorts)) if len(life_cohorts[i]) > 0]	
	life_cohorts = [a_cohort for a_cohort in life_cohorts if len(a_cohort) > 0]

	# Figure out the average lifespan of each bin.
	bin_lifes = np.zeros(len(my_bins))
	for i in range(0, len(bin_lifes)):
		bin_lifes[i] = np.mean(adultspans[life_cohorts[i]])

	# Color code the bins.
	my_colors = zplib_image_colorize.color_map(bin_lifes/np.max(bin_lifes[~np.isnan(bin_lifes)]))
	my_colors = my_colors/255		
	return (life_cohorts, bin_lifes, my_bins, my_colors)
def adult_cohort_bins(complete_df, my_worms=None, bin_width_days=2):
    '''
	Compute bins of cohorts of worms.
	'''
    if my_worms == None:
        my_worms = complete_df.worms
    adultspans = get_adultspans(complete_df) / 24
    max_adultspans = int(np.ceil(np.max(adultspans)))
    my_bins = [(i * bin_width_days, i * bin_width_days + bin_width_days)
               for i in range(0, max_adultspans // bin_width_days + 1)]
    life_cohorts = [[] for a_bin in my_bins]
    for i in range(0, adultspans.shape[0]):
        if complete_df.worms[i] in my_worms:
            my_lifespan = adultspans[i]
            my_bin = int(my_lifespan // bin_width_days)
            life_cohorts[my_bin].append(i)

    # Remove empty bins and cohorts.
    my_bins = [
        my_bins[i] for i in range(0, len(life_cohorts))
        if len(life_cohorts[i]) > 0
    ]
    life_cohorts = [a_cohort for a_cohort in life_cohorts if len(a_cohort) > 0]

    # Figure out the average lifespan of each bin.
    bin_lifes = np.zeros(len(my_bins))
    for i in range(0, len(bin_lifes)):
        bin_lifes[i] = np.mean(adultspans[life_cohorts[i]])

    # Color code the bins.
    my_colors = zplib_image_colorize.color_map(
        bin_lifes / np.max(bin_lifes[~np.isnan(bin_lifes)]))
    my_colors = my_colors / 255
    return (life_cohorts, bin_lifes, my_bins, my_colors)
Exemple #3
0
def plot(positions, values, radius, rw):
    colors = colorize.color_map(colorize.scale(values, output_max=1))
    circles = [
        Circle(x, y, radius, color, metadata=(x, y, value))
        for (x, y), color, value in zip(positions, colors, values)
    ]
    for c in circles:
        rw.image_scene.addItem(c)
    return circles
 def _feature_plot_data(worms, x_feature, y_feature, color_by='lifespan'):
     x_feature_vals = worms.get_feature(x_feature)
     y_feature_vals = worms.get_feature(y_feature)
     color_vals = colorize.scale(worms.get_feature(color_by), output_max=1)
     colors = colorize.color_map(color_vals, uint8=False)
     out = []
     for x, y, color in zip(x_feature_vals, y_feature_vals, colors):
         out.append((x, y, color))
     return out
Exemple #5
0
 def __init__(self, ris_widget, keypoint_names, colors=None, name='keypoints', worm_frame=True, auto_advance=False):
     num_points = len(keypoint_names)
     if colors is None:
         colors = colorize.color_map(numpy.linspace(0, 1, num_points), spectrum_max=0.8)
     self.colors = colors
     self.keypoint_names = keypoint_names
     if worm_frame:
         self.ris_widget = split_view.split_ris_widget(ris_widget)
         self.center_y_origin = True
         # bounding rect change means that the image shape has changed in some way
         self.ris_widget.image_scene.layer_stack_item.bounding_rect_changed.connect(self._new_image_shape)
     else:
         self.ris_widget = ris_widget
         self.center_y_origin = False
     qcolors = [Qt.QColor(*c) for c in colors]
     pen = Qt.QPen(Qt.QColor(255, 255, 255, 84))
     pen.setWidth(3)
     pen.setCosmetic(True)
     self.point_set = identified_point_set.IdentifiedPointSet(self.ris_widget, num_points, qcolors, pen)
     self.point_set.geometry_change_callbacks.append(self.on_geometry_change)
     self._auto_advance = auto_advance
     super().__init__(name, default={name: None for name in keypoint_names})
def _timecourse_plot_data(worms,
                          feature,
                          min_age=-numpy.inf,
                          max_age=numpy.inf,
                          age_feature='age',
                          color_by='lifespan',
                          color_map=None):

    if color_map is None:
        color_map = lambda array: colorize.color_map(array, uint8=False)

    time_ranges = worms.get_time_range(feature, min_age, max_age, age_feature)
    if color_by is None:
        color_vals = [0] * len(time_ranges)
    else:
        color_vals = colorize.scale(worms.get_feature(color_by), output_max=1)
    colors = color_map(color_vals)
    out = []
    for time_range, color in zip(time_ranges, colors):
        x, y = time_range.T
        out.append((x, y, color))
    return out
def spatial_distribution(worms,
                         feature,
                         ax_h=None,
                         fig_h=None,
                         source='gradient'):
    import matplotlib.pyplot as plt

    INTERSLOT_SPACING = 30  # spacing between slots on stage insert (mm)

    ax_provided = ax_h is not None
    if not ax_provided:
        fig_h, ax_h = plt.subplots()
        ax_h.set_title(f'{worms[0].name.split()[0]}')
    else:
        assert fig_h is not None

    feature_vals = worms.get_feature(feature)
    nan_mask = numpy.isnan(feature_vals)
    if all(nan_mask):
        print(f'feature not found for any individuals')
        return
    elif any(nan_mask):
        print(f'Warning: nan\'s found for {numpy.array(worms)[nan_mask]}')

    good_worms = numpy.array(worms)[~nan_mask]
    feature_vals = feature_vals[~nan_mask]

    # color_vals = colorize.scale(feature_vals,output_max=1,gamma=0.5)
    # color_vals = colorize.scale(feature_vals,output_max=1,gamma=0.5)
    # color_vals = plotting_tools.build_gradient_palette(
    #     base_color = numpy.array(plotting_tools.qual_colors[numpy.random.randint(len(plotting_tools.qual_colors))]),
    #     num_colors=len(feature_vals)
    # )
    if source == 'gradient':
        color_vals = plotting_tools.build_gradient_palette(
            base_color=numpy.array(
                plotting_tools.qual_colors[numpy.random.randint(
                    len(plotting_tools.qual_colors))]),
            num_colors=256)
    elif source == 'zplib':
        color_vals = colorize.color_map(numpy.linspace(0, 1, 257))

    median_x = numpy.median([worm.stage_x for worm in good_worms])
    ref_x = (median_x // INTERSLOT_SPACING
             ) * INTERSLOT_SPACING  # Adjusts to the nearest slide position

    cmap = mpl_colors.ListedColormap(
        [numpy.append(val, 1) for val in color_vals])
    norm = mpl.colors.Normalize(vmin=feature_vals.min(),
                                vmax=feature_vals.max())
    sm = mpl.cm.ScalarMappable(norm=norm, cmap=cmap)
    sm.set_array([])

    rect = ax_h.add_artist(
        plt.Rectangle((-5, -15),
                      35,
                      90,
                      linewidth=1,
                      edgecolor='k',
                      facecolor='none'))
    # for worm, color in zip(good_worms,color_vals):
    #     ax_h.add_artist(
    #         plt.Circle((worm.stage_x-ref_x+(median_x-ref_x), worm.stage_y), 1, edgecolor = [0,0,0], facecolor=color))

    for worm, feature_val in zip(good_worms, feature_vals):
        ax_h.add_artist(
            plt.Circle(
                (worm.stage_x - ref_x + (median_x - ref_x), worm.stage_y),
                1,
                edgecolor=[0, 0, 0],
                facecolor=sm.to_rgba(feature_val)))

    for worm in worms.filter(lambda worm: worm not in good_worms):
        ax_h.add_artist(
            plt.Circle(
                (worm.stage_x - ref_x + (median_x - ref_x), worm.stage_y),
                1,
                edgecolor=[0, 0, 0],
                facecolor=[0, 0, 0]))

    ax_h.set_xlim([-5, 30])
    ax_h.set_ylim([-15, 75])
    ax_h.set_xlim([-10, 35])
    ax_h.set_ylim([-20, 80])
    ax_h.spines['bottom'].set_visible(False)
    ax_h.spines['left'].set_visible(False)

    ax_h.set_aspect('equal')

    # Show the colorbar for these values
    fig_h.colorbar(sm, ax=ax_h)

    if not ax_provided:
        return fig_h, ax_h