def _create_cell_level_css(self, data): """Create heatmap with ranges from min to (-threshold) and from threshold to max.""" if isinstance(data.cell, numbers.Number): # Get selected cells. If axis is specified, get only data from the same row (axis=0) or column (axis=1) rows = self.rows columns = self.columns if self.axis == 0: rows = [data.row_name] elif self.axis == 1: columns = [data.column_name] # Get min max values from selected cells (min_value, max_value) = self._get_min_max_from_selected_cell_values( rows, columns, data.df) # Create color with alpha according to value / (min or max) if data.cell > self.threshold: cell_color_alpha = data.cell / max_value cell_color = self.max_color + (cell_color_alpha, ) elif data.cell < -self.threshold: cell_color_alpha = data.cell / min_value cell_color = self.min_color + (cell_color_alpha, ) else: return CSS_BACKGROUND_COLOR + colors.css_color(colors.WHITE) return CSS_BACKGROUND_COLOR + colors.css_color(cell_color) else: return None
def test_FmtAppendTotalsColumn_cell_css(): column_name = TEST_STRING fmt = pbtf.FmtAppendTotalsColumn(column_name=column_name) data = FormatterData(None, pbtf.HEADER_ROW_NAME, None, df) res = fmt._create_cell_level_css(data) assert res is None fmt = pbtf.FmtAppendTotalsColumn(bold=True, column_name=column_name, background_color=colors.LIGHT_GREY, font_color=colors.LIGHT_GREY) data = FormatterData(None, None, column_name, df) res = fmt._create_cell_level_css(data) assert pbtf.CSS_BOLD in res assert pbtf.CSS_COLOR + colors.css_color(colors.LIGHT_GREY) in res assert pbtf.CSS_BACKGROUND_COLOR + colors.css_color( colors.LIGHT_GREY) in res fmt = pbtf.FmtAppendTotalsRow(row_name=column_name, bold=None, background_color=None, font_color=None) data = FormatterData(None, 'a', None, df) res = fmt._create_cell_level_css(data) assert res is None
def _create_cell_level_css(self, data): if data.row_name == HEADER_ROW_NAME: return None css_substrings = [] if data.column_name == INDEX_COL_NAME: self.index_counter += 1 # If we exceed index_level, assume we are re-run and reset to zero if self.index_counter == len(self.index_level): self.index_counter = 0 indent = self.indent_px * self.index_level[self.index_counter] css_substrings.append('padding-left:' + str(indent) + 'px') if self.index_level[self.index_counter] != max(self.index_level): if self.bold: css_substrings.append(CSS_BOLD) if self.hline_color is not None: css_substrings.append('border-bottom:1px solid ' + self.hline_color) css_substrings.append('border-top:1px solid ' + self.hline_color) if self.level_background_colors is not None: level_background_color = self.level_background_colors[self.index_level[self.index_counter]] if level_background_color is not None: css_substrings.append(CSS_BACKGROUND_COLOR + colors.css_color(level_background_color)) if self.level_text_colors is not None: level_text_color = self.level_text_colors[self.index_level[self.index_counter]] if level_text_color is not None: css_substrings.append(CSS_COLOR + colors.css_color(level_text_color)) if len(css_substrings) != 0: return "; ".join(css_substrings) else: return None
def test_FmtAppendTotalsRow_cell_css(): row_name = TEST_STRING fmt = pbtf.FmtAppendTotalsRow(row_name=row_name) data = FormatterData(None, pbtf.HEADER_ROW_NAME, None, df) res = fmt._create_cell_level_css(data) assert res is None fmt = pbtf.FmtAppendTotalsRow(bold=True, row_name=row_name, background_color=colors.LIGHT_GREY, font_color=colors.LIGHT_GREY) data = FormatterData(None, row_name, None, df) res = fmt._create_cell_level_css(data) assert pbtf.CSS_BOLD in res assert pbtf.CSS_COLOR + colors.css_color(colors.LIGHT_GREY) in res assert pbtf.CSS_BACKGROUND_COLOR + colors.css_color(colors.LIGHT_GREY) in res assert 'border-top:' in res assert 'solid' in res fmt = pbtf.FmtAppendTotalsRow(row_name=row_name, bold=None, background_color=None, font_color=None, hline_color=colors.LIGHT_ORANGE, hline_style=TEST_STRING) data = FormatterData(None, row_name, None, df) res = fmt._create_cell_level_css(data) assert 'border-top: ' + TEST_STRING + ' ' + colors.css_color(colors.LIGHT_ORANGE) fmt = pbtf.FmtAppendTotalsRow(row_name=row_name, bold=None, background_color=None, font_color=None) data = FormatterData(None, 'a', None, df) res = fmt._create_cell_level_css(data) assert res is None
def __init__(self, first_color=colors.LIGHT_GREY, second_color=colors.WHITE, header_color=colors.WHITE, rows=None, columns=None, apply_to_header_and_index=True): super(FmtStripeBackground, self).__init__(rows, columns) self.first_color = colors.css_color(first_color) self.second_color = colors.css_color(second_color) self.header_color = colors.css_color(header_color) self.current_color = self.first_color return
def test_FmtHeatmap_cell_css(): df_pn = df - 5. fmt = pbtf.FmtHeatmap(threshold=0.5) data = FormatterData(df_pn.min().min(), None, None, df_pn) res = fmt._create_cell_level_css(data) assert res == pbtf.CSS_BACKGROUND_COLOR + colors.css_color(colors.HEATMAP_RED) data = FormatterData(df_pn.max().max(), None, None, df_pn) res = fmt._create_cell_level_css(data) assert res == pbtf.CSS_BACKGROUND_COLOR + colors.css_color(colors.HEATMAP_GREEN) data = FormatterData(0.1, None, None, df_pn) res = fmt._create_cell_level_css(data) assert res == pbtf.CSS_BACKGROUND_COLOR + colors.css_color(colors.WHITE)
def test_FmtExpandMultiIndex_cell_css(): mi_df = make_multiindex_table() fmt = pbtf.FmtExpandMultiIndex(bold=True, hline_color=colors.LIGHT_GREY, indent_px=123) df = fmt._modify_dataframe(mi_df) # Because this formatter is quite stateful, index column must be called first data = FormatterData(0., 'a', pbtf.INDEX_COL_NAME, df) res = fmt._create_cell_level_css(data) # Test that level0 row gets index indented assert 'padding-left:0px' in res # Test that level0 row gets all highlighting data = FormatterData(0., 'a', 'column1', df) res = fmt._create_cell_level_css(data) assert pbtf.CSS_BOLD in res assert 'border-bottom' in res assert 'border-top' in res assert colors.css_color(colors.LIGHT_GREY) in res # Run for index column again, so we proceed to next row data = FormatterData(0., 'a', pbtf.INDEX_COL_NAME, df) res = fmt._create_cell_level_css(data) # Test that level1 row gets index indented more and no highlighting data = FormatterData(0., 'aa', pbtf.INDEX_COL_NAME, df) res = fmt._create_cell_level_css(data) assert 'padding-left:123px' in res assert pbtf.CSS_BOLD not in res # Check that bold-highlighting is not used if not desired fmt = pbtf.FmtExpandMultiIndex(bold=False) df = fmt._modify_dataframe(mi_df) data = FormatterData(0., 'a', pbtf.INDEX_COL_NAME, df) res = fmt._create_cell_level_css(data) assert pbtf.CSS_BOLD not in res
def test_FmtStripeBackground(): fmt = pbtf.FmtStripeBackground(first_color=colors.BLACK, second_color=colors.RED, header_color=colors.GREEN) # Check header color is applied data = FormatterData(0., pbtf.HEADER_ROW_NAME, pbtf.INDEX_COL_NAME, df) res = fmt._create_cell_level_css(data) assert res == (pbtf.CSS_BACKGROUND_COLOR + colors.css_color(colors.GREEN)) # Check that first line is filled with first_color data = FormatterData(0., 'a', 'aa', df) res = fmt._create_cell_level_css(data) assert res == (pbtf.CSS_BACKGROUND_COLOR + colors.css_color(colors.BLACK)) # Check that second line is filled with second color data = FormatterData(0., 'b', pbtf.INDEX_COL_NAME, df) res = fmt._create_cell_level_css(data) assert res == (pbtf.CSS_BACKGROUND_COLOR + colors.css_color(colors.RED))
def _create_cell_level_css(self, data): css_substrings = [] for side, value in iteritems(self.padding): if value is not None: css_substrings.append('border-' + side + ':' + str(value) + self.length_unit + ' ' + self.style + ' ' + colors.css_color(self.color)) return "; ".join(css_substrings)
def _create_cell_level_css(self, data): """Font style and color""" css_substrings = [CSS_COLOR + colors.css_color(self.font_color)] if self.bold: css_substrings.append(CSS_BOLD) if self.italic: css_substrings.append('font-style:italic;') return "; ".join(css_substrings)
def _create_cell_level_css(self, data): """Set fontsize for cell as CSS format.""" if data.column_name != self.column_name: return None css_substrings = [] if self.bold is not None: css_substrings.append(CSS_BOLD) if self.background_color is not None: css_substrings.append(CSS_BACKGROUND_COLOR + colors.css_color(self.background_color)) if self.font_color is not None: css_substrings.append(CSS_COLOR + colors.css_color(self.font_color)) if len(css_substrings) != 0: return "; ".join(css_substrings) else: return None
def __init__(self, total_columns=None, operator=OP_SUM, bold=True, indent_px=20, hline_color=colors.DARK_BLUE, level_background_colors=None): # Operate on all columns: Set self.columns to None super(FmtExpandMultiIndex, self).__init__(None, None) if total_columns is None: total_columns = [] self.total_columns = total_columns self.operator = operator self.bold = bold self.indent_px = indent_px self.index_level = [] self.hline_color = colors.css_color(hline_color) self.index_counter = -1 self.level_background_colors = level_background_colors return
def _create_cell_level_css(self, data): """Set a lot of css tags to rotate the text in the table header.""" if data.row_name == HEADER_ROW_NAME and (self.columns is None or data.column_name in self.columns): css_substrings = [] if self.rotate_deg != 0: css_substrings.append('-webkit-transform-origin:0% 100%') css_substrings.append('-webkit-transform:translate(80%, 0%) rotate(-' + str(self.rotate_deg) + 'deg)') css_substrings.append('transform-origin:0% 100%') css_substrings.append('transform:translate(80%, 0%) rotate(-' + str(self.rotate_deg) + 'deg)') if self.no_wrap: css_substrings.append('white-space:nowrap') if data.column_name == INDEX_COL_NAME and self.index_width is not None: css_substrings.append(CSS_WIDTH + self.index_width) elif self.column_width is not None: css_substrings.append('width:' + self.column_width) if self.color is not None: css_substrings.append(CSS_BACKGROUND_COLOR + colors.css_color(self.color)) return "; ".join(css_substrings) else: return None
def test_FmtHighlightBackground(): c = colors.BLACK fmt = pbtf.FmtHighlightBackground(color=c) res = fmt._create_cell_level_css(None) assert pbtf.CSS_BACKGROUND_COLOR + colors.css_color(c) in res
def test_FmtHighlightText_font_color(): c = colors.BLACK fmt = pbtf.FmtHighlightText(font_color=c) res = fmt._create_cell_level_css(None) assert (pbtf.CSS_COLOR + colors.css_color(c)) in res
def _create_cell_level_css(self, data): """Set background color""" return CSS_BACKGROUND_COLOR + colors.css_color(self.color)