コード例 #1
0
def plot_data(data_df, connections, year, geoSource_new, df):

    d_yr = df[df['Years'] == year]

    data_df_countries = d_yr.merge(data_df,
                                   left_on='Origin_Country',
                                   right_on='Country')
    #data_df_countries = node_dt #.drop_duplicates(subset=None, keep='first', inplace=True)
    connections_df = connections

    # node_source = ColumnDataSource(data_df_countries[["country_id","Country", "Longitude", "Latitude"]])

    node_source = ColumnDataSource(data_df_countries)
    edge_source = ColumnDataSource(connections_df[["start", "end"]])

    node_renderer = GlyphRenderer(data_source=node_source,
                                  glyph=node_glyph,
                                  selection_glyph=node_selection,
                                  nonselection_glyph=node_nonselection)

    ## Create edge_renderer
    edge_renderer = GlyphRenderer(data_source=edge_source,
                                  glyph=edge_glyph,
                                  hover_glyph=edge_hover,
                                  selection_glyph=edge_selection,
                                  nonselection_glyph=edge_nonselection)
    ## Create layout_provider
    graph_layout = dict(
        zip(data_df_countries.country_id.astype(str),
            zip(data_df_countries.Longitude, data_df_countries.Latitude)))
    layout_provider = StaticLayoutProvider(graph_layout=graph_layout)

    ## Create graph renderer
    graph = GraphRenderer(edge_renderer=edge_renderer,
                          node_renderer=node_renderer,
                          layout_provider=layout_provider,
                          inspection_policy=NodesAndLinkedEdges(),
                          selection_policy=NodesAndLinkedEdges())

    plot = Plot(x_range=Range1d(-150, 150),
                y_range=Range1d(15, 75),
                plot_width=800,
                plot_height=600,
                background_fill_color=Set3_12[4],
                background_fill_alpha=0.2)

    plot.title.text = "Human Trafficing Visualization for " + str(year)

    plot.add_glyph(
        geoSource_new,
        Patches(xs='xs',
                ys='ys',
                line_color='grey',
                line_width=.2,
                fill_color={
                    'field': 'Tier',
                    'transform': mapper2
                },
                fill_alpha=0.40))

    plot.renderers.append(graph)
    plot.add_layout(LinearAxis(axis_label="Latitude"), "below")
    plot.add_layout(LinearAxis(axis_label="Longitude"), "left")

    # tooltips="""
    #                             <div>
    #                                 <div>
    #                                     <span style="font-size: 17px; font-weight: bold;">@desc</span>
    #                                     <span style="font-size: 15px; color: #966;">[$index]</span>
    #                                 </div>
    #                                 <div>
    #                                     <span style="font-size: 15px;">Country Involved</span>
    #                                     <span style="font-size: 10px; color: #696;">@Country</span>
    #                                 </div>
    #                             </div>
    #                             """,

    hover = HoverTool(
        show_arrow=True,  # tooltips=  # [("Country Involved: ", "@Country")],
        tooltips="""
                                <div>
                                    <div>
                                        <span style="font-size: 13px;">Country Info</span>
                                        <span style="font-size: 12px; color: #696;">@Destination_Country, @Type_Of_Trafficking</span>
                                    </div>
                                </div>
                                """,
        renderers=[node_renderer],
        name='Test')
    hover_no_tooltips = HoverTool(tooltips=None, renderers=[graph])
    box_zoom = BoxZoomTool()

    plot.add_tools(hover, hover_no_tooltips, box_zoom, TapTool(),
                   BoxSelectTool(), ResetTool(), WheelZoomTool())
    plot.toolbar.active_inspect = [hover, hover_no_tooltips]
    plot.toolbar.active_drag = box_zoom
    plot.outline_line_color = "navy"
    plot.outline_line_alpha = 0.3
    plot.outline_line_width = 1

    select_overlay = plot.select_one(BoxSelectTool).overlay

    select_overlay.fill_color = "firebrick"
    select_overlay.line_color = None

    zoom_overlay = plot.select_one(BoxZoomTool).overlay

    zoom_overlay.line_color = "olive"
    zoom_overlay.line_width = 3
    zoom_overlay.line_dash = "solid"
    zoom_overlay.fill_color = None

    plot.add_tile(STAMEN_TONER_LABELS)

    return plot
