예제 #1
0
from pyecharts import Line, Pie, Grid, Bar
from get_data import get_city_data

data = get_city_data('friend.json')

bar = Bar("柱状图", height=720)
attr, value = bar.cast(data)
bar.add("微信好友", attr, value)

line = Line("折线图", height=720, title_top="50%")
line.add("", attr, value, line_color='red')

grid = Grid()
grid.use_theme('dark')

grid.add(bar, grid_bottom="60%")
grid.add(line, grid_top="60%")

grid.render('map2.html')
grid.render(path='map2.png')

pie = Pie("饼图", title_pos='center')
pie.use_theme('dark')
pie.add("",
        attr,
        value,
        radius=[40, 75],
        label_text_color=None,
        is_label_show=True,
        legend_orient="vertical",
        legend_pos="left")
예제 #2
0
    def draw_bar(self, dbName, begDate=None):
        Beg, End = self.get_date_begin_end()
        if begDate == None:
            begDate = Beg[0]
        maxvalue = get_days(begDate, End[0])
        data1 = self.__get_draw_bar_data_core__(dbName, begDate, ('<', 50))
        dataBase = self.__get_draw_bar_data_core__(dbName, begDate, ('<', 100))
        data3 = self.__get_draw_bar_data_core__(dbName, begDate, ('<', 150),
                                                ('>=', 100))  #轻度
        data4 = self.__get_draw_bar_data_core__(dbName, begDate, ('<', 200),
                                                ('>=', 150))
        data5 = self.__get_draw_bar_data_core__(dbName, begDate, ('<', 300),
                                                ('>=', 200))
        data6 = self.__get_draw_bar_data_core__(dbName, begDate, ('>=', 300))

        count = max(len(data1), len(dataBase), len(data3), len(data4),
                    len(data5), len(data6))
        # print(len(data1),len(dataBase),len(data3),len(data4),len(data5),len(data6))
        valueBase, nameBase = self.__get_value_name_bar__(dataBase, count)

        def __re_arrange(count, nameBase, dataInput):
            valuetemp = count * [0]
            idx = 0
            for item in nameBase:
                for i in dataInput:
                    if item == i[1]:
                        valuetemp[idx] = i[0]
                        break
                idx = idx + 1
            return valuetemp

        def label_formatter(params):
            return params.name + ' ' + str(params.value) + '%'

        grid = Grid(**style2.init_style)
        grid.use_theme("dark")
        bar = Bar("", **style1.init_style)
        value1 = __re_arrange(count, nameBase, data1)
        bar.add("优", nameBase[:-1], value1[:-1], is_stack=True)
        # list(map(lambda x: x[0]-x[1], zip(valueBase, valuetemp)))
        bar.add("良",
                nameBase[:-1],
                list(
                    map(lambda x: x[0] - x[1] - x[2],
                        zip(valueBase[:-1], value1[:-1], count * [3]))),
                is_stack=True)
        value3 = __re_arrange(count, nameBase, data3)
        bar.add("轻度污染", nameBase[:-1], value3[:-1], is_stack=True)
        value4 = __re_arrange(count, nameBase, data4)
        bar.add("中度污染", nameBase[:-1], value4[:-1], is_stack=True)
        value5 = __re_arrange(count, nameBase, data5)
        bar.add("重度污染", nameBase[:-1], value5[:-1], is_stack=True)
        value6 = __re_arrange(count, nameBase, data6)
        bar.add(
            "严重污染",
            nameBase[:-1],
            value6[:-1],
            is_stack=True,
            # yaxis_name="天",
            # yaxis_name_size='16',
            # yaxis_name_gap='25',
            # yaxis_name_pos='top',
            xaxis_type="category",
            xaxis_interval=0,
            yaxis_interval=0,
            xaxis_pos='top',
            yaxis_max=maxvalue,
            # is_label_show=True,
            #bar_category_gap="30%",
            xaxis_label_textsize=12,
            yaxis_label_textsize=12,
            xaxis_rotate=90,
            yaxis_rotate=90,
            # label_formatter=label_formatter,
            is_legend_show=True,
            legend_pos='91%',
            legend_top='center',
            legend_orient='horizontal',
            label_pos='bottom',
            label_text_size=16,
            label_color=[
                '#43CE17', '#EFDC31', '#FFAA00', '#FF401A', '#D20040',
                '#9C0A4E'
            ])

        idxList = [str(x) for x in range(1, len(valueBase))]
        line = Line()
        meanList = len(idxList) * [sum(valueBase[:-1]) / len(idxList)]
        line.add("",
                 idxList,
                 meanList,
                 line_width=3,
                 symbol=None,
                 line_color='#0078D7',
                 mark_line=["average"])
        line.add("",
                 idxList,
                 valueBase[:-1],
                 is_smooth=True,
                 symbol=None,
                 line_width=3,
                 xaxis_label_textsize=16,
                 xaxis_rotate=90,
                 line_color='#FF401A')
        overlap = Overlap()
        overlap.add(bar)
        overlap.add(line, is_add_xaxis=True, xaxis_index=1)
        grid.add(overlap, grid_top="21%")
        grid.render()
        grid.render("最优城市排行榜.jpeg")

        #低于均值城市的饼状图

        lowThanMeanDic = {}
        for v in nameBase[-101:-1]:
            # if v < meanList[0]:
            key = v.split('-')[1]
            if key in lowThanMeanDic.keys():
                lowThanMeanDic[key] = lowThanMeanDic[key] + 1
            else:
                lowThanMeanDic[key] = 1
        data = self.__sort_by_value__(lowThanMeanDic)
        value, name = self.__get_value_name_bar__(data, len(data))
        pie = Pie()
        pie.use_theme("dark")
        pie.add("",
                name,
                value,
                is_legend_show=False,
                is_label_show=True,
                label_text_size=10)
        pie.render("最污百城省份分布.jpeg")