Source code for lux.vislib.matplotlib.Histogram

#  Copyright 2019-2020 The Lux Authors.
#
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.

from lux.vislib.matplotlib.MatplotlibChart import MatplotlibChart
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt


[docs]class Histogram(MatplotlibChart): """ Histogram is a subclass of AltairChart that render as a histograms. All rendering properties for histograms are set here. See Also -------- matplotlib.org """ def __init__(self, vis, fig, ax): super().__init__(vis, fig, ax) def __repr__(self): return f"Histogram <{str(self.vis)}>"
[docs] def initialize_chart(self): self.tooltip = False measure = self.vis.get_attr_by_data_model("measure", exclude_record=True)[0] msr_attr = self.vis.get_attr_by_channel(measure.channel)[0] msr_attr_abv = msr_attr.attribute if len(msr_attr.attribute) > 17: msr_attr_abv = msr_attr.attribute[:10] + "..." + msr_attr.attribute[-7:] x_min = self.vis.min_max[msr_attr.attribute][0] x_max = self.vis.min_max[msr_attr.attribute][1] markbar = abs(x_max - x_min) / 12 df = self.data bars = df[msr_attr.attribute] measurements = df["Number of Records"] self.ax.bar(bars, measurements, width=markbar) self.ax.set_xlim(x_min, x_max) x_label = "" y_label = "" axis_title = f"{msr_attr_abv} (binned)" if msr_attr_abv == " ": axis_title = "Series (binned)" if measure.channel == "x": x_label = axis_title y_label = "Number of Records" elif measure.channel == "y": x_label = "Number of Records" y_label = axis_title self.ax.set_xlabel(x_label) self.ax.set_ylabel(y_label) self.code += "import numpy as np\n" self.code += "from math import nan\n" self.code += f"df = pd.DataFrame({str(self.data.to_dict())})\n" self.code += f"fig, ax = plt.subplots()\n" self.code += f"bars = df['{msr_attr.attribute}']\n" self.code += f"measurements = df['Number of Records']\n" self.code += f"ax.bar(bars, measurements, width={markbar})\n" self.code += f"ax.set_xlabel('{x_label}')\n" self.code += f"ax.set_ylabel('{y_label}')\n"