File size: 3,923 Bytes
ecf08bc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import cv2
import os
import plotly.express as px
import numpy as np
import pandas as pd
from plotly.subplots import make_subplots
import plotly.io as pio
pio.kaleido.scope.mathjax = None


def distribute_glacier(list_of_samples):
    list_of_glaciers = {}
    for glacier in [ 'COL', 'Mapple', 'Crane', 'Jorum','DBE','SI', 'JAC']:
        list_of_glaciers[glacier] = [sample for sample in list_of_samples if glacier in sample]
    return list_of_glaciers


if __name__ == '__main__':
    generate_data = True
    if generate_data:
        # directories with zone label
        train_dir = '/home/ho11laqe/PycharmProjects/data_raw/zones/train'
        test_dir = '/home/ho11laqe/PycharmProjects/data_raw/zones/test'

        list_of_train_samples = []
        for sample in os.listdir(train_dir):
            list_of_train_samples.append(os.path.join(train_dir, sample))

        list_of_test_samples = []
        for sample in os.listdir(test_dir):
            list_of_test_samples.append(os.path.join(test_dir, sample))

        list_of_samples = list_of_train_samples + list_of_test_samples

        list_of_glacier = distribute_glacier(list_of_samples)

        fig = make_subplots(rows=len(list_of_glacier.keys()), cols=1)
        nan = []
        rock = []
        ice = []
        ocean = []
        date = []
        glacier_name = []
        for i, glacier in enumerate(list_of_glacier.keys()):

            for sample in list_of_glacier[glacier]:
                print(sample)
                seg_mask = cv2.imread(sample, cv2.IMREAD_GRAYSCALE)
                all_pixel = seg_mask.shape[0] * seg_mask.shape[1]
                nan.append(np.count_nonzero(seg_mask == 0) / all_pixel * 100)
                rock.append(np.count_nonzero(seg_mask == 64) / all_pixel * 100)
                ice.append(np.count_nonzero(seg_mask == 127) / all_pixel * 100)
                ocean.append(np.count_nonzero(seg_mask == 254) / all_pixel * 100)

                sample_split = sample.split('_')
                date.append(sample_split[-6])
                glacier_name.append(glacier)

        df = pd.DataFrame(dict(Shadow=nan, Rock=rock, Glacier=ice, Ocean=ocean, date=date, glacier_name=glacier_name))
        df.to_csv('output/area.csv')

    else:
        df = pd.read_csv('output/area.csv')

    df = df.drop_duplicates(subset=['date', 'glacier_name'])
    area_plot = px.area(df,
                        x="date",
                        y=["Rock", "Shadow", "Glacier", "Ocean"],
                        color_discrete_map={"Shadow": 'black', "Ocean": 'blue', "Glacier": "aliceblue", "Rock": "gray"},
                        template="plotly_white",
                        height=700,
                        width =600,
                        facet_row='glacier_name',
                        category_orders={'glacier': [ 'COL', 'Mapple', 'Crane', 'Jorum','DBE','SI', 'JAC']}
                        )
    area_plot.update_yaxes(type='linear', range=[0, 100], ticksuffix='%', title='area', side='right')
    area_plot.for_each_annotation(lambda a: a.update(text=a.text.split("=")[1], textangle=0, x=0, xanchor='right'))
    area_plot.update_layout(legend=dict(title='Area:',
                                        orientation="h",
                                        yanchor="bottom",
                                        y=1.02,
                                        xanchor="right",
                                        x=1,
                                        font=dict(size=12)),
                            margin=dict(l=70, r=0, t=0, b=0)
                            )
    area_plot.for_each_yaxis(lambda a: a.update(title=''))
    area_plot.update_xaxes(title=' ',tickfont=dict(size=12))
    area_plot.update_layout(font=dict(family="Times New Roma", size=10, ))
    area_plot.update_annotations(font=dict(size=12))
    area_plot.write_image("output/area.pdf", format='pdf')
    # fig.show()