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)
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
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