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
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)):
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')
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
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
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()