class HeatMapChart(base_chart.BaseChart): chart = None zaxis_name = None data_x = [] data_y = [] heat_map = [] max_value = 0 min_value = 0 def __init__(self, title, xaxis_name, yaxis_name, zaxis_name): base_chart.BaseChart.__init__(self, title, xaxis_name, yaxis_name) self.zaxis_name = zaxis_name def clear(self): self.data_x.clear() self.data_y.clear() self.heat_map.clear() def set_data(self, **data): if ('x' in data) & ('y' in data) & ('map' in data): self.data_x = data['x'] self.data_y = data['y'] self.to_echarts_map(data['map']) return self def show(self): return self.chart def to_echarts_map(self, map) -> []: self.max_value = map[0][0] self.min_value = map[0][0] for i in range(len(map)): for j in range(len(map[i])): if self.max_value < map[i][j]: self.max_value = map[i][j] if self.min_value > map[i][j]: self.min_value = map[i][j] self.heat_map.append([j, i, map[i][j]]) return self.heat_map def plot(self): self.chart = HeatMap(init_opts=opts.InitOpts(page_title=self.title)) # load data self.chart.add_xaxis(self.data_x) self.chart.add_yaxis(self.zaxis_name, self.data_y, self.heat_map) self.chart.set_global_opts( title_opts=opts.TitleOpts(title=self.title), xaxis_opts=opts.AxisOpts(name=self.xaxis_name, name_location='end', name_gap=15), yaxis_opts=opts.AxisOpts(name=self.yaxis_name, name_location='end', name_gap=15), visualmap_opts=opts.VisualMapOpts(max_=self.max_value, min_=self.min_value)) return self
def heat_map(data: List[dict], x_label: List[str] = None, y_label: List[str] = None, title: str = "热力图", width: str = "900px", height: str = "680px") -> HeatMap: """绘制热力图 :param data: 用于绘制热力图的数据,示例如下 [{'x': '0hour', 'y': '0day', 'heat': 11}, {'x': '0hour', 'y': '1day', 'heat': 40}, {'x': '0hour', 'y': '2day', 'heat': 38}, {'x': '0hour', 'y': '3day', 'heat': 36}, {'x': '0hour', 'y': '4day', 'heat': 11}] :param x_label: x轴标签 :param y_label: y轴标签 :param title: 图表标题 :param width: 图表宽度 :param height: 图表高度 :return: 图表 """ value = [[s['x'], s['y'], s['heat']] for s in data] heat = [s['heat'] for s in data] if not x_label: x_label = sorted(list(set([s['x'] for s in data]))) if not y_label: y_label = sorted(list(set([s['y'] for s in data]))) vis_map_opts = opts.VisualMapOpts(pos_left="90%", pos_top="20%", min_=min(heat), max_=max(heat)) title_opts = opts.TitleOpts(title=title) init_opts = opts.InitOpts(page_title=title, width=width, height=height) dz_inside = opts.DataZoomOpts(False, "inside", xaxis_index=[0], range_start=80, range_end=100) dz_slider = opts.DataZoomOpts(True, "slider", xaxis_index=[0], pos_top="96%", pos_bottom="0%", range_start=80, range_end=100) legend_opts = opts.LegendOpts(is_show=False) hm = HeatMap(init_opts=init_opts) hm.add_xaxis(x_label) hm.add_yaxis("heat", y_label, value, label_opts=opts.LabelOpts(is_show=True, position="inside")) hm.set_global_opts(title_opts=title_opts, visualmap_opts=vis_map_opts, legend_opts=legend_opts, xaxis_opts=opts.AxisOpts(grid_index=0), datazoom_opts=[dz_inside, dz_slider]) return hm
def v_correlation(self, end=yesterdayobj(), vopts=None): """ 各基金净值的相关程度热力图可视化 :param end: string or object of date, the end date of the line :returns: pyecharts.charts.Heatmap.render_notebook object """ ctable = self.correlation_table(end) x_axis = list(ctable.columns) data = [[i, j, ctable.iloc[i, j]] for i in range(len(ctable)) for j in range(len(ctable))] heatmap = HeatMap() heatmap.add_xaxis(x_axis) heatmap.add_yaxis(series_name="相关性", yaxis_data=x_axis, value=data) if vopts is None: vopts = heatmap_opts heatmap.set_global_opts(**vopts) return heatmap.render_notebook()
] parallel_data = [[12.99, 100, 82, "Good"], [9.99, 80, 77, "OK"], [20, 120, 60, "Excellent"]] # init_opts=opts.InitOpts(width="800px",height="300px") parallel = Parallel(init_opts=opts.InitOpts(width="800px", height="300px")) parallel.add_schema(parallel_axis) parallel.add(series_name="Related Indexes", data=parallel_data, linestyle_opts=opts.LineStyleOpts(width=4, opacity=0.5)) liquid = Liquid(init_opts=opts.InitOpts(width="300px", height="300px")) liquid.add("liquid", [0.6, 0.7, 0.3]) liquid.set_global_opts(title_opts=opts.TitleOpts(title="Basic Example")) heatmap_data = [[i, j, random.randint(0, 50)] for i in range(7) for j in range(7)] heatmap = HeatMap() heatmap.add_xaxis(Faker.week) heatmap.add_yaxis( "相关表", Faker.week, heatmap_data, label_opts=opts.LabelOpts(is_show=True, position="inside"), ) heatmap.set_global_opts( title_opts=opts.TitleOpts(title="HeatMap-Label 显示"), visualmap_opts=opts.VisualMapOpts(), )
for i in range(4, 10): kw_counts_by_score[i] = pd.read_csv(r'.\data_set\{0}_movie_keywords.csv'.format(i)) kw_percentage_df = pd.DataFrame([], columns=list(range(4, 10)), index=kw_counts_by_score[9]['kw'][:10]) # 将数据写入空表 for i in range(4, 10): kw_df = kw_counts_by_score[i] kw_df = kw_df[kw_df['kw'].isin(kw_percentage_df.index)] kw_percentage_df[i] = pd.Series(list(kw_df['percentage']), index=kw_df['kw']) # 用0替换NAN,否则无法计算 kw_percentage_df.fillna(0, inplace=True) # 建立有三个元素的列表,作为绘制的数据 data = [] i = 0 for index in kw_percentage_df.index: j = 0 for column in kw_percentage_df.columns: data.append([j, i, kw_percentage_df[column][index] * 100]) j += 1 i += 1 # 绘制热力图 heatmap = HeatMap() heatmap.add_xaxis(list(kw_percentage_df.columns)) heatmap.add_yaxis('电影评论关键词热力图', list(kw_percentage_df.index), data) heatmap.set_global_opts(visualmap_opts=opts.VisualMapOpts(min_=0, max_=10, orient='horizontal')) heatmap.render('comment_heatmap.html')
# -*- coding: utf-8 -*- """ Created on Sun Dec 13 22:17:48 2020 @author: Administrator """ import pandas as pd import numpy as np from sklearn.preprocessing import StandardScaler from pyecharts.charts import HeatMap from pyecharts import options as opts s = StandardScaler() data = pd.read_excel('info_movies.xls')[['rank','year','score','comment']] column = data.columns.tolist() data1 = s.fit_transform(data) corr = abs(np.corrcoef(data1.T)) value = [[i, j, corr[i,j]] for i in range(4) for j in range(4)] heatmap = HeatMap() heatmap.add_xaxis(column) heatmap.add_yaxis("相关性热力学图", column, value) heatmap.set_global_opts( title_opts=opts.TitleOpts(title="豆瓣电影排行数据分析结果"), visualmap_opts=opts.VisualMapOpts(max_=1), ) heatmap.render('templates/corr.html')