def stat_area_trend():
    df = load_data()
    df['发证月份'] = [i[:7] for i in df['发证日期']]
    summary = df.groupby('发证月份').sum()
    columns_area = ['预售建筑面积', '总建筑面积', '住宅面积', '办公面积', '其他面积', '车库面积']
    columns_other = ['层数', '住宅套数']
    chart = Line()
    chart.add_xaxis(summary.index.tolist())
    for column in columns_area:
        chart.add_yaxis(column,
                        summary[column].tolist(),
                        areastyle_opts=opts.AreaStyleOpts(opacity=0.1),
                        is_smooth=True)

    chart.set_series_opts(label_opts=opts.LabelOpts(
        is_show=False), ).extend_axis(yaxis=opts.AxisOpts(
            axislabel_opts=opts.LabelOpts(is_show=False), is_show=False))

    bar = Bar()
    bar.add_xaxis(summary.index.tolist())
    for column in columns_other:
        bar.add_yaxis(column, summary[column].tolist(), yaxis_index=1)

    chart.overlap(bar)
    min_date = min(df['发证日期'])
    max_date = max(df['发证日期'])
    chart.set_global_opts(title_opts=opts.TitleOpts(
        title="长沙预售房屋面积变化趋势",
        subtitle="统计日期:{}至{},数据来源:{}".format(min_date, max_date, DATA_SOURCE)),
                          legend_opts=opts.LegendOpts(is_show=True),
                          toolbox_opts=opts.ToolboxOpts(is_show=True))

    filename = os.path.join('..', 'assets',
                            '01_changsha_zhufangyushou_面积趋势.html')
    chart.render(filename)
 def buy_sell_line(self, tradelist):
     l = Line(init_opts=opts.InitOpts(width=self.width, height=self.height))
     l.set_global_opts(datazoom_opts=opts.DataZoomOpts(type_="inside"))
     x = self.time
     y = [None for i in range(len(x))]
     l.add_xaxis(x)
     l1 = Line(init_opts=opts.InitOpts(width=self.width, height=self.height))
     l2 = Line(init_opts=opts.InitOpts(width=self.width, height=self.height))
     l3 = Line(init_opts=opts.InitOpts(width=self.width, height=self.height))
     l4 = Line(init_opts=opts.InitOpts(width=self.width, height=self.height))
     l1.set_global_opts(datazoom_opts=opts.DataZoomOpts(type_="inside"))
     l2.set_global_opts(datazoom_opts=opts.DataZoomOpts(type_="inside"))
     l3.set_global_opts(datazoom_opts=opts.DataZoomOpts(type_="inside"))
     l4.set_global_opts(datazoom_opts=opts.DataZoomOpts(type_="inside"))
     for d in tradelist:
         # 多头
         if d[6] == 1:
             # 多头盈利
             if d[7] > 0:
                 l1.add_xaxis([d[0], d[3]])
                 l1.add_yaxis("long_win", [d[1], d[4]],
                              is_connect_nones=True,
                              linestyle_opts=opts.LineStyleOpts(color="#FFD700", width=5),
                              itemstyle_opts=opts.ItemStyleOpts(color="#FFD700", opacity=0.6))
             # 多头亏损
             else:
                 l2.add_xaxis([d[0], d[3]])
                 l2.add_yaxis("long_loss", [d[1], d[4]],
                              is_connect_nones=True,
                              linestyle_opts=opts.LineStyleOpts(color="#0088F0", width=3),
                              itemstyle_opts=opts.ItemStyleOpts(color="#0088F0", opacity=0.6))
         # 空头
         elif d[6] == -1:
             # 空头盈利
             if d[7] > 0:
                 l3.add_xaxis([d[0], d[3]])
                 l3.add_yaxis("short_win", [d[1], d[4]],
                              is_connect_nones=True,
                              linestyle_opts=opts.LineStyleOpts(color="#80008f", width=5),
                              itemstyle_opts=opts.ItemStyleOpts(color="#80008f", opacity=0.6))
             # 空头亏损
             else:
                 l4.add_xaxis([d[0], d[3]])
                 l4.add_yaxis("short_loss", [d[1], d[4]],
                              is_connect_nones=True,
                              linestyle_opts=opts.LineStyleOpts(color="#00FA9A", width=3),
                              itemstyle_opts=opts.ItemStyleOpts(color="#00FA9A", opacity=0.6))
     l.overlap(l1)
     l.overlap(l2)
     l.overlap(l3)
     l.overlap(l4)
     return l