コード例 #2
0
    def showGraph(self):

        curdoc().theme = 'dark_minimal'
        graph_plot = Plot(plot_width=1600,
                          plot_height=900,
                          x_range=Range1d(-1.1, 1.1),
                          y_range=Range1d(-1.1, 1.1))

        if self._methood:
            graph_plot.title.text = (
                "Graph %s \nTotal Nodes: %i \nTotal Edges: %i \n Node threshold:"
                "%i \n edge threshold: %i \n Total COMM: %i  \n Method: %s" %
                (self._path[1], self.G.number_of_nodes(),
                 self.G.number_of_edges(), self.nodeThres, self.edgeThres,
                 len(self.partition), self._methood))
        else:

            graph_plot.title.text = "Graph %s. \nTotal Nodes: %i \nTotal Edges: %i \n Node threshold: %i \n edge threshold: %i" % (
                self._path[1], self.G.number_of_nodes(),
                self.G.number_of_edges(), self.nodeThres, self.edgeThres)

        graph_renderer = from_networkx(self.G,
                                       nx.spring_layout,
                                       scale=1,
                                       center=(0, 0))
        graph_renderer.node_renderer.glyph = Circle(size='size',
                                                    fill_color='colors')
        graph_renderer.node_renderer.hover_glyph = Circle(size=18,
                                                          fill_color='#E84A5F')
        graph_renderer.node_renderer.glyph.properties_with_values()
        graph_renderer.edge_renderer.glyph = MultiLine(line_color="#f2f2f2",
                                                       line_alpha=0.8,
                                                       line_width=0.4)
        graph_renderer.edge_renderer.hover_glyph = MultiLine(
            line_color='#e09e8f', line_width=3)
        graph_renderer.node_renderer.data_source.data[
            'hashtag'] = self.data.ht.values
        graph_renderer.node_renderer.data_source.data[
            'frequency'] = self.data.frq.values
        graph_renderer.node_renderer.data_source.data[
            'degree'] = self.data.degree.values
        graph_renderer.node_renderer.data_source.data['ix'] = list(
            self.data.index)
        graph_renderer.node_renderer.data_source.data[
            'strength'] = self.data.strength.values
        graph_renderer.node_renderer.data_source.data['size'] = np.log(
            (self.data.degree.values + 1) * 3) * 6

        if self.community:

            graph_renderer.node_renderer.data_source.data[
                'colors'] = self.data.color.values

            graph_renderer.node_renderer.data_source.data[
                'community'] = self.data.community.values

            node_hover_tool = HoverTool(tooltips=[(
                "hashtag",
                "@hashtag"), ("freq", "@frequency"), (
                    'degree',
                    '@degree'), ('strength',
                                 '@strength'), ('community',
                                                '@community'), ('ix', '@ix')])
        else:

            graph_renderer.node_renderer.data_source.data['colors'] = [
                'red'
            ] * self.G.number_of_nodes()

            node_hover_tool = HoverTool(
                tooltips=[("hashtag", "@hashtag"), (
                    "freq",
                    "@frequency"), ('degree',
                                    '@degree'), ('strength',
                                                 '@strength'), ('ix', '@ix')])

        graph_plot.add_tools(node_hover_tool, BoxZoomTool(), ResetTool(),
                             WheelZoomTool())

        graph_plot.toolbar.active_scroll = graph_plot.select_one(WheelZoomTool)

        graph_renderer.inspection_policy = NodesAndLinkedEdges()
        graph_renderer.selection_policy = NodesAndLinkedEdges()
        graph_plot.toolbar.active_inspect = [node_hover_tool]
        graph_plot.renderers.append(graph_renderer)

        graph_plot.background_fill_color = '#0d0d0d'
        graph_plot.background = 'black'
        graph_plot.border_fill_color = '#1a1a1a'

        if self.partition:
            legend = Legend(items=[
                LegendItem(label="coverage: %f" %
                           nx.community.coverage(self.G, self.partition),
                           index=0),
                LegendItem(label="performance: %f" %
                           nx.community.performance(self.G, self.partition),
                           index=1),
                LegendItem(label="modularity: %f" %
                           nx.community.modularity(self.G, self.partition),
                           index=2)
            ])
            graph_plot.add_layout(legend)

        output_file(self._path[0] + "Graph_NT" + str(self.nodeThres) + "ET" +
                    str(self.edgeThres) + ".html")
        show(graph_plot)
        return