Esempio n. 1
0
File: plot.py Progetto: robbyt/mew
def chart_prep(indexes, csv_data_list, file_name):
    colors = 100 * np.random.random(100).tolist()
    l = []
    for my_index in indexes:
        my_index_list = []
        for csv_data_chunk in csv_data_list:
            if csv_data_chunk[0] == my_index:
                my_index_list.append(csv_data_chunk)
        # l.append(my_index_list, file_name, colors.pop()))
        l.append((my_index_list, my_index, colors.pop()))
    return l
Esempio n. 2
0
    def plot_marker_accessions_hist(self,
                                    pid,
                                    marker,
                                    m_accessions,
                                    plot_file=None,
                                    plot_format='png',
                                    m_position=None,
                                    m_chromosome=None,
                                    title=None,
                                    m_score=None):
        """
        A histogram displaying the phenotype values (ordered) on the y-axis, and the accession on the x-axis.
        """
        import matplotlib.cm as cm
        import matplotlib.colors as colors

        color_map = {}
        colors = ['r', 'm', 'b', 'g']
        proxy_rects = []
        labels = []
        for nt in set(marker):
            c = colors.pop()
            color_map[nt] = c
            proxy_rects.append(plt.Rectangle((0, 0), 1, 1, fc=c, alpha=0.6))
            labels.append("'%s' allele" % str(nt))

        phen_values = self.get_values(pid)
        ets = self.get_ecotypes(pid)
        l = zip(phen_values, ets, marker)
        l.sort(reverse=True)

        fig = plt.figure(figsize=(20, 10))
        ax = fig.add_axes([0.07, 0.15, 0.91, 0.82])
        x_range = len(l) - 0.2
        min_y = min(phen_values)
        max_y = max(phen_values)
        y_range = max_y - min_y

        for i, (phen_val, accession, nt) in enumerate(l):
            color = color_map[nt]
            rect = ax.bar(i, phen_val, 0.8, color=color, alpha=0.6)
        ax.axis([
            -x_range * 0.02, x_range * 1.02, min_y - 0.05 * y_range,
            max_y + 0.05 * y_range
        ])

        ax.legend(proxy_rects, labels)
        ax.set_ylabel('Phenotype value')
        ax.set_xticks((sp.arange(len(ets)) + 0.4).tolist())
        ax.set_xticklabels(ets, rotation='vertical', fontsize='xx-small')
        ax.set_xlabel('Ecotype IDs')

        fig.savefig(plot_file, format=plot_format, dpi=300)
Esempio n. 3
0
    def plot_marker_accessions_hist(
        self,
        pid,
        marker,
        m_accessions,
        plot_file=None,
        plot_format="png",
        m_position=None,
        m_chromosome=None,
        title=None,
        m_score=None,
    ):
        """
        A histogram displaying the phenotype values (ordered) on the y-axis, and the accession on the x-axis.
        """
        import matplotlib.cm as cm
        import matplotlib.colors as colors

        color_map = {}
        colors = ["r", "m", "b", "g"]
        proxy_rects = []
        labels = []
        for nt in set(marker):
            c = colors.pop()
            color_map[nt] = c
            proxy_rects.append(plt.Rectangle((0, 0), 1, 1, fc=c, alpha=0.6))
            labels.append("'%s' allele" % str(nt))

        phen_values = self.get_values(pid)
        ets = self.get_ecotypes(pid)
        l = zip(phen_values, ets, marker)
        l.sort(reverse=True)

        fig = plt.figure(figsize=(20, 10))
        ax = fig.add_axes([0.07, 0.15, 0.91, 0.82])
        x_range = len(l) - 0.2
        min_y = min(phen_values)
        max_y = max(phen_values)
        y_range = max_y - min_y

        for i, (phen_val, accession, nt) in enumerate(l):
            color = color_map[nt]
            rect = ax.bar(i, phen_val, 0.8, color=color, alpha=0.6)
        ax.axis([-x_range * 0.02, x_range * 1.02, min_y - 0.05 * y_range, max_y + 0.05 * y_range])

        ax.legend(proxy_rects, labels)
        ax.set_ylabel("Phenotype value")
        ax.set_xticks((sp.arange(len(ets)) + 0.4).tolist())
        ax.set_xticklabels(ets, rotation="vertical", fontsize="xx-small")
        ax.set_xlabel("Ecotype IDs")

        fig.savefig(plot_file, format=plot_format, dpi=300)