Exemple #3
0
                    death_type]  #death_type是不同的国家
                if len(df_value) > 0:  #57-60,把没有新闻量的日期设置为0
                    y.append(int(df_value))
                else:
                    y.append(0)
            b.add_yaxis(
                death_type + " daily cases",
                y,
                yaxis_index=1,  #放在底层
                itemstyle_opts=opts.ItemStyleOpts(color='orange',
                                                  opacity=0.9),  #每根柱是什么样式
                markpoint_opts=opts.MarkPointOpts(
                    data=[opts.MarkPointItem(type_="max", name="最大值")],
                    symbol_size=70),
                label_opts=opts.LabelOpts(is_show=False))
        overlap = c.overlap(b)  #两个图重合
        overlap.render(publisher + '.html')

    international_color_dic = {
        'UK': '#c23531',
        'US': '#2f4554',
        'China': 'orange'
    }
    l = Line()
    publish_date = []
    for d in dates:  #回应24、25行
        publish_date = list(set(publish_date + [key for key in d]))
    publish_date.sort()
    l.add_xaxis(publish_date)

    for i in range(len(dates)):
Exemple #4
0
                    type_="log",  # 坐标轴配置项
                    splitline_opts=opts.SplitLineOpts(is_show=True),  # 分割线配置项
                    axisline_opts=opts.AxisLineOpts(is_show=True))))
    lin.render()
    lin.overlap(bar)
    lin.render()

    get_line()

    value = [95.1, 23.2, 43.3, 66.4, 88.5]
    attr = ["China", "Canada", "Brazil", "Russia", "United States"]
    map = Map("世界地图示例")
    map.add("",
            attr,
            value,
            maptype="world",
            is_visualmap=True,
            visual_text_color='#000')
    map.render('Map-World.html')

    bar = Bar()
    bar.add_xaxis(["1月1日", "1月2日"])
    bar.add_yaxis("类别1", [33, 34])
    bar.add_yaxis("类别2", [40, 42])
    line = Line()
    line.add_xaxis(["1月1日", "1月2日"])
    line.add_yaxis("类别1", [22, 24])
    line.add_yaxis("类别2", [30, 33])
    line.overlap(bar)
    line.render()
# -*- encoding: utf-8 -*-

# Project :zs
# Time  :2019/7/22 下午7:32 
# BY    :FormatFa

from pyecharts.charts import Bar,Line


b = Bar()
b.add_xaxis(['one','two','three'])
b.add_yaxis('s1',[1,2,3])


l = Line()
l.add_xaxis(['one','two','three','four'])
l.add_yaxis('s2',[1,2,3])

l.overlap(b)
print(b)
print(l.dump_options())

l.render('test.html')

