def _plot_shortest_paths(g: ig.Graph, path_prefix: Path) -> None: file_path = path_prefix.joinpath("shortest_paths.png") # Estimate diameter and paths paths = g.get_all_shortest_paths(0, mode=ig.ALL) path_lens = list(map(len, paths)) diam = max(path_lens) eff_diam = np.percentile(path_lens, 90) cnts = Counter(path_lens) # Plot plt.style.use("ggplot") f: plt.Figure = plt.Figure(figsize=(8, 5), dpi=150) ax: plt.Axes = f.add_subplot() ax.plot( cnts.keys(), cnts.values(), ".", label="Path.Len.Distr.\nDiam.: {:d}\nEff.Diam.: {:.2f}".format( diam, eff_diam), ) ax.legend() ax.set_xlabel("Path. length") ax.set_ylabel("Count paths") f.savefig(str(file_path.absolute())) plt.close(f)
def _plot_degrees_correlations(g: ig.Graph, path_prefix: Path) -> None: file_path = path_prefix.joinpath("degree_correlations.png") # Compute correlations num_nodes = int(g.vcount() * 0.35) visited = set() corrs = np.zeros((num_nodes, 2), dtype=np.float32) # Compute coefficient assortativity = g.assortativity_degree(directed=False) for i in range(num_nodes): while True: rnd_id = choice(g.vs) if rnd_id.index not in visited: visited.add(rnd_id.index) break deg = rnd_id.degree() for nbh in rnd_id.neighbors(): corrs[i, 1] += nbh.degree() / deg corrs[i, 0] = deg # Drop heavy tail corrs = corrs[np.argsort(corrs[:, 0])[:-50], :] # Fit line solution = np.polyfit(corrs[:, 0], corrs[:, 1], deg=1) # Plot scatter plt.style.use("ggplot") f: plt.Figure = plt.Figure(figsize=(8, 5), dpi=150) ax: plt.Axes = f.add_subplot() ax.plot(corrs[:, 0], corrs[:, 1], ".", label="Real data") ax.plot( corrs[np.argsort(corrs[:, 0]), 0], corrs[np.argsort(corrs[:, 0]), 0] * solution[0] + solution[1], "-", label="Fitted line: {:2f}x + {:2f}\nAssortativity coeff.: {:.3f}". format(solution[0], solution[1], assortativity), ) ax.legend() ax.set_xlabel("Node degree") ax.set_ylabel("Neighborhood avg degree") f.savefig(str(file_path.absolute())) plt.close(f)
def calc_spec_peak(freqs, powers, fitting_bw=[1, 55], out_image_path=None): '''Spectral fitting routine from the FOOOF toolbox https://fooof-tools.github.io/fooof/index.html doi: https://doi.org/10.1101/299859 Fit the spectral peaks and return the fit parameters Save the image of the spectral data and peak fits Inputs: freqs - numpy array of frequencies powers - numpy array of spectral power fitting_bw - Reduce the total bandwidth to fit the 1/f and spectral peaks Outputs: params - parameters from the FOOOF fit ''' #Crop Frequencies for 1/f powers = powers[(freqs > fitting_bw[0]) & (freqs <= fitting_bw[1])] freqs = freqs[(freqs > fitting_bw[0]) & (freqs <= fitting_bw[1])] # Initialize power spectrum model objects and fit the power spectra fm1 = FOOOF(min_peak_height=0.05, verbose=False) fm1.fit(freqs, powers) if out_image_path is not None: import matplotlib from matplotlib import pylab matplotlib.use('Agg') # import pylab fig = pylab.Figure(figsize=[10, 6]) #, dpi=150) ax = fig.add_subplot() plot_annotated_model(fm1, annotate_peaks=False, ax=ax) fig.tight_layout() fig.savefig(out_image_path, dpi=150, bbox_inches="tight") params = fm1.get_results() params.peak_params[0] # plot_spectrum(freqs, powers, log_powers=True, # color='black', label='Original Spectrum') return params
def plot_scatter_matrix(title, tr, fig=None): if (fig is None): fig = plt.Figure() t6 = pandas.Series(tr['c']) t8 = pandas.Series(tr['gmm'][:, 0]) t9 = pandas.Series(tr['gmm'][:, 1]) t10 = pandas.Series(tr['gmm_p'][:, 0]) t11 = pandas.Series(tr['pbeta']) df = pandas.DataFrame({ 'cat': t6, 'gmm_0': t8, 'gmm_1': t9, 'p': t10, 'pbeta': t11 }) pandas.scatter_matrix(df) plt.title(title) return fig
def plot_p_prior_vs_posterior(prior_trace, posterior_trace, fig=None): if (fig is None): fig = plt.Figure() pr = pandas.Series(prior_trace['gmm_p'][:, 0]) po = pandas.Series(posterior_trace['gmm_p'][:, 0]) plt.hist(pr, bins=40, range=(-0.1, 1.1), color='b', alpha=0.5, label='Prior') plt.hist(po, bins=40, range=(-0.1, 1.1), color='g', alpha=0.5, label='Posterior') plt.legend() plt.show()
def _create_dendrogram(self) -> None: dend_out = Output(layout={ "width": "99%", "height": "310px", "overflow_y": "auto" }) with dend_out: print("This is the hierarchy of the routes") fig = plt.Figure() dendrogram( ClusteringHelper( self._routes.distance_matrix()).linkage_matrix(), color_threshold=0.0, labels=np.arange(1, len(self._routes) + 1), ax=fig.gca(), ) fig.gca().set_xlabel("Route") fig.gca().set_ylabel("Distance") display(fig) display(dend_out)
def _plot_degree_distribution(g: ig.Graph, path_prefix: Path) -> None: file_path = path_prefix.joinpath("degrees.png") # Count degrees degrees = g.vs.degree() degree_distr = Counter(degrees) log_deg = np.zeros(len(degree_distr), dtype=np.float32) log_cnt = np.zeros(len(degree_distr), dtype=np.float32) for i, kv in enumerate(degree_distr.items()): log_deg[i] = np.log(kv[0]) if kv[0] > 0 else 0 log_cnt[i] = np.log(kv[1]) # Fit linear regression solution = np.polyfit(log_deg[log_cnt > 1.5], log_cnt[log_cnt > 1.5], deg=1) # Plot distributions plt.style.use("ggplot") f: plt.Figure = plt.Figure(figsize=(8, 5), dpi=150) ax: plt.Axes = f.add_subplot() ax.plot(log_deg, log_cnt, ".", label="Real Degrees") ax.plot( log_deg, log_deg * solution[0] + solution[1], "-", label="Linear fit: {:.4f}x + {:.2f}".format(solution[0], solution[1]), ) ax.legend() ax.set_xlabel("Log degree") ax.set_ylabel("Log count degrees") ax.set_ylim(bottom=np.min(log_cnt) - 1e-5) f.savefig(str(file_path.absolute())) plt.close(f)
def _plot_clustering_coeff(g: ig.Graph, path_prefix: Path) -> None: file_path = path_prefix.joinpath("clustcoeff.png") g = g.copy().simplify() # Get clustering coefficient based on 50% of vertices subset = [vidx for vidx in g.vs.indices if random() <= 0.5] lcc = g.transitivity_local_undirected(vertices=subset, mode="zero") degrees = g.degree(vertices=subset) avg_clustering_coeff = np.mean(lcc) # Plot plt.style.use("ggplot") f: plt.Figure = plt.Figure(figsize=(8, 5), dpi=150) ax: plt.Axes = f.add_subplot() ax.plot(degrees, lcc, ".", label="ClustCoeff. Avg = {:.2e}".format(avg_clustering_coeff)) ax.legend() ax.set_xlabel("Degree") ax.set_ylabel("Avg Clustering of Degree") f.savefig(str(file_path.absolute())) plt.close(f)
def _default_figure(self): return pl.Figure()
i = 0 while True: currentX = x[i] gr = gradient(currentX[0], currentX[1]) sd = searchDirection(gr) alpha = stepSize(currentX) newX = makeStep(currentX, alpha, sd) if checkTolerance(newX[0], newX[1]): break else: x.append(newX) i += 1 points = np.array(x) fig = plt.Figure() fig, ax = plt.subplots() ax.set_aspect(1) x1, x2, y1, y2 = plt.axis() plt.axis((-8, 8, -2, 2)) ax.plot(points[:, 0], points[:, 1], "bo-", label=r"gradient descent") xc = np.linspace(-10, 10, 100) yc = np.linspace(-5, 5, 100) XC, YC = np.meshgrid(xc, yc) levels = np.arange(-40, 40, 4) plt.contour(XC, YC, F(XC, YC), levels) ax.legend(loc=1) plt.show()
def create_main_window(self): """ This function creates the main window of the program. """ self.main_frame = QWidget() self.main_frame.setMinimumSize(QSize(700, 700)) self.dpi = 100 self.fig = plt.Figure((6, 6), dpi=self.dpi, facecolor='w', edgecolor='w') self.canvas = FigureCanvas(self.fig) self.canvas.setParent(self.main_frame) self.preview_frame = QWidget() self.preview_fig = plt.Figure((3, 1.6), dpi=self.dpi, facecolor='w', edgecolor='w') self.preview = FigureCanvas(self.preview_fig) self.preview.setParent(self.preview_frame) self.preview_axes = self.preview_fig.add_subplot(111) self.preview_fig.canvas.mpl_connect('button_press_event', self.onclick) self.preview_fig.subplots_adjust(top=1, bottom=0, left=0, right=1) # Since we have only one plot, we can use add_axes # instead of add_subplot, but then the subplot # configuration tool in the navigation toolbar wouldn't # work. # self.axes = self.fig.add_subplot(111) # Turning off the axes ticks to maximize space. Also the labels were meaningless # anyway because they were not representing the actual lat/lons. self.axes.get_xaxis().set_visible(False) self.axes.get_yaxis().set_visible(False) # Other GUI controls # Information section font = QFont("SansSerif", 14) # STATISTICS >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> self.statdisplay = QLabel("Statistics:") self.statgrid = QGridLayout() self.statgrid.setSpacing(5) w = QLabel("Local") w.setFont(font) self.statgrid.addWidget(w, 1, 1, Qt.AlignCenter) w = QLabel("Global") w.setFont(font) self.statgrid.addWidget(w, 1, 2, Qt.AlignCenter) for i, name in enumerate(["Minimum", "Maximum", "Mean"]): w = QLabel(name) w.setFont(font) self.statgrid.addWidget(w, i + 2, 0, Qt.AlignLeft) self.statsarray = [] for i in range(6): self.statsarray.append(QLabel('')) self.statsarray[3].setText("{0:5.2f}".format(self.dc.data.min())) self.statsarray[4].setText("{0:5.2f}".format(self.dc.data.max())) self.statsarray[5].setText("{0:5.2f}".format(self.dc.data.mean())) for i in range(3): self.statgrid.addWidget(self.statsarray[i], i + 2, 1, Qt.AlignCenter) self.statgrid.addWidget(self.statsarray[i + 3], i + 2, 2, Qt.AlignCenter) self.statsarray[i].setFont(font) self.statsarray[i + 3].setFont(font) # <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< # PIXEL INFO >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> self.infodisplay = QLabel("Pixel Information:") self.infogrid = QGridLayout() self.infogrid.setSpacing(5) for i, name in enumerate(["Latitude", "Longitude", "Value"]): w = QLabel(name) w.setFont(font) self.infogrid.addWidget(w, i + 1, 0, Qt.AlignLeft) self.latdisplay = QLabel("") self.londisplay = QLabel("") self.valdisplay = QLabel("") for i, w in enumerate( [self.latdisplay, self.londisplay, self.valdisplay]): self.infogrid.addWidget(w, i + 1, 1, Qt.AlignLeft) # <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< # Colorscheme selector cmap_label = QLabel('Colorscheme:') self.colormaps = QComboBox(self) self.colormaps.addItems(self.maps) self.colormaps.setCurrentIndex(self.maps.index('Spectral')) self.colormaps.currentIndexChanged.connect(self.render_view) # New value editor hbox = QHBoxLayout() w = QLabel("Enter new value: ") w.setFont(font) hbox.addWidget(w) self.inputbox = QLineEdit() self.inputbox.returnPressed.connect(self.update_value) hbox.addWidget(self.inputbox) for item in [ self.statdisplay, self.infodisplay, self.latdisplay, self.londisplay, self.valdisplay, cmap_label ]: item.setFont(font) vbox = QVBoxLayout() vbox.addWidget(self.canvas) vbox2 = QVBoxLayout() vbox2.addWidget(self.preview) vbox2.addWidget(self.statdisplay) vbox2.setAlignment(self.statdisplay, Qt.AlignTop) vbox2.addLayout(self.statgrid) vbox2.addWidget(self.infodisplay) vbox2.setAlignment(self.infodisplay, Qt.AlignTop) vbox2.addLayout(self.infogrid) # vbox2.addWidget(self.inputbox, Qt.AlignTop) vbox2.addLayout(hbox, Qt.AlignTop) vbox2.addStretch(1) vbox2.addWidget(cmap_label) vbox2.addWidget(self.colormaps) vbox2.addStretch(1) hbox = QHBoxLayout() hbox.addLayout(vbox) hbox.addLayout(vbox2) self.main_frame.setLayout(hbox) self.setCentralWidget(self.main_frame) self.main_frame.setFocus()
import matplotlib # matplotlib.rcParams['backend.qt4'] = 'PySide' # matplotlib.use('Qt4Agg') import numpy as np # import matplotlib.pyplot as plt import matplotlib.pylab as pl # import pylab as pl # from PyQt import QtGui # from matplotlib.backends.backend_qt4agg \ # import FigureCanvasQTAgg as FigureCanvas # from PySide.QtGui import QApplication # from PySide.QtGui import QMainWindow # from PySide.QtCore import Qt pl.Figure() ax = pl.subplot(111) pl.show()
def create_main_window(self): """ This function creates the main window of the program. """ self.main_frame = QWidget() self.main_frame.setMinimumSize(QSize(700, 700)) self.dpi = 100 self.fig = plt.Figure((6, 6), dpi=self.dpi, facecolor='w', edgecolor='w') self.canvas = FigureCanvas(self.fig) self.canvas.setParent(self.main_frame) # Stuff for the preview map >>>>>>>>>>>>>>>>>>>>>>>>> self.preview_frame = QWidget() self.preview_fig = plt.Figure((3, 1.6), dpi=self.dpi, facecolor='w', edgecolor='w') self.preview = FigureCanvas(self.preview_fig) self.preview.setParent(self.preview_frame) self.preview_axes = self.preview_fig.add_subplot(111) self.preview_fig.canvas.mpl_connect('button_press_event', self.onclick) self.preview_fig.subplots_adjust(top=1, bottom=0, left=0, right=1) # Stuff for the preview map <<<<<<<<<<<<<<<<<<<<<<<<< # Stuff for the colorbar >>>>>>>>>>>>>>>>>>>>>>>>> self.colorbar_frame = QWidget() self.colorbar_fig = plt.Figure((3, 0.4), dpi=self.dpi, facecolor='w', edgecolor='w') self.colorbar = FigureCanvas(self.colorbar_fig) self.colorbar.setParent(self.colorbar_frame) self.colorbar_axes = self.colorbar_fig.add_subplot(111) self.colorbar_fig.subplots_adjust( top=1.0, bottom=0.35, left=0.02, right=0.97) #Tightening the area around the subplot self.colorbar_fig.patch.set_facecolor( 'none') # Making the figure background transparent self.colorbar_axes.get_xaxis().set_visible(False) self.colorbar_axes.get_yaxis().set_visible(False) # Stuff for the colorbar <<<<<<<<<<<<<<<<<<<<<<<<< # Since we have only one plot, we can use add_axes # instead of add_subplot, but then the subplot # configuration tool in the navigation toolbar wouldn't # work. # self.axes = self.fig.add_subplot(111) # Turning off the axes ticks to maximize space. Also the labels were meaningless # anyway because they were not representing the actual lat/lons. self.axes.get_xaxis().set_visible(False) self.axes.get_yaxis().set_visible(False) # Other GUI controls # Information section font = QFont("SansSerif", 14) # STATISTICS >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> self.statdisplay = QLabel("Statistics:") self.statgrid = QGridLayout() self.statgrid.setSpacing(5) w = QLabel("View") w.setFont(font) self.statgrid.addWidget(w, 1, 1, Qt.AlignCenter) w = QLabel("Global") w.setFont(font) self.statgrid.addWidget(w, 1, 2, Qt.AlignCenter) for i, name in enumerate(["Minimum", "Maximum", "Mean"]): w = QLabel(name) w.setFont(font) self.statgrid.addWidget(w, i + 2, 0, Qt.AlignLeft) self.statsarray = [] for i in range(6): self.statsarray.append(QLabel('')) self.statsarray[3].setText("{0:3d}".format(int(self.dc.data.min()))) self.statsarray[4].setText("{0:3d}".format(int(self.dc.data.max()))) self.statsarray[5].setText("{0:3d}".format(int(self.dc.data.mean()))) for i in range(3): self.statgrid.addWidget(self.statsarray[i], i + 2, 1, Qt.AlignCenter) self.statgrid.addWidget(self.statsarray[i + 3], i + 2, 2, Qt.AlignCenter) self.statsarray[i].setFont(font) self.statsarray[i + 3].setFont(font) # <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< # PIXEL INFO >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> self.infodisplay = QLabel("Pixel Information:") self.infogrid = QGridLayout() self.infogrid.setSpacing(5) for i, name in enumerate(["Lat", "Lon", "KMT", "I, J"]): w = QLabel(name) w.setFont(font) # w.setLineWidth(1) # w.setFrameShape(QFrame.Box) self.infogrid.addWidget(w, i + 2, 0, Qt.AlignLeft) self.latdisplay = QLabel("") self.londisplay = QLabel("") self.valdisplay = QLabel("") self.idxdisplay = QLabel("") for i, w in enumerate([ self.latdisplay, self.londisplay, self.valdisplay, self.idxdisplay ]): self.infogrid.addWidget(w, i + 2, 1, Qt.AlignLeft) w.setFont(font) # <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< # Colorscheme selector cmap_label = QLabel('Colorscheme:') self.colormaps = QComboBox(self) self.colormaps.addItems(self.maps) self.colormaps.setCurrentIndex(self.maps.index('Set1')) self.colormaps.currentIndexChanged.connect(self.render_view) # New value editor valhbox = QHBoxLayout() w = QLabel("Enter new value: ") w.setFont(font) valhbox.addWidget(w) self.inputbox = QLineEdit() self.inputbox.returnPressed.connect(self.update_value) valhbox.addWidget(self.inputbox) for item in [ self.statdisplay, self.infodisplay, self.latdisplay, self.londisplay, self.valdisplay, self.idxdisplay, cmap_label ]: item.setFont(font) vbox = QVBoxLayout() vbox.addWidget(self.canvas) vbox2 = QVBoxLayout() vbox2.addWidget(self.preview) # Adding preview window # Horizontal line fr = QFrame() fr.setLineWidth(0.5) fr.setFrameShape(QFrame.HLine) vbox2.addWidget(fr) vbox2.setAlignment(fr, Qt.AlignTop) # databox is a horizontal box for the displayed "information" databox = QHBoxLayout() statvbox = QVBoxLayout() # This is the sub-box for the statistics statvbox.addWidget(self.statdisplay) statvbox.setAlignment(self.statdisplay, Qt.AlignTop) statvbox.addLayout(self.statgrid) databox.addLayout(statvbox) fr = QFrame() fr.setLineWidth(0.5) fr.setFrameShape(QFrame.VLine) databox.addWidget(fr) pixelvbox = QVBoxLayout( ) # This is another sub-box of databox for the pixel info pixelvbox.addWidget(self.infodisplay) pixelvbox.setAlignment(self.infodisplay, Qt.AlignTop) pixelvbox.addLayout(self.infogrid) databox.addLayout(pixelvbox) vbox2.addLayout(databox) # Horizontal line fr = QFrame() fr.setLineWidth(0.5) fr.setFrameShape(QFrame.HLine) vbox2.addWidget(fr) vbox2.setAlignment(fr, Qt.AlignTop) vbox2.addLayout(valhbox, Qt.AlignTop) vbox2.addStretch(1) vbox2.addWidget(cmap_label) # Adding the colormap label vbox2.addWidget(self.colormaps) # Adidng the colormap selector vbox2.addWidget(self.colorbar) vbox2.setAlignment(self.colorbar, Qt.AlignCenter) vbox2.addStretch(1) helpbox = QVBoxLayout() help_title = QLabel("Help") font = QFont("SansSerif", 14) font.setBold(True) help_title.setFont(font) helpbox.addWidget(help_title) helpbox.setAlignment(help_title, Qt.AlignTop) helpgrid = QGridLayout() helpgrid.setSpacing(5) helpgrid.addWidget(QLabel("Key"), 0, 0, 1, 1, Qt.AlignLeft) helpgrid.addWidget(QLabel("Action"), 0, 1, 1, 1, Qt.AlignLeft) helpgrid.addWidget(QLabel("up, down,left,right"), 1, 0, 1, 1, Qt.AlignLeft) helpgrid.addWidget(QLabel("move cursor"), 1, 1, 1, 1, Qt.AlignLeft) helpgrid.addWidget(QLabel("h,j,k,l"), 2, 0, 1, 1, Qt.AlignLeft) helpgrid.addWidget(QLabel("move view"), 2, 1, 1, 1, Qt.AlignLeft) helpgrid.addWidget(QLabel("a"), 3, 0, 1, 1, Qt.AlignLeft) # helpgrid.addWidget(QLabel("replace cell value with 9 point average"), 3, 1, 1, 1, Qt.AlignLeft) helpgrid.addWidget(QLabel("replace cell value with 9\npoint average"), 3, 1, 1, 1, Qt.AlignLeft) helpgrid.addWidget(QLabel("="), 4, 0, 1, 1, Qt.AlignLeft) helpgrid.addWidget(QLabel("enter new value for cell"), 4, 1, 1, 1, Qt.AlignLeft) helpgrid.addWidget(QLabel("c"), 5, 0, 1, 1, Qt.AlignLeft) # helpgrid.addWidget(QLabel("copy value under cursor into buffer"), 5, 1, 1, 1, Qt.AlignLeft) helpgrid.addWidget(QLabel("copy value under cursor\ninto buffer"), 5, 1, 1, 1, Qt.AlignLeft) helpgrid.addWidget(QLabel("v"), 6, 0, 1, 1, Qt.AlignLeft) helpgrid.addWidget(QLabel("paste value in buffer"), 6, 1, 1, 1, Qt.AlignLeft) helpgrid.addWidget(QLabel("m"), 7, 0, 1, 1, Qt.AlignLeft) helpgrid.addWidget(QLabel("move focus to color selector"), 7, 1, 1, 1, Qt.AlignLeft) helpgrid.addWidget(QLabel("Escape"), 8, 0, 1, 1, Qt.AlignLeft) helpgrid.addWidget(QLabel("move focus to main view"), 8, 1, 1, 1, Qt.AlignLeft) helpbox.addLayout(helpgrid) helpbox.setAlignment(helpgrid, Qt.AlignTop) vbox2.addLayout(helpbox) vbox2.setAlignment(helpbox, Qt.AlignBottom) hbox = QHBoxLayout() hbox.addLayout(vbox) hbox.addLayout(vbox2) self.main_frame.setLayout(hbox) self.setCentralWidget(self.main_frame) self.main_frame.setFocus()
yy = np.array([1, 45]) xx = np.array([1, 99]) means = [xx.mean(), yy.mean()] stds = [xx.std() / density, yy.std() / density] corr = 0.99 # correlation covs = [[stds[0]**2, stds[0] * stds[1] * corr], [stds[0] * stds[1] * corr, stds[1]**2]] m = np.random.multivariate_normal(means, covs, item_count).T m = np.round(m).astype(int) capacity = 400 return m[0], m[1], capacity if __name__ == '__main__': np.random.seed(42) profits, weights, _ = create_knapsack_data(item_count=20) plt.Figure() plt.scatter(weights, profits) plt.xlabel("weights") plt.ylabel("profits") np.random.seed(42) profits, weights, _ = create_knapsack_correlated(item_count=20) plt.scatter(weights, profits, marker='x') plt.legend(['random', 'correlated']) plt.show()