Esempio n. 4
0
def draw_top(main_models,
             sub_models_list,
             cmap=custom_cmap,
             legend_names=None,
             topn=20,
             offset=0.2,
             width_ratio=0.1,
             height_ratio=0.2,
             linewidth=1,
             point_size=5,
             fontsize=12,
             box_aspect=None,
             value_aspect='auto',
             id_csv_path='./data/mask/cortical_id_new.csv',
             show=True,
             out_path=None):
    # load id Dataframe
    id_df = pd.read_csv(id_csv_path, index_col=1)

    main_df = models_to_dataframe(main_models)
    sub_dfs = [models_to_dataframe(models) for models in sub_models_list]

    sorted_main_df = main_df.sort_values('es')
    top_df = sorted_main_df[:topn]

    colors = cmap(np.arange(1 + len(sub_models_list))).tolist()
    main_color = colors.pop(0)

    fig = plt.figure(figsize=(width_ratio * topn, height_ratio * topn))
    ax = fig.add_axes([0, 0, 1, 1])
    legends = []

    y_labels = []
    y = topn
    for index, row in top_df.iterrows():
        ll = row['ll']
        ul = row['ul']
        es = row['es']

        plt.scatter(es, y, s=point_size, color=main_color)
        b, = plt.plot((ll, ul), (y, y), linewidth=linewidth, color=main_color)
        if y == topn:
            legends.append(b)
        y = y - 1

        y_labels.append(id_df.loc[int(index)]['name'])

    i = 1
    offsets = []
    for i in range(2, len(sub_models_list) + 2):
        if i % 2:
            offsets.append(offset * int(i / 2))
        else:
            offsets.append(-offset * int(i / 2))
    top_sub_dfs = [top_df.align(df, join='left')[1] for df in sub_dfs]
    for sub_df, color, _offset in zip(top_sub_dfs, colors, offsets):
        y = topn
        for index, row in sub_df.iterrows():
            ll = row['ll']
            ul = row['ul']
            es = row['es']

            plt.scatter(es, y + _offset, s=point_size, color=color)
            b, = plt.plot((ll, ul), (y + _offset, y + _offset),
                          linewidth=linewidth,
                          color=color)
            if y == topn:
                legends.append(b)
            y = y - 1
        i += 1

    ax.set_yticks(np.arange(topn + 1))
    y_labels.append('')
    y_labels.reverse()
    ax.set_yticklabels(y_labels, fontdict={'fontsize': fontsize})
    ax.tick_params(axis='both', which='major', labelsize=fontsize)
    ax.tick_params(axis='y', length=0)
    if legend_names is not None and len(legend_names) == len(legends):
        plt.legend(legends, legend_names)
    ax.set_box_aspect(aspect=box_aspect)
    ax.set_aspect(aspect=value_aspect)

    if out_path is not None:
        plt.savefig(out_path)
    if show:
        plt.show()
    plt.close()
m.drawparallels(parallels,labels=[1,0,0,0],fontsize=10)
meridians = np.arange(180.,360.,10.)
m.drawmeridians(meridians,labels=[0,0,0,1],fontsize=10)




# display blue marble image (from NASA) as map background
#m.bluemarble()




conn = pypyodbc.connect('DSN=localMSSQL')
cur = conn.cursor()
sql= "select top 10000 constituentlookupid,post_code,latitude, longitude,gender from [saeed_cons_spatial] where post_code is not null" 
cur.execute(sql)
dd=cur.fetchall();
df=pd.DataFrame(dd)


colors = list("rgb")
groups_gend = df.groupby(df[4])
for name, group in groups_gend:
    lons=group[3].values
    lats=group[2].values
    gend=group[4].values
    x, y = m(lons,lats)
    m.scatter(x.tolist(), y.tolist(), color=colors.pop(), alpha=0.05,linewidth='0', label=name)
plt.legend()
plt.show()