Exemple #6
0
class TsdaChart(base_chart.BaseChart):
    chart = None
    max_x = None
    min_x = None

    def __init__(self, title, xaxis_name, yaxis_name):
        base_chart.BaseChart.__init__(self, title, xaxis_name, yaxis_name)

    def clear(self):
        self.data.clear()

    def set_data(self, **data):
        if ('x' in data) & ('y' in data):
            self.max_x = max(data['x'])
            self.min_x = min(data['x'])
            if 'label' in data:
                self.data.append([data['x'], data['y'], data['label']])
            else:
                self.data.append([data['x'], data['y']])
        return self

    def show(self):
        return self.chart

    def plot(self):
        self.chart = Line(init_opts=opts.InitOpts(page_title=self.title))

        # load data
        self.chart.add_xaxis(self.data[0][0])
        index = 0
        for data_set in self.data:
            if len(data_set) > 2:  # get label from data set
                label = data_set[2]
            else:
                label = self.yaxis_name + str(index)

            if index == 0:
                print('append line:', data_set[0])
                print(data_set[1])
                self.chart.add_yaxis(label, data_set[1])
            else:
                print('append bar:', data_set[0])
                print(data_set[1])
                bar = Bar()
                bar.add_xaxis(data_set[0])
                bar.add_yaxis(label, data_set[1])

                self.chart.overlap(bar)
            index += 1

        # set options

        self.chart.set_global_opts(
            title_opts=opts.TitleOpts(title=self.title),
            toolbox_opts=opts.ToolboxOpts(is_show=True),
            datazoom_opts=opts.DataZoomOpts(is_show=True,
                                            type_='slider',
                                            range_start=0,
                                            range_end=100),
            # xaxis_opts=opts.AxisOpts(name=self.xaxis_name, type_='time', name_location='end', name_gap=15,
            #                          splitline_opts=opts.SplitLineOpts(is_show=True),
            #                          min_=self.min_x, max_=self.max_x),
            yaxis_opts=opts.AxisOpts(
                name=self.yaxis_name,
                name_location='center',
                name_gap=25,
                splitline_opts=opts.SplitLineOpts(is_show=True)))

        self.chart.set_series_opts(
            label_opts=opts.LabelOpts(is_show=False, position='inside'))

        return self
Exemple #7
0
    def plot(self,
             area=['V', 'M'],
             width=1000,
             height=680,
             klines=[],
             vlines=[]) -> Grid:
        '''
        @params:
        - area : list   #显示区域
                       'V'   交易量
                       'M'   k线+MACD
                       FieldName: string   Dataframe中的字段名
                       [Field1,Field2,...] Dataframe中的字段名列表,将显示在一个区域
          width: int   #图表宽度 px
          height:int   #图表高度 px
          klines:str   #K线区域显示的数据,Dataframe中的字段名,如MA...
          vline: str   #Volume区域显示的数据,Dataframe中的字段名,如MA...
        - sample:
           chart=data.plot(area=[['small_pct','medium_pct','big_pct','super_pct'],'V','cci'],vlines=['vMA5','vMA10'],klines=['MA5','MA10'])  
        '''
        self.klines = klines
        self.vlines = vlines
        grid = (Grid(init_opts=opts.InitOpts(
            width=str(width) + "px",
            height=str(height) + "px",
            animation_opts=opts.AnimationOpts(animation=False),
        )))
        c = self.K()
        iTop = 10
        iButton = 10
        iWindows = len(area)
        iStep = 0
        if iWindows == 0:
            grid.add(c,
                     grid_opts=opts.GridOpts(pos_top="2%", pos_bottom="10%"))
        elif iWindows > 1:
            grid.add(c,
                     grid_opts=opts.GridOpts(pos_top="2%", pos_bottom="50%"))
            iStep = int(30 / iWindows)
            iButton = 50
        else:
            grid.add(c,
                     grid_opts=opts.GridOpts(pos_top="1%", pos_bottom="30%"))
            iStep = 15
            iButton = 70
        icount = 0
        for w in area:
            #print(iStep)
            if type(w) == list:
                window = Line().add_xaxis(self.dateindex)
                for l in w:
                    window.add_yaxis(
                        series_name=l,
                        y_axis=round(self.data[l],
                                     self.precision).values.tolist(),
                        is_smooth=True,
                        is_symbol_show=False,
                        is_hover_animation=False,
                        label_opts=opts.LabelOpts(is_show=False),
                        linestyle_opts=opts.LineStyleOpts(type_='solid',
                                                          width=2))
                window.axislabel_opts = opts.LabelOpts(is_show=False),
                window.set_global_opts(
                    datazoom_opts=[opts.DataZoomOpts()],
                    xaxis_opts=opts.AxisOpts(
                        type_="category",
                        axislabel_opts=opts.LabelOpts(is_show=False),
                    ),
                    legend_opts=opts.LegendOpts(orient='vertical',
                                                pos_left="top",
                                                pos_top=str(iButton) + "%"),
                )

            elif w == 'V':
                window = self.V()
                #grid.add(v,grid_opts=opts.GridOpts(pos_top= str(iButton)+'%',height=str(iStep)+'%'))
            elif w == 'M':
                window = self.MACD()
                #grid.add(macd,grid_opts=opts.GridOpts(pos_top= str(iButton)+'%',height=str(iStep)+'%'))
            else:
                window = Line().add_xaxis(self.dateindex)
                window.add_yaxis(
                    series_name=w,
                    y_axis=round(self.data[w], self.precision).values.tolist(),
                    is_smooth=True,
                    is_symbol_show=False,
                    is_hover_animation=False,
                    label_opts=opts.LabelOpts(is_show=False),
                    linestyle_opts=opts.LineStyleOpts(type_='solid', width=2))
                window.axislabel_opts = opts.LabelOpts(is_show=True),
                window.set_global_opts(
                    datazoom_opts=[opts.DataZoomOpts()],
                    xaxis_opts=opts.AxisOpts(
                        type_="category",
                        axislabel_opts=opts.LabelOpts(is_show=False),
                    ),
                    legend_opts=opts.LegendOpts(orient='horizontal',
                                                pos_left=str(icount + 20) +
                                                "%"),
                )
                if '_' + w + '_flag' in self.data.columns:
                    #print("find_flag")
                    v1 = self.data[self.data['_' + w + '_flag'] ==
                                   True].index.strftime("%Y-%m-%d").tolist()
                    v2 = self.data[self.data['_' + w + '_flag'] == True][w]
                    c_flag = (EffectScatter().add_xaxis(v1).add_yaxis("", v2))
                    window.overlap(c_flag)
                #grid.add(vLine,grid_opts=opts.GridOpts(pos_top= str(iButton)+'%',height=str(iStep)+'%'))
            icount += 1
            #最后一行加上x刻度
            if icount == iWindows:
                window.options['xAxis'][0]['axisLabel'].opts['show'] = True
            grid.add(window,
                     grid_opts=opts.GridOpts(pos_top=str(iButton) + '%',
                                             height=str(iStep) + '%'))
            iButton = iButton + iStep
        #grid.grid_opts=opts.GridOpts(pos_left="8%", pos_right="8%", height="50%"),
        grid.options['dataZoom'][0].opts['xAxisIndex'] = list(
            range(0, iWindows + 1))
        return grid
Exemple #8
0
             is_symbol_show=False,
             is_hover_animation=False,
             label_opts=opts.LabelOpts(is_show=False),
             linestyle_opts= opts.LineStyleOpts(type_='solid',width=2)
         )
         #print('_'+ str(l)+'_flag')
         if '_'+ l+'_flag' in self.data.columns:
             print("    find_flag: %s" % '_'+ l+'_flag')
             xx = self.data[self.data['_'+ l+'_flag']==True].index.strftime("%Y-%m-%d").tolist()
             yy = self.data[self.data['_'+ l+'_flag']==True][l]
             c_flag = (
                 EffectScatter()
                 .add_xaxis(xx)
                 .add_yaxis("",round(yy,self.precision))
             )
             window.overlap(c_flag)
     window.axislabel_opts=opts.LabelOpts(is_show=False),
     window.set_global_opts(datazoom_opts=[opts.DataZoomOpts()],
                 xaxis_opts=opts.AxisOpts(
                     type_="category",
                     axislabel_opts=opts.LabelOpts(is_show=False),
                 ),
                 legend_opts=opts.LegendOpts(orient='vertical',pos_left="top",pos_top=str(iButton)+"%"),
     )
 
                                
 elif w=='V':
     window=self.V()
     #grid.add(v,grid_opts=opts.GridOpts(pos_top= str(iButton)+'%',height=str(iStep)+'%'))                
 elif w=='M':
     window=self.MACD()