def test_grid_four_direction(): v1 = [5, 20, 36, 10, 75, 90] v2 = [10, 25, 8, 60, 20, 80] bar = Bar("柱状图示例", height=720, width=1200, title_pos="65%") bar.add("商家A", CLOTHES, v1, is_stack=True) bar.add("商家B", CLOTHES, v2, is_stack=True, legend_pos="80%") line = Line("折线图示例") line.add("最高气温", WEEK, [11, 11, 15, 13, 12, 13, 10], mark_point=["max", "min"], mark_line=["average"]) line.add("最低气温", WEEK, [1, -2, 2, 5, 3, 2, 0], mark_point=["max", "min"], mark_line=["average"], legend_pos="20%") v1 = [5, 20, 36, 10, 75, 90] v2 = [10, 25, 8, 60, 20, 80] scatter = Scatter("散点图示例", title_top="50%", title_pos="65%") scatter.add("scatter", v1, v2, legend_top="50%", legend_pos="80%") es = EffectScatter("动态散点图示例", title_top="50%") es.add("es", [11, 11, 15, 13, 12, 13, 10], [1, -2, 2, 5, 3, 2, 0], effect_scale=6, legend_top="50%", legend_pos="20%") grid = Grid() grid.add(bar, grid_bottom="60%", grid_left="60%") grid.add(line, grid_bottom="60%", grid_right="60%") grid.add(scatter, grid_top="60%", grid_left="60%") grid.add(es, grid_top="60%", grid_right="60%") grid.render()
def test_scatter_multi_dimension(): data = [ [28604, 77, 17096869], [31163, 77.4, 27662440], [1516, 68, 1154605773], [13670, 74.7, 10582082], [28599, 75, 4986705], [29476, 77.1, 56943299], [31476, 75.4, 78958237], [28666, 78.1, 254830], [1777, 57.7, 870601776], [29550, 79.1, 122249285], [2076, 67.9, 20194354], [12087, 72, 42972254], [24021, 75.4, 3397534], [43296, 76.8, 4240375], [10088, 70.8, 38195258], [19349, 69.6, 147568552], [10670, 67.3, 53994605], [26424, 75.7, 57110117], [37062, 75.4, 252847810] ] x_lst = [v[0] for v in data] y_lst = [v[1] for v in data] extra_data = [v[2] for v in data] sc = Scatter() sc.add("scatter", x_lst, y_lst, extra_data=extra_data, is_visualmap=True, visual_dimension=2, visual_orient='horizontal', visual_type='size', visual_range=[254830, 1154605773], visual_text_color='#000') sc.render()
def main(): dutPl0 = [] dutpl1 = [] maxCntPl0 = [] maxCntPl1 = [] page = Page("Cluster Padding Figure") txtFiles = [name for name in os.listdir('./') if name.endswith('.txt')] for textLogName in txtFiles: waferNum = re.split(r'_', textLogName) with open(textLogName, 'rt') as clusterFile: for line in clusterFile: if re.match(r'IncomingBBKCount[A-Za-z0-9_.\+\-\*\/\s]*BBKP', line): splitColon = re.split(r'\s*[:]\s*', line) splitColon1 = splitColon[0] splitColon2 = splitColon[1] splitColon3 = splitColon[2] listBlk = re.split(r'\s*[\s]\s*', splitColon3) padBlk = paddingBlk(listBlk) maxCnt = clusterBlk(padBlk) splitSpace = re.split(r'\s*[\s]\s*', splitColon1) intDut = int(splitSpace[1].replace('DUT', '')) if splitSpace[2] == "BBKP0": dutPl0.append(intDut) maxCntPl0.append(maxCnt) else: dutpl1.append(intDut) maxCntPl1.append(maxCnt) scatter = Scatter(waferNum[2]) scatter.add("PL0", dutPl0, maxCntPl0, xaxis_name = "DUT", yaxis_name = "Max Padding BB", is_more_utils = True) scatter.add("PL1", dutpl1, maxCntPl1, xaxis_name = "DUT", yaxis_name = "Max Padding BB", is_more_utils = True) page.add(scatter) page.render()
def test_scatter_visualmap_type_size(): scatter = Scatter("散点图示例") scatter.add( "B", v1[::-1], v2, is_visualmap=True, visual_type="size", visual_range_size=[20, 80], ) scatter.render()
def test_scatter_option(patched): patched.return_value = "1" v1 = [10, 20, 30, 40, 50, 60] v2 = [10, 20, 30, 40, 50, 60] scatter = Scatter("scatter test") scatter.add("A", v1, v2) scatter.add("B", v1[::-1], v2) actual_options = json.dumps( scatter.options, sort_keys=True, indent=4, cls=DefaultJsonEncoder ) expected = get_fixture_content("scatter_options.json") for a, b in zip(actual_options.split("\n"), expected.split("\n")): eq_(a.strip(), b.strip())
def test_grid_left_right(): v1 = [5, 20, 36, 10, 75, 90] v2 = [10, 25, 8, 60, 20, 80] scatter = Scatter(width=1200) scatter.add("散点图示例", v1, v2, legend_pos="70%") es = EffectScatter() es.add("动态散点图示例", [11, 11, 15, 13, 12, 13, 10], [1, -2, 2, 5, 3, 2, 0], effect_scale=6, legend_pos="20%") grid = Grid() grid.add(scatter, grid_left="60%") grid.add(es, grid_right="60%") grid.render()
def test_overlap_es_scatter(): v1 = [10, 20, 30, 40, 50, 60] v2 = [30, 30, 30, 30, 30, 30] v3 = [50, 50, 50, 50, 50, 50] v4 = [10, 10, 10, 10, 10, 10] es = EffectScatter("Scatter-EffectScatter 示例") es.add("es", v1, v2) scatter = Scatter() scatter.add("scatter", v1, v3) es_1 = EffectScatter() es_1.add("es_1", v1, v4, symbol='pin', effect_scale=5) overlap = Overlap() overlap.add(es) overlap.add(scatter) overlap.add(es_1) overlap.render()
def test_scatter_xaxis_type_category(): scatter = Scatter("散点图示例") scatter.add("A", ["a", "b", "c", "d", "e", "f"], v2) scatter.add( "B", ["a", "b", "c", "d", "e", "f"], v1[::-1], xaxis_type="category" ) assert '"type": "category"' in scatter._repr_html_()
def test_scatter_default(): scatter = Scatter("散点图示例") scatter.add("A", v1, v2) scatter.add("B", v1[::-1], v2) html_content = scatter._repr_html_() assert '"type": "value"' in html_content assert '"type": "category"' not in html_content
def RGB(r,g,b): return "#{:02x}{:02x}{:02x}".format(r,g,b) def HEX(hexcode): return tuple(map(ord,hexcode[1:].decode('hex'))) # ---------------------------------------------------------------------------- # scatter from pyecharts import Scatter v1 = [10, 20, 30, 40, 50, 60] v2 = [10, 20, 30, 40, 50, 60] scatter = Scatter("散点图示例") scatter.add("A", v1, v2) scatter.add("B", v1[::-1], v2, is_visualmap=True, visual_type='size', visual_range_size=[20, 80]) scatter.render() # babble data = [ [28604, 77, 17096869], [31163, 77.4, 27662440], [1516, 68, 1154605773], [13670, 74.7, 10582082], [28599, 75, 4986705], [29476, 77.1, 56943299], [31476, 75.4, 78958237], [28666, 78.1, 254830],
def plot(self): u""" Do a echarts plot to view all the conditions :return: """ def custom_formatter(params): return params.value[3] + ": " + params.value[1] line = Line("", width="100%", height=800) attr = sorted([x["Name"] for x in self.data]) names = [x for x in self.name[5:] if x] data = [] for idx, i in enumerate(sorted(names)): if not i: continue tmp_value = [] extra_name = [] for x in self.data: tmp = self.meta.get(x["Name"], "NA") if isinstance(tmp, dict): tmp.get("tissue", "NA") extra_name.append("%s (%s)" % (x["Name"], tmp)) if x[i].endswith("%"): tmp_value.append(float(x[i].replace("%", ""))) else: tmp_value.append(int(x[i].replace(",", ""))) line.add( i, attr, tmp_value, is_datazoom_show=True, datazoom_type="both", datazoom_range=[0, 100], is_datazoom_extra_show=True, xaxis_rotate=30, ) boxplot = Boxplot(i, width="60%", height=800) boxplot.add(i, [i], boxplot.prepare_data([tmp_value]), is_legend_show=False, tooltip_formatter=custom_formatter, is_datazoom_extra_show=True, datazoom_extra_range=[0, 100]) scatter = Scatter(width="60%", height=800) scatter.add(i, extra_name, tmp_value, extra_data=extra_name, extra_name=extra_name, is_legend_show=False, tooltip_formatter=custom_formatter, is_datazoom_extra_show=True, datazoom_extra_range=[0, 100], xaxis_type="category", xaxis_rotate=45) grid = Grid( width="100%", height=600, ) grid.add(scatter, grid_right="25%", grid_bottom="25%") grid.add(boxplot, grid_left="80%", grid_bottom="25%") data.append(grid) grid = Page() grid.add(line) for i in data: grid.add(i) grid.render(self.output)
def test_scatter(): # scatter_0 v1 = [10, 20, 30, 40, 50, 60] v2 = [10, 20, 30, 40, 50, 60] scatter = Scatter("散点图示例") scatter.add("A", v1, v2) scatter.add("B", v1[::-1], v2) scatter.show_config() scatter.render() # scatter_0_1 scatter = Scatter("散点图示例") scatter.add("A", v1, v2) scatter.add("B", v1[::-1], v2, is_visualmap=True) scatter.show_config() scatter.render() # scatter_0_2 scatter = Scatter("散点图示例") scatter.add("A", v1, v2) scatter.add("B", v1[::-1], v2, is_visualmap=True, visual_type='size', visual_range_size=[20, 80]) scatter.show_config() scatter.render() # scatter_0_3 scatter = Scatter("散点图示例") scatter.add("A", ["a", "b", "c", "d", "e", "f"], v2) scatter.add("B", ["a", "b", "c", "d", "e", "f"], v1[::-1], xaxis_type="category") scatter.show_config() scatter.render() # scatter_1 scatter = Scatter("散点图示例") v1, v2 = scatter.draw("../images/pyecharts-0.png") scatter.add("pyecharts", v1, v2, is_random=True) scatter.show_config() scatter.render() # scatter_2 scatter = Scatter("散点图示例", width=800, height=480) v1, v2 = scatter.draw("../images/love.png") scatter.add("Love", v1, v2) scatter.render() # scatter_3 scatter = Scatter("散点图示例", width=1000, height=480) v1, v2 = scatter.draw("../images/cup.png") scatter.add("Cup", v1, v2) scatter.render() # scatter_4 scatter = Scatter("散点图示例", width=1000, height=480) v1, v2 = scatter.draw("../images/cup.png") scatter.add("Cup", v1, v2, label_color=["#000"]) scatter.render()
def test_scatter_draw_sexy_black_bra(): scatter = Scatter("散点图示例", width=1000, height=480) v1, v2 = scatter.draw("../images/cup.png") scatter.add("Cup", v1, v2, label_color=["#000"]) scatter.render()
# -*- coding: utf-8 -*- """ Created on Mon Dec 3 10:04:14 2018 @author: xuziyi create data of qc aiops 2018 """ import numpy as np from pyecharts import Scatter x = np.arange(100) y = np.arange(100) + np.random.normal(loc=0, scale=15, size=100) scatter =Scatter("相关性检验") scatter.add("相关性", x, y, yaxis_min=0,yaxis_max=101) scatter.show_config() scatter.render(r"C:\Users\Administrator\Desktop\相关性检验.html")
line = Line('分类数目') line.add( '数量', df_type.index.tolist(), df_type.values.tolist(), area_opacity=0.4, line_opacity=0.2, ) page.add(line) # print(as_order_datas.app_name.tolist()) datas = df.drop_duplicates(['app_name']).reset_index(drop=True) '''scatter下载量图''' scatter = Scatter('下载量图') scatter.add('下载量', datas.app_name.tolist(), datas.install_count.tolist(), is_visualmap=True, xaxis_type="category", visual_range=[10, 300000000], is_datazoom_extra_show=True, datazoom_extra_type="slider", datazoom_extra_range=[0, 10000], yaxis_min=10, ) page.add(scatter) page.render()
def test_scatter_draw_love(): scatter = Scatter("散点图示例", width=800, height=480) v1, v2 = scatter.draw("../images/love.png") scatter.add("Love", v1, v2) scatter.render()
#散点图适合表现大量样本的多个属性的分布规律。散点图的每个点表示一个样本,每个坐标维度表示一个属性。 from pyecharts import Scatter import pandas as pd dfboy = pd.DataFrame() dfboy['weight'] = [56,67,65,70,57,60,80,85,76,64] dfboy['height'] = [162,170,168,172,168,172,180,176,178,170] dfgirl = pd.DataFrame() dfgirl['weight'] = [50,62,60,70,57,45,62,65,70,56] dfgirl['height'] = [155,162,165,170,166,158,160,170,172,165] scatter = Scatter(title = "体格数据",width = 600,height = 420) scatter.add(name = "boy", x_axis = dfboy['weight'], y_axis = dfboy['height']) scatter.add(name = "girl", x_axis = dfgirl['weight'], y_axis = dfgirl['height'], yaxis_min = 130,yaxis_max = 200,xaxis_min = 30,xaxis_max = 100) scatter.render("result.散点图示范.html") scatter #当样本属性维度多于2个时,散点图可以使用点的颜色或大小等方式来表达更多属性维度。下面示范使用点的大小表示第3个维度。 def custom_formatter(params): return (params.value[3] + ':' + str(params.value[0]) +',' +str(params.value[1]) + ',' +str(params.value[2])) df = pd.DataFrame()
def overlap_charts(): page = Page() chart_init = { "width": WIDTH, "height": HEIGHT, } attr = ['A', 'B', 'C', 'D', 'E', 'F'] v1 = [10, 20, 30, 40, 50, 60] v2 = [38, 28, 58, 48, 78, 68] bar = Bar("折线图-柱状图叠加", **chart_init) bar.add("bar", attr, v1) line = Line() line.add("line", attr, v2) chart = Overlap() chart.add(bar) chart.add(line) page.add(chart) v1 = [10, 20, 30, 40, 50, 60] v2 = [30, 30, 30, 30, 30, 30] v3 = [50, 50, 50, 50, 50, 50] v4 = [10, 10, 10, 10, 10, 10] es = EffectScatter("散点图-动态散点图叠加", **chart_init) es.add("es", v1, v2) scatter = Scatter() scatter.add("scatter", v1, v3) es_1 = EffectScatter() es_1.add("es_1", v1, v4, symbol='pin', effect_scale=5) chart = Overlap() chart.add(es) chart.add(scatter) chart.add(es_1) page.add(chart) v1 = [[2320.26, 2320.26, 2287.3, 2362.94], [2300, 2291.3, 2288.26, 2308.38], [2295.35, 2346.5, 2295.35, 2345.92], [2347.22, 2358.98, 2337.35, 2363.8], [2360.75, 2382.48, 2347.89, 2383.76], [2383.43, 2385.42, 2371.23, 2391.82], [2377.41, 2419.02, 2369.57, 2421.15], [2425.92, 2428.15, 2417.58, 2440.38], [2411, 2433.13, 2403.3, 2437.42], [2432.68, 2334.48, 2427.7, 2441.73], [2430.69, 2418.53, 2394.22, 2433.89], [2416.62, 2432.4, 2414.4, 2443.03], [2441.91, 2421.56, 2418.43, 2444.8], [2420.26, 2382.91, 2373.53, 2427.07], [2383.49, 2397.18, 2370.61, 2397.94], [2378.82, 2325.95, 2309.17, 2378.82], [2322.94, 2314.16, 2308.76, 2330.88], [2320.62, 2325.82, 2315.01, 2338.78], [2313.74, 2293.34, 2289.89, 2340.71], [2297.77, 2313.22, 2292.03, 2324.63], [2322.32, 2365.59, 2308.92, 2366.16], [2364.54, 2359.51, 2330.86, 2369.65], [2332.08, 2273.4, 2259.25, 2333.54], [2274.81, 2326.31, 2270.1, 2328.14], [2333.61, 2347.18, 2321.6, 2351.44], [2340.44, 2324.29, 2304.27, 2352.02], [2326.42, 2318.61, 2314.59, 2333.67], [2314.68, 2310.59, 2296.58, 2320.96], [2309.16, 2286.6, 2264.83, 2333.29], [2282.17, 2263.97, 2253.25, 2286.33], [2255.77, 2270.28, 2253.31, 2276.22]] attr = ["2017/7/{}".format(i + 1) for i in range(31)] kline = Kline("K 线图-折线图叠加", **chart_init) kline.add("日K", attr, v1) line_1 = Line() line_1.add("line-1", attr, [random.randint(2400, 2500) for _ in range(31)]) line_2 = Line() line_2.add("line-2", attr, [random.randint(2400, 2500) for _ in range(31)]) chart = Overlap() chart.add(kline) chart.add(line_1) chart.add(line_2) page.add(chart) attr = ["{}月".format(i) for i in range(1, 13)] v1 = [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3] v2 = [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3] v3 = [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2] bar = Bar("多 Y 轴叠加", **chart_init) bar.add("蒸发量", attr, v1) bar.add("降水量", attr, v2, yaxis_formatter=" ml", yaxis_max=250) line = Line() line.add("平均温度", attr, v3, yaxis_formatter=" °C") chart = Overlap() chart.add(bar) chart.add(line, yaxis_index=1, is_add_yaxis=True) page.add(chart) return page
from pyecharts import Scatter '''散点图''' # 输入数据 v1 = [10, 20, 30, 40, 50, 60] v2 = [10, 20, 30, 40, 50, 60] # 设置标题 scatter = Scatter("示例") # 设置标签 scatter.add("A", v1, v2) scatter.add("B", v1[::-1], v2) # 生成html,打开即可 scatter.render()
def test_scatter(): # scatter_0 v1 = [10, 20, 30, 40, 50, 60] v2 = [10, 20, 30, 40, 50, 60] scatter = Scatter("散点图示例") scatter.add("A", v1, v2) scatter.add("B", v1[::-1], v2) scatter.show_config() scatter.render() # scatter_0_1 scatter = Scatter("散点图示例") scatter.add("A", v1, v2) scatter.add("B", v1[::-1], v2, is_visualmap=True) scatter.show_config() scatter.render() # scatter_0_2 scatter = Scatter("散点图示例") scatter.add("A", v1, v2) scatter.add("B", v1[::-1], v2, is_visualmap=True, visual_type='size', visual_range_size=[20, 80]) scatter.show_config() scatter.render() # scatter_1 scatter = Scatter("散点图示例") v1, v2 = scatter.draw("../images/pyecharts-0.png") scatter.add("pyecharts", v1, v2, is_random=True) scatter.show_config() scatter.render() # scatter_2 scatter = Scatter("散点图示例", width=800, height=480) v1, v2 = scatter.draw("../images/love.png") scatter.add("Love", v1, v2) scatter.render() # scatter_3 scatter = Scatter("散点图示例", width=1000, height=480) v1, v2 = scatter.draw("../images/cup.png") scatter.add("Cup", v1, v2) scatter.render() # scatter_4 scatter = Scatter("散点图示例", width=1000, height=480) v1, v2 = scatter.draw("../images/cup.png") scatter.add("Cup", v1, v2, label_color=["#000"]) scatter.render()
def test_grid(): # grid_0 attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] v1 = [5, 20, 36, 10, 75, 90] v2 = [10, 25, 8, 60, 20, 80] bar = Bar("柱状图示例", height=720, is_grid=True) bar.add("商家A", attr, v1, is_stack=True, grid_bottom="60%") bar.add("商家B", attr, v2, is_stack=True, grid_bottom="60%") line = Line("折线图示例", title_top="50%") attr = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] line.add("最高气温", attr, [11, 11, 15, 13, 12, 13, 10], mark_point=["max", "min"], mark_line=["average"]) line.add("最低气温", attr, [1, -2, 2, 5, 3, 2, 0], mark_point=["max", "min"], mark_line=["average"], legend_top="50%") bar.grid(line.get_series(), grid_top="60%") bar.show_config() bar.render() # grid_1 v1 = [5, 20, 36, 10, 75, 90] v2 = [10, 25, 8, 60, 20, 80] scatter = Scatter(width=1200, is_grid=True) scatter.add("散点图示例", v1, v2, grid_left="60%", legend_pos="70%") es = EffectScatter() es.add("动态散点图示例", [11, 11, 15, 13, 12, 13, 10], [1, -2, 2, 5, 3, 2, 0], effect_scale=6, legend_pos="20%") scatter.grid(es.get_series(), grid_right="60%") scatter.show_config() scatter.render() # grid_2 attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] v1 = [5, 20, 36, 10, 75, 90] v2 = [10, 25, 8, 60, 20, 80] bar = Bar("柱状图示例", height=720, width=1200, title_pos="65%", is_grid=True) bar.add("商家A", attr, v1, is_stack=True, grid_bottom="60%", grid_left="60%") bar.add("商家B", attr, v2, is_stack=True, grid_bottom="60%", grid_left="60%", legend_pos="80%") line = Line("折线图示例") attr = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] line.add("最高气温", attr, [11, 11, 15, 13, 12, 13, 10], mark_point=["max", "min"], mark_line=["average"]) line.add("最低气温", attr, [1, -2, 2, 5, 3, 2, 0], mark_point=["max", "min"], mark_line=["average"], legend_pos="20%") v1 = [5, 20, 36, 10, 75, 90] v2 = [10, 25, 8, 60, 20, 80] scatter = Scatter("散点图示例", title_top="50%", title_pos="65%") scatter.add("scatter", v1, v2, legend_top="50%", legend_pos="80%") es = EffectScatter("动态散点图示例", title_top="50%") es.add("es", [11, 11, 15, 13, 12, 13, 10], [1, -2, 2, 5, 3, 2, 0], effect_scale=6, legend_top="50%", legend_pos="20%") bar.grid(line.get_series(), grid_bottom="60%", grid_right="60%") bar.grid(scatter.get_series(), grid_top="60%", grid_left="60%") bar.grid(es.get_series(), grid_top="60%", grid_right="60%") bar.show_config() bar.render() # grid_3 line = Line("折线图示例", width=1200, is_grid=True) attr = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] line.add("最高气温", attr, [11, 11, 15, 13, 12, 13, 10], mark_point=["max", "min"], mark_line=["average"], grid_right="65%") line.add("最低气温", attr, [1, -2, 2, 5, 3, 2, 0], mark_point=["max", "min"], mark_line=["average"], legend_pos="20%") attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] v1 = [11, 12, 13, 10, 10, 10] pie = Pie("饼图示例", title_pos="45%") pie.add("", attr, v1, radius=[30, 55], legend_pos="65%", legend_orient='vertical') line.grid(pie.get_series(), grid_left="60%") line.show_config() line.render() # grid_4 line = Line("折线图示例", width=1200, is_grid=True) attr = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] line.add("最高气温", attr, [11, 11, 15, 13, 12, 13, 10], mark_point=["max", "min"], mark_line=["average"], grid_right="60%") line.add("最低气温", attr, [1, -2, 2, 5, 3, 2, 0], mark_point=["max", "min"], mark_line=["average"], legend_pos="20%", grid_right="60%") attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] value = [20, 40, 60, 80, 100, 120] v1 = [[2320.26, 2320.26, 2287.3, 2362.94], [2300, 2291.3, 2288.26, 2308.38], [2295.35, 2346.5, 2295.35, 2345.92], [2347.22, 2358.98, 2337.35, 2363.8], [2360.75, 2382.48, 2347.89, 2383.76], [2383.43, 2385.42, 2371.23, 2391.82], [2377.41, 2419.02, 2369.57, 2421.15], [2425.92, 2428.15, 2417.58, 2440.38], [2411, 2433.13, 2403.3, 2437.42], [2432.68, 2334.48, 2427.7, 2441.73], [2430.69, 2418.53, 2394.22, 2433.89], [2416.62, 2432.4, 2414.4, 2443.03], [2441.91, 2421.56, 2418.43, 2444.8], [2420.26, 2382.91, 2373.53, 2427.07], [2383.49, 2397.18, 2370.61, 2397.94], [2378.82, 2325.95, 2309.17, 2378.82], [2322.94, 2314.16, 2308.76, 2330.88], [2320.62, 2325.82, 2315.01, 2338.78], [2313.74, 2293.34, 2289.89, 2340.71], [2297.77, 2313.22, 2292.03, 2324.63], [2322.32, 2365.59, 2308.92, 2366.16], [2364.54, 2359.51, 2330.86, 2369.65], [2332.08, 2273.4, 2259.25, 2333.54], [2274.81, 2326.31, 2270.1, 2328.14], [2333.61, 2347.18, 2321.6, 2351.44], [2340.44, 2324.29, 2304.27, 2352.02], [2326.42, 2318.61, 2314.59, 2333.67], [2314.68, 2310.59, 2296.58, 2320.96], [2309.16, 2286.6, 2264.83, 2333.29], [2282.17, 2263.97, 2253.25, 2286.33], [2255.77, 2270.28, 2253.31, 2276.22]] kline = Kline("K 线图示例", title_pos="60%") kline.add("日K", ["2017/7/{}".format(i + 1) for i in range(31)], v1, legend_pos="80%") line.grid(kline.get_series(), grid_left="55%") line.show_config() line.render() # grid_5 import random x_axis = ["12a", "1a", "2a", "3a", "4a", "5a", "6a", "7a", "8a", "9a", "10a", "11a", "12p", "1p", "2p", "3p", "4p", "5p", "6p", "7p", "8p", "9p", "10p", "11p"] y_aixs = ["Saturday", "Friday", "Thursday", "Wednesday", "Tuesday", "Monday", "Sunday"] data = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)] heatmap = HeatMap("热力图示例", height=700, is_grid=True) heatmap.add("热力图直角坐标系", x_axis, y_aixs, data, is_visualmap=True, visual_top="45%", visual_text_color="#000", visual_orient='horizontal', grid_bottom="60%") attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] v1 = [5, 20, 36, 10, 75, 90] v2 = [10, 25, 8, 60, 20, 80] bar = Bar("柱状图示例", title_top="52%") bar.add("商家A", attr, v1, is_stack=True) bar.add("商家B", attr, v2, is_stack=True, legend_top="50%") heatmap.grid(bar.get_series(), grid_top="60%") heatmap.show_config() heatmap.render()
def test_scatter_draw__hot_red_bra(): scatter = Scatter("散点图示例", width=1000, height=480) v1, v2 = scatter.draw("../images/cup.png") scatter.add("Cup", v1, v2) scatter.render()
# 散点图1 from pyecharts import Scatter v1 = [10, 20, 30, 40, 50, 60] v2 = [10, 20, 30, 40, 50, 60] scatter = Scatter("散点图示例") scatter.add("A", v1, v2) scatter.add("B", v1[::-1], v2) #v1[::-1] 倒序 scatter.render("scatter01.html") # 散点图2 v1 = [10, 20, 30, 40, 50, 60] v2 = [10, 20, 30, 40, 50, 60] scatter = Scatter("散点图示例") scatter.add("A", v1, v2) scatter.add("B", v1[::-1], v2, is_visualmap=True, visual_type="size", visual_range_size=[20, 80]) #散点可见 scatter.render("scatter02.html")
attr, [11, 11, 15, 13, 12, 13, 10], mark_point=["max", "min"], mark_line=["average"], ) line.add( "最低气温", attr, [1, -2, 2, 5, 3, 2, 0], mark_point=["max", "min"], mark_line=["average"], legend_pos="20%", ) v1 = [5, 20, 36, 10, 75, 90] v2 = [10, 25, 8, 60, 20, 80] scatter = Scatter("散点图示例", title_top="50%", title_pos="65%") scatter.add("scatter", v1, v2, legend_top="50%", legend_pos="80%") es = EffectScatter("动态散点图示例", title_top="50%") es.add( "es", [11, 11, 15, 13, 12, 13, 10], [1, -2, 2, 5, 3, 2, 0], effect_scale=6, legend_top="50%", legend_pos="20%", ) grid = Grid() grid.add(bar, grid_bottom="60%", grid_left="60%") grid.add(line, grid_bottom="60%", grid_right="60%") grid.add(scatter, grid_top="60%", grid_left="60%")
""" 文件名: $NAME.py 日期: 25 作者: lvah 联系: [email protected] 代码描述: # 绘制电影时长和电影排名之间的关系 """ import pandas as pd import numpy as np from matplotlib import pyplot as plt filename = 'doc/special_top250.csv' data = pd.read_csv(filename) print(data.head()) # 获取电影时长 x_series = data.movie_duration # 获取电影排名 y_series = data.num from pyecharts import Scatter scatter = Scatter("散点图") scatter.add("", x_series, y_series) scatter.render()
def test_scatter_markline_coords(): scatter = Scatter("散点图示例") scatter.add("A", v1, v2, mark_line_coords=[[10, 10], [30, 30]]) assert '"coord": [' in scatter._repr_html_()
for i, element in enumerate(collections_detail.find({'boxoffice_num':{'$exists':True}})): if element['rating']['average'] == 0 or element['rate_quantity'] == '0' or not element['boxoffice_num']: continue for index, gen in enumerate(element['genres'], start=1): if gen not in other_list: break if index == len(element['genres']): gen = '其它' if not genre.get(gen): genre[gen] = {'title': [], 'rate': [], 'boxoffice': [], 'rate_quantity': []} genre[gen]['title'].append(element['title']) genre[gen]['rate'].append(element['rating']['average']) genre[gen]['boxoffice'].append(round(element['boxoffice_num']/10000,2)) genre[gen]['rate_quantity'].append(element['rate_quantity']) scatter = Scatter("电影评分-票房") other_setting = { 'legend_orient': 'vertical', 'legend_pos': 'right', 'legend_top': 'center', 'is_datazoom_show': True, 'datazoom_type': 'both', 'datazoom_range':[0,40], } total_num = 0 for i in genre: total_num += len(genre[i]['rate']) # print(i) # print(len(genre[i]['boxoffice']), genre[i]['boxoffice']) # print(len(genre[i]['rate']), genre[i]['rate']) # print(len(genre[i]['title']), genre[i]['title'])
def create_charts(): page = Page() attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] v1 = [5, 20, 36, 10, 75, 90] v2 = [10, 25, 8, 60, 20, 80] bar = Bar("柱状图示例", height=800, width=WIDTH) bar.add("商家A", attr, v1, is_stack=True) bar.add("商家B", attr, v2, is_stack=True) line = Line("折线图示例", title_top="50%") attr = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] line.add("最高气温", attr, [11, 11, 15, 13, 12, 13, 10], mark_point=["max", "min"], mark_line=["average"]) line.add("最低气温", attr, [1, -2, 2, 5, 3, 2, 0], mark_point=["max", "min"], mark_line=["average"], legend_top="50%") chart = Grid() chart.add(bar, grid_bottom="60%") chart.add(line, grid_top="60%") page.add(chart) v1 = [5, 20, 36, 10, 75, 90] v2 = [10, 25, 8, 60, 20, 80] scatter = Scatter("散点图示例", width=WIDTH, title_pos="55%") scatter.add("scatter", v1, v2, legend_pos="70%") es = EffectScatter("动态散点图示例") es.add("effectScatter", [11, 11, 15, 13, 12, 13, 10], [1, -2, 2, 5, 3, 2, 0], effect_scale=6, legend_pos="20%") chart = Grid() chart.add(scatter, grid_left="60%") chart.add(es, grid_right="60%") page.add(chart) attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] v1 = [5, 20, 36, 10, 75, 90] v2 = [10, 25, 8, 60, 20, 80] bar = Bar("柱状图示例", height=740, width=WIDTH, title_pos="65%") bar.add("商家A", attr, v1, is_stack=True) bar.add("商家B", attr, v2, is_stack=True, legend_pos="80%") line = Line("折线图示例") attr = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] line.add("最高气温", attr, [11, 11, 15, 13, 12, 13, 10], mark_point=["max", "min"], mark_line=["average"]) line.add("最低气温", attr, [1, -2, 2, 5, 3, 2, 0], mark_point=["max", "min"], mark_line=["average"], legend_pos="20%") v1 = [5, 20, 36, 10, 75, 90] v2 = [10, 25, 8, 60, 20, 80] scatter = Scatter("散点图示例", title_top="50%", title_pos="65%") scatter.add("scatter", v1, v2, legend_top="50%", legend_pos="80%") es = EffectScatter("动态散点图示例", title_top="50%") es.add("es", [11, 11, 15, 13, 12, 13, 10], [1, -2, 2, 5, 3, 2, 0], effect_scale=6, legend_top="50%", legend_pos="20%") chart = Grid() chart.add(bar, grid_bottom="60%", grid_left="60%") chart.add(line, grid_bottom="60%", grid_right="60%") chart.add(scatter, grid_top="60%", grid_left="60%") chart.add(es, grid_top="60%", grid_right="60%") page.add(chart) line = Line("折线图示例", width=WIDTH) attr = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] line.add("最高气温", attr, [11, 11, 15, 13, 12, 13, 10], mark_point=["max", "min"], mark_line=["average"]) line.add("最低气温", attr, [1, -2, 2, 5, 3, 2, 0], mark_point=["max", "min"], mark_line=["average"], legend_pos="20%") attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] v1 = [11, 12, 13, 10, 10, 10] pie = Pie("饼图示例", title_pos="55%") pie.add("", attr, v1, radius=[45, 65], center=[70, 50], legend_pos="85%", legend_orient='vertical') chart = Grid() chart.add(line, grid_right="55%") chart.add(pie, grid_left="60%") page.add(chart) line = Line("折线图示例", width=WIDTH) attr = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] line.add("最高气温", attr, [11, 11, 15, 13, 12, 13, 10], mark_point=["max", "min"], mark_line=["average"]) line.add("最低气温", attr, [1, -2, 2, 5, 3, 2, 0], mark_point=["max", "min"], mark_line=["average"], legend_pos="20%") v1 = [[2320.26, 2320.26, 2287.3, 2362.94], [2300, 2291.3, 2288.26, 2308.38], [2295.35, 2346.5, 2295.35, 2345.92], [2347.22, 2358.98, 2337.35, 2363.8], [2360.75, 2382.48, 2347.89, 2383.76], [2383.43, 2385.42, 2371.23, 2391.82], [2377.41, 2419.02, 2369.57, 2421.15], [2425.92, 2428.15, 2417.58, 2440.38], [2411, 2433.13, 2403.3, 2437.42], [2432.68, 2334.48, 2427.7, 2441.73], [2430.69, 2418.53, 2394.22, 2433.89], [2416.62, 2432.4, 2414.4, 2443.03], [2441.91, 2421.56, 2418.43, 2444.8], [2420.26, 2382.91, 2373.53, 2427.07], [2383.49, 2397.18, 2370.61, 2397.94], [2378.82, 2325.95, 2309.17, 2378.82], [2322.94, 2314.16, 2308.76, 2330.88], [2320.62, 2325.82, 2315.01, 2338.78], [2313.74, 2293.34, 2289.89, 2340.71], [2297.77, 2313.22, 2292.03, 2324.63], [2322.32, 2365.59, 2308.92, 2366.16], [2364.54, 2359.51, 2330.86, 2369.65], [2332.08, 2273.4, 2259.25, 2333.54], [2274.81, 2326.31, 2270.1, 2328.14], [2333.61, 2347.18, 2321.6, 2351.44], [2340.44, 2324.29, 2304.27, 2352.02], [2326.42, 2318.61, 2314.59, 2333.67], [2314.68, 2310.59, 2296.58, 2320.96], [2309.16, 2286.6, 2264.83, 2333.29], [2282.17, 2263.97, 2253.25, 2286.33], [2255.77, 2270.28, 2253.31, 2276.22]] kline = Kline("K 线图示例", title_pos="60%") kline.add("日K", ["2017/7/{}".format(i + 1) for i in range(31)], v1, legend_pos="80%") chart = Grid() chart.add(line, grid_right="60%") chart.add(kline, grid_left="55%") page.add(chart) data = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)] heatmap = HeatMap("热力图示例", width=WIDTH, height=700) heatmap.add("热力图直角坐标系", X_TIME, Y_WEEK, data, is_visualmap=True, visual_top="45%", visual_text_color="#000", visual_orient='horizontal') attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] v1 = [5, 20, 36, 10, 75, 90] v2 = [10, 25, 8, 60, 20, 80] bar = Bar("柱状图示例", title_top="52%") bar.add("商家A", attr, v1, is_stack=True) bar.add("商家B", attr, v2, is_stack=True, legend_top="50%") chart = Grid() chart.add(heatmap, grid_bottom="60%") chart.add(bar, grid_top="60%") page.add(chart) line = Line("折线图示例", width=WIDTH, height=700) attr = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] line.add("最高气温", attr, [11, 11, 15, 13, 12, 13, 10], mark_point=["max", "min"], mark_line=["average"]) line.add("最低气温", attr, [1, -2, 2, 5, 3, 2, 0], mark_point=["max", "min"], legend_top="50%", mark_line=["average"], is_datazoom_show=True, datazoom_xaxis_index=[0, 1]) v1 = [[2320.26, 2320.26, 2287.3, 2362.94], [2300, 2291.3, 2288.26, 2308.38], [2295.35, 2346.5, 2295.35, 2345.92], [2347.22, 2358.98, 2337.35, 2363.8], [2360.75, 2382.48, 2347.89, 2383.76], [2383.43, 2385.42, 2371.23, 2391.82], [2377.41, 2419.02, 2369.57, 2421.15], [2425.92, 2428.15, 2417.58, 2440.38], [2411, 2433.13, 2403.3, 2437.42], [2432.68, 2334.48, 2427.7, 2441.73], [2430.69, 2418.53, 2394.22, 2433.89], [2416.62, 2432.4, 2414.4, 2443.03], [2441.91, 2421.56, 2418.43, 2444.8], [2420.26, 2382.91, 2373.53, 2427.07], [2383.49, 2397.18, 2370.61, 2397.94], [2378.82, 2325.95, 2309.17, 2378.82], [2322.94, 2314.16, 2308.76, 2330.88], [2320.62, 2325.82, 2315.01, 2338.78], [2313.74, 2293.34, 2289.89, 2340.71], [2297.77, 2313.22, 2292.03, 2324.63], [2322.32, 2365.59, 2308.92, 2366.16], [2364.54, 2359.51, 2330.86, 2369.65], [2332.08, 2273.4, 2259.25, 2333.54], [2274.81, 2326.31, 2270.1, 2328.14], [2333.61, 2347.18, 2321.6, 2351.44], [2340.44, 2324.29, 2304.27, 2352.02], [2326.42, 2318.61, 2314.59, 2333.67], [2314.68, 2310.59, 2296.58, 2320.96], [2309.16, 2286.6, 2264.83, 2333.29], [2282.17, 2263.97, 2253.25, 2286.33], [2255.77, 2270.28, 2253.31, 2276.22]] kline = Kline("K 线图示例", title_top="50%") kline.add("日K", ["2017/7/{}".format(i + 1) for i in range(31)], v1, is_datazoom_show=True) chart = Grid() chart.add(line, grid_top="60%") chart.add(kline, grid_bottom="60%") page.add(chart) attr = ['{}天'.format(i) for i in range(1, 31)] line_top = Line("折线图示例", width=WIDTH, height=700) line_top.add("最高气温", attr, [random.randint(20, 100) for i in range(30)], mark_point=["max", "min"], mark_line=["average"], legend_pos='38%') line_bottom = Line() line_bottom.add("最低气温", attr, [random.randint(20, 100) for i in range(30)], mark_point=["max", "min"], mark_line=["average"], is_yaxis_inverse=True, xaxis_pos='top') chart = Grid() chart.add(line_top, grid_bottom='60%') chart.add(line_bottom, grid_top='50%') page.add(chart) attr = ["{}月".format(i) for i in range(1, 13)] v1 = [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3] v2 = [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3] v3 = [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2] bar = Bar("Overlap+Grid 示例", title_pos="40%", width=1100, height=600) bar.add("蒸发量", attr, v1) bar.add("降水量", attr, v2, yaxis_formatter=" ml", yaxis_max=250, legend_pos="85%", legend_orient="vertical", legend_top="45%") line = Line() line.add("平均温度", attr, v3, yaxis_formatter=" °C") overlap = Overlap() overlap.add(bar) overlap.add(line, is_add_yaxis=True, yaxis_index=1) chart = Grid() chart.add(overlap, grid_right='20%') page.add(chart) return page
from pyecharts import Scatter # v1 = [10, 20, 30, 40, 50, 60] # v2 = [10, 20, 30, 40, 50, 60] # scatter = Scatter("散点图示例") # scatter.add("A", v1, v2) # scatter.add("B", v1[::-1], v2) # scatter.show_config() # scatter.render(r"Scatter(散点图).html") scatter = Scatter("散点图示例", width=1000, height=480) v1, v2 = scatter.draw("cup.png") scatter.add("Cup", v1, v2, label_color='#000') scatter.render(r"Scatter(散点图).html")
def test_scatter_draw_pyecharts(): scatter = Scatter("散点图示例") v1, v2 = scatter.draw("../images/pyecharts-0.png") scatter.add("pyecharts", v1, v2, is_random=True) scatter.render()
def test_scatter_visualmap(): # visual type 'color' v1 = [10, 20, 30, 40, 50, 60] v2 = [10, 20, 30, 40, 50, 60] scatter = Scatter("散点图示例") scatter.add("A", v1, v2) scatter.add("B", v1[::-1], v2, is_visualmap=True) scatter.render() # visual type 'size' scatter = Scatter("散点图示例") # scatter.add("A", v1, v2) scatter.add("B", v1[::-1], v2, is_visualmap=True, visual_type='size', visual_range_size=[20, 80]) scatter.render()
def bivar(data,feature,t_type,target=None,draw_type='line',bins=20,tree_depth=4,woe = None,d_reorder=False,cut='none',cut_way='auto',\ custom_bin=[],cut_num=None,cut_start=None,fill_na=-99999,text_print=True,save=None,path='./'): # data is dataframe # feature is feature name # target is your target name, should be binary integer # t_type has two selection, 'c' or 'd', 'c' means continue, 'd' means discreate # draw_type has line and scatter # bins means you can choose how many bins to cut by yourself # tree_depth is only working for decision tree binning # woe is only working for woe binning # cut has three selection, 'none','qcut','cut','F-D' only for numerical col # d_reorder will sort categorical values and reorder it # example bivar(df,'feature2','is_over','c') # make sure feature and target in your dataframe data=data;feature=feature;target=target;t_type=t_type X = data[feature] if target != None: Y = data[target] if fill_na != -99999: X = X.fillna(fill_na) missing_exist = X.isnull().any() #fillna value if it has. if cut == 'none': if (target != None) & (missing_exist == True): # Data preprocessing temp_df = data[[feature,target]].fillna('missing').copy() feature_a = temp_df[[feature,target]].groupby(feature).size() feature_b = temp_df[[feature,target]].groupby(feature).sum() feature_final = pd.concat([feature_a,feature_b],axis=1) feature_final.rename(columns = {0:'total'},inplace=True) elif (target != None) & (missing_exist == False): # Data preprocessing temp_df = data[[feature,target]].fillna(fill_na).copy() feature_a = temp_df[[feature,target]].groupby(feature).size() feature_b = temp_df[[feature,target]].groupby(feature).sum() feature_final = pd.concat([feature_a,feature_b],axis=1) feature_final.rename(columns = {0:'total'},inplace=True) elif (target == None) & (missing_exist == False): # Data preprocessing temp_df = data[[feature]].fillna(fill_na).copy() feature_a = temp_df[[feature]].groupby(feature).size() feature_b = temp_df[[feature]].groupby(feature).sum() feature_final = pd.concat([feature_a,feature_b],axis=1) feature_final.rename(columns = {0:'total'},inplace=True) else: # Data preprocessing temp_df = data[[feature]].fillna('missing').copy() feature_a = temp_df[[feature]].groupby(feature).size() feature_b = temp_df[[feature]].groupby(feature).sum() feature_final = pd.concat([feature_a,feature_b],axis=1) feature_final.rename(columns = {0:'total'},inplace=True) # check if has missing value in dataframe # Data preprocessing with missing value if missing_exist: if (t_type == 'c'): missing_df = feature_final.loc['missing':'missing'] feature_final = feature_final[feature_final.index != 'missing'] index_list = list(pd.cut(feature_final.index, bins = bins)) feature_final.index=index_list feature_final.index.name=feature feature_final = feature_final.groupby(feature_final.index).sum() feature_final = feature_final.reindex(list(OrderedSet(index_list))) if target != None: feature_final[target+'_rate'] = feature_final[target]/feature_final['total'] elif target != None: feature_final[target+'_rate'] = feature_final[target]/feature_final['total'] # Data preprocessing w/o missing value else: if (t_type == 'c'): index_list = list(pd.cut(feature_final.index, bins = bins)) feature_final.index=index_list feature_final.index.name=feature feature_final = feature_final.groupby(feature_final.index).sum() feature_final = feature_final.reindex(list(OrderedSet(index_list))) feature_final.index = list(OrderedSet(index_list)) if target != None: feature_final[target+'_rate'] = feature_final[target]/feature_final['total'] elif target != None: feature_final[target+'_rate'] = feature_final[target]/feature_final['total'] feature_final.reset_index(inplace=True) feature_final.rename(columns={'index':feature},inplace=True) if cut == 'custom': if (target != None) & (missing_exist == True): # Data preprocessing temp_df = data[[feature,target]].fillna('missing').copy() feature_a = temp_df[[feature,target]].groupby(feature).size() feature_b = temp_df[[feature,target]].groupby(feature).sum() feature_final = pd.concat([feature_a,feature_b],axis=1) feature_final.rename(columns = {0:'total'},inplace=True) elif (target != None) & (missing_exist == False): # Data preprocessing temp_df = data[[feature,target]].fillna(fill_na).copy() feature_a = temp_df[[feature,target]].groupby(feature).size() feature_b = temp_df[[feature,target]].groupby(feature).sum() feature_final = pd.concat([feature_a,feature_b],axis=1) feature_final.rename(columns = {0:'total'},inplace=True) elif (target == None) & (missing_exist == False): # Data preprocessing temp_df = data[[feature]].fillna(fill_na).copy() feature_a = temp_df[[feature]].groupby(feature).size() feature_b = temp_df[[feature]].groupby(feature).sum() feature_final = pd.concat([feature_a,feature_b],axis=1) feature_final.rename(columns = {0:'total'},inplace=True) else: # Data preprocessing temp_df = data[[feature]].fillna('missing').copy() feature_a = temp_df[[feature]].groupby(feature).size() feature_b = temp_df[[feature]].groupby(feature).sum() feature_final = pd.concat([feature_a,feature_b],axis=1) feature_final.rename(columns = {0:'total'},inplace=True) # check if has missing value in dataframe # Data preprocessing with missing value if missing_exist: if ((t_type == 'c') & (len(temp_df[feature].unique())>=bins)): missing_df = feature_final.loc['missing':'missing'] feature_final = feature_final[feature_final.index != 'missing'] index_list = list(pd.cut(feature_final.index, bins = custom_bin)) feature_final.index=index_list feature_final.index.name=feature feature_final = feature_final.groupby(feature_final.index).sum() feature_final = feature_final.reindex(list(OrderedSet(index_list))) if target != None: feature_final[target+'_rate'] = feature_final[target]/feature_final['total'] elif target != None: feature_final[target+'_rate'] = feature_final[target]/feature_final['total'] # Data preprocessing w/o missing value else: if ((t_type == 'c') & (len(temp_df[feature].unique())>=bins)): index_list = list(pd.cut(feature_final.index, bins = custom_bin)) feature_final.index=index_list feature_final.index.name=feature feature_final = feature_final.groupby(feature_final.index).sum() feature_final = feature_final.reindex(list(OrderedSet(index_list))) feature_final.index = list(OrderedSet(index_list)) if target != None: feature_final[target+'_rate'] = feature_final[target]/feature_final['total'] elif target != None: feature_final[target+'_rate'] = feature_final[target]/feature_final['total'] feature_final.reset_index(inplace=True) feature_final.rename(columns={'index':feature},inplace=True) if ((t_type == 'c') & (cut == 'F-D') & (target != None)): if missing_exist == True: temp_df = data[[feature,target]].fillna('missing').copy() elif missing_exist != True: temp_df = data[[feature,target]].fillna(fill_na).copy() # Data preprocessing feature_a = temp_df[[feature,target]].groupby(feature).size() feature_b = temp_df[[feature,target]].groupby(feature).sum() feature_final = pd.concat([feature_a,feature_b],axis=1) feature_final.rename(columns = {0:'total'},inplace=True) # check if has missing value in dataframe # Data preprocessing with missing value if missing_exist: if ((t_type == 'c')): missing_df = feature_final.loc['missing':'missing'] feature_final = feature_final[feature_final.index != 'missing'] missing_temp_df = temp_df[temp_df[feature]=='missing'] missing_temp_df = pd.DataFrame(missing_temp_df.groupby(feature).size()) missing_temp_df.rename(columns={0:target},inplace=True) missing_over_size = temp_df[temp_df[feature]=='missing'][temp_df[target]==1].shape[0] missing_temp_df[target]['missing'] = missing_over_size non_missing_temp_df = temp_df[temp_df[feature]!='missing'] non_missing_temp_df.index = non_missing_temp_df[feature] Q1 = non_missing_temp_df[feature].astype(float).describe()['25%'] Q3 = non_missing_temp_df[feature].astype(float).describe()['75%'] min_value = non_missing_temp_df.index.min() max_value = non_missing_temp_df.index.max() bins_list = [min_value-0.0001] temp_value = min_value F_D = 2*(Q3-Q1)/math.pow(non_missing_temp_df.shape[0],1/3) if F_D == 0: print('since too many values in one bin, so we start use cut method!') print('='*60) try: result = draw.bivar(data=data, feature=feature,target=target,bins=bins,cut='none',t_type=t_type,cut_num=cut_num,cut_start=cut_start) return result except: return draw.bivar(data=data, feature=feature,target=target,bins=bins,cut='none',t_type=t_type) while temp_value < max_value: temp_value += F_D bins_list.append(temp_value) index_list = list(pd.cut(feature_final.index, bins = bins_list)) feature_final.index=index_list feature_final.index.name=feature feature_final = feature_final.groupby(feature_final.index).sum() feature_final = feature_final.reindex(list(OrderedSet(index_list))) # Data preprocessing w/o missing value else: if ((t_type == 'c')): non_missing_temp_df = temp_df.copy() non_missing_temp_df.index = non_missing_temp_df[feature] Q1 = non_missing_temp_df[feature].astype(float).describe()['25%'] Q3 = non_missing_temp_df[feature].astype(float).describe()['75%'] min_value = non_missing_temp_df.index.min() max_value = non_missing_temp_df.index.max() bins_list = [min_value-0.0001] temp_value = min_value F_D = 2*(Q3-Q1)/math.pow(non_missing_temp_df.shape[0],1/3) if F_D == 0: print('since too many values in one bin, so we start use cut method!') print('='*60) try: result = draw.bivar(data=data, feature=feature,target=target,bins=bins,cut='none',t_type=t_type,cut_num=cut_num,cut_start=cut_start) return result except: return draw.bivar(data=data, feature=feature,target=target,bins=bins,cut='none',t_type=t_type) while temp_value < max_value: temp_value += F_D bins_list.append(temp_value) index_list = list(pd.cut(feature_final.index, bins = bins_list)) feature_final.index=index_list feature_final.index.name=feature feature_final = feature_final.groupby(feature_final.index).sum() feature_final = feature_final.reindex(list(OrderedSet(index_list))) feature_final[target+'_rate'] = feature_final[target]/feature_final['total'] feature_final.reset_index(inplace=True) feature_final.rename(columns={'index':feature},inplace=True) feature_final[target+'_rate'] = feature_final[target]/feature_final['total'] if ((t_type == 'c') & (cut == 'qcut') & (target != None)): try: feature_final = draw.numerical_binning_qcut_for_draw(draw.numerical_binning_qcut(X,Y,n=bins,cut_way=cut_way,text_print=text_print),\ X,Y,missing_exist=missing_exist) except: print('since too many values in one bin, so we start use cut method!') print('='*60) return draw.bivar(data=data, feature=feature,target=target,bins=bins,cut='none',t_type=t_type) elif ((t_type == 'c') & (cut == 'cut')& (target != None)): try: feature_final = draw.numerical_binning_qcut_for_draw(draw.numerical_binning_cut(X,Y,n=bins,cut_way=cut_way,text_print=True),\ X,Y,missing_exist=missing_exist) except: print('since too many values in one bin, so we start use cut method!') print('='*60) print('start using basic bins cut method.') return draw.bivar(data=data, feature=feature,target=target,bins=bins,cut='none',t_type=t_type) elif ((t_type == 'c') & (cut == 'dtree')& (target != None)): try: feature_final = draw.DecisionTreeBinning(data,feature,target,max_depth=tree_depth,missing_exist=False) except: print('since too many values in one bin, so we start use cut method!') print('='*60) print('start using basic bins cut method.') return draw.bivar(data=data, feature=feature,target=target,bins=bins,cut='none',t_type=t_type) elif((t_type == 'c') & (cut == 'woe')& (target != None)): try: feature_final = draw.woe_binning_cut_for_draw(X,Y,woe) except: print('since too many values in one bin, so we start use cut method!') print('='*60) print('start using basic bins cut method.') return draw.bivar(data=data, feature=feature,target=target,bins=bins,cut='none',t_type=t_type) if (cut_num != None) & (cut_start == 'start') & (t_type == 'c'): try: new_left = feature_final[feature_final['total']<cut_num][feature].iloc[0].left new_right = feature_final[feature_final['total']>cut_num][feature].iloc[0].left except: print('data cannot be cut from head.') print('='*60) print('start using basic bins cut method.') return draw.bivar(data=data, feature=feature,target=target,bins=bins,cut='none',t_type=t_type) new_total = feature_final.iloc[:feature_final[feature_final['total']>=cut_num].index[0]].total.sum() new_is_over = feature_final.iloc[:feature_final[feature_final['total']>=cut_num].index[0]][target].sum() new_tmp_df = pd.DataFrame({feature:[pd.Interval(left=new_left, right=new_right)],'total':[new_total],\ target:[new_is_over],target+'_rate':[new_is_over/new_total]}) feature_final = pd.concat([new_tmp_df,feature_final.iloc[feature_final[feature_final['total']>cut_num].index[0]:]],\ axis=0).reset_index() feature_final = feature_final.drop('index',axis=1) elif (cut_num != None) & (cut_start == 'tail') & (t_type == 'c'): try: new_left = feature_final[feature_final['total']>=cut_num][feature].iloc[-1].right new_right = feature_final[feature_final['total']<cut_num][feature].iloc[-1].right except: print('data cannot be cut from tail.') print('='*60) print('start using basic bins cut method.') return draw.bivar(data=data, feature=feature,target=target,bins=bins,cut='none',t_type=t_type) new_total = feature_final.iloc[feature_final[feature_final['total']>=cut_num].index[-1]+1:].total.sum() new_is_over = feature_final.iloc[feature_final[feature_final['total']>=cut_num].index[-1]+1:][target].sum() new_tmp_df = pd.DataFrame({feature:[pd.Interval(left=new_left, right=new_right)],'total':[new_total],\ target:[new_is_over],target+'_rate':[new_is_over/new_total]}) feature_final = pd.concat([feature_final.iloc[:feature_final[feature_final['total']>cut_num].index[-1]+1],new_tmp_df],\ axis=0).reset_index() feature_final = feature_final.drop('index',axis=1) elif (cut_num != None) & (cut_start == 'both') & (t_type == 'c'): try: new_left = feature_final[feature_final['total']<cut_num][feature].iloc[0].left new_right = feature_final[feature_final['total']>cut_num][feature].iloc[0].left except: print('data cannot be cut from head.') print('='*60) print('start using basic bins cut method.') return draw.bivar(data=data, feature=feature,target=target,bins=bins,cut='none',t_type=t_type) new_total = feature_final.iloc[:feature_final[feature_final['total']>=cut_num].index[0]].total.sum() new_is_over = feature_final.iloc[:feature_final[feature_final['total']>=cut_num].index[0]][target].sum() new_tmp_df = pd.DataFrame({feature:[pd.Interval(left=new_left, right=new_right)],'total':[new_total],\ target:[new_is_over],target+'_rate':[new_is_over/new_total]}) feature_final = pd.concat([new_tmp_df,feature_final.iloc[feature_final[feature_final['total']>cut_num].index[0]:]],\ axis=0).reset_index() feature_final = feature_final.drop('index',axis=1) try: new_left = feature_final[feature_final['total']>=cut_num][feature].iloc[-1].right new_right = feature_final[feature_final['total']<cut_num][feature].iloc[-1].right except: print('data cannot be cut from head.') print('='*60) print('start using basic bins cut method.') return draw.bivar(data=data, feature=feature,target=target,bins=bins,cut='none',t_type=t_type) new_total = feature_final.iloc[feature_final[feature_final['total']>=cut_num].index[-1]+1:].total.sum() new_is_over = feature_final.iloc[feature_final[feature_final['total']>=cut_num].index[-1]+1:][target].sum() new_tmp_df = pd.DataFrame({feature:[pd.Interval(left=new_left, right=new_right)],'total':[new_total],\ target:[new_is_over],target+'_rate':[new_is_over/new_total]}) feature_final = pd.concat([feature_final.iloc[:feature_final[feature_final['total']>cut_num].index[-1]+1],new_tmp_df],\ axis=0).reset_index() feature_final = feature_final.drop('index',axis=1) if (missing_exist) & (cut in ['none','F-D','custom']) & (t_type == 'c'): missing_df[target+'_rate'] = missing_df[target]/missing_df['total'] missing_df = missing_df.reset_index() feature_final = pd.concat([feature_final,missing_df],axis=0) feature_final = feature_final.reset_index() feature_final = feature_final.drop('index',axis=1) if type(feature_final)!=pd.core.frame.DataFrame: return 'There are less than 1 values in {}.'.format(feature) if d_reorder: feature_final.sort_values(['total',target],ascending=[False,False],inplace=True) #Drawing bivar graph attr = [] for c in feature_final[feature]: attr.append(str(c)) if target != None: v1 = list(feature_final[target].values) v2 = [x - y for x, y in zip(feature_final['total'].tolist(), feature_final[target].tolist())] v3 = list(np.round(feature_final[target+'_rate'].values*100,2)) yaxis_max = np.max(v3) bar = Bar(width=1200, height=600,title=feature,background_color='#ffffff') bar.add(target+"数量", attr, v1,is_stack=True,is_datazoom_show=True,datazoom_type='both',datazoom_range=[0,100], label_color=['#00FF7F','#0081FF','#FF007C'],is_visualmap=True, visual_type='size',visual_range=[0,yaxis_max], visual_range_size=[10,10],is_yaxislabel_align=False,visual_dimension=1,tooltip_text_color='#000000', label_emphasis_textcolor='#000000',is_more_utils=True) bar.add('non-'+target+"数量",attr,v2,is_stack=True,label_emphasis_textcolor='#000000') overlap = Overlap() overlap.add(bar) if draw_type=='line': line = Line() line.add(target, attr, v3, yaxis_formatter="%", yaxis_min=0,yaxis_max=1.2*yaxis_max,label_emphasis_textcolor='#000000',line_width=3) overlap.add(line, yaxis_index=1, is_add_yaxis=True) if draw_type=='scatter': scatter = Scatter() scatter.add(target, attr, v3, yaxis_formatter="%", yaxis_min=0,yaxis_max=1.2*yaxis_max,label_emphasis_textcolor='#000000') overlap.add(scatter, yaxis_index=1, is_add_yaxis=True) else: bar = Bar(width=1200, height=600,title=feature,background_color='#ffffff') v1 = list(feature_final['total'].values) bar.add("数量", attr, v1,is_stack=True,is_datazoom_show=True,datazoom_type='both',datazoom_range=[0,100], label_color=['#0081FF','#FF007C'],is_visualmap=True, visual_type='size', visual_range_size=[10,10],is_yaxislabel_align=False,visual_dimension=1,tooltip_text_color='#000000', label_emphasis_textcolor='#000000',is_more_utils=True) overlap = Overlap() overlap.add(bar) if save==None: return overlap elif save!= None: return overlap.render(path=path+'{}.{}'.format(feature,save))
def test_scatter_draw_picture(): # draw pyecharts scatter = Scatter("散点图示例") v1, v2 = scatter.draw("../images/pyecharts-0.png") scatter.add("pyecharts", v1, v2, is_random=True) scatter.render() # draw love scatter = Scatter("散点图示例", width=800, height=480) v1, v2 = scatter.draw("../images/love.png") scatter.add("Love", v1, v2) scatter.render() # draw a hot red bra scatter = Scatter("散点图示例", width=1000, height=480) v1, v2 = scatter.draw("../images/cup.png") scatter.add("Cup", v1, v2) scatter.render() # draw a sexy black bra scatter = Scatter("散点图示例", width=1000, height=480) v1, v2 = scatter.draw("../images/cup.png") scatter.add("Cup", v1, v2, label_color=["#000"]) scatter.render()
help='only report R&D Center department', action='store_true') args = parser.parse_args() rd_departments_list = [ '嵌入部', '系统部', '软件部', '项目管理部', '硬件部', '结构部', '测试部', '研发中心' ] page = Page() if args.only_rd: subtitle = '创世科技研发中心2017年度(2016.12.25-2017.12.24)统计数据' else: subtitle = '创世科技2017年度(2016.12.25-2017.12.24)统计数据' later_charts = Scatter(title='迟到', subtitle=subtitle, width=1920, height=1080) overtime_charts = Scatter(title='加班', subtitle=subtitle, width=1920, height=1080) remedies_bar = Bar(title='补签', subtitle=subtitle, width=1920, height=1080) sheet = xlrd.open_workbook(args.inputfile).sheets()[0] name_list = [] remedies_count_list = [] for index in range(1, sheet.nrows): items = sheet.row(index) name = items[0].value
def create_charts(): page = Page() style = Style(width=WIDTH, height=HEIGHT) v1 = [10, 20, 30, 40, 50, 60] v2 = [10, 20, 30, 40, 50, 60] chart = Scatter("散点图-双数值轴", **style.init_style) chart.add("A", v1, v2) chart.add("B", v1[::-1], v2) page.add(chart) chart = Scatter("散点图-x轴类目轴", **style.init_style) chart.add("A", ["a", "b", "c", "d", "e", "f"], v2) chart.add("B", ["a", "b", "c", "d", "e", "f"], v1[::-1], xaxis_type="category") page.add(chart) v1 = [10, 20, 30, 40, 50, 60] v2 = [10, 20, 30, 40, 50, 60] chart = Scatter("散点图-视觉通道(颜色)", **style.init_style) chart.add("A", v1, v2) chart.add("B", v1[::-1], v2, is_visualmap=True) page.add(chart) chart = Scatter("散点图-视觉通道(大小)", **style.init_style) chart.add("A", v1, v2) chart.add("B", v1[::-1], v2, is_visualmap=True, visual_type='size', visual_range_size=[20, 80]) page.add(chart) data = [[28604, 77, 17096869], [31163, 77.4, 27662440], [1516, 68, 1154605773], [13670, 74.7, 10582082], [28599, 75, 4986705], [29476, 77.1, 56943299], [31476, 75.4, 78958237], [28666, 78.1, 254830], [1777, 57.7, 870601776], [29550, 79.1, 122249285], [2076, 67.9, 20194354], [12087, 72, 42972254], [24021, 75.4, 3397534], [43296, 76.8, 4240375], [10088, 70.8, 38195258], [19349, 69.6, 147568552], [10670, 67.3, 53994605], [26424, 75.7, 57110117], [37062, 75.4, 252847810]] x_lst = [v[0] for v in data] y_lst = [v[1] for v in data] extra_data = [v[2] for v in data] chart = Scatter("散点图-视觉通道(第三维度数据)", **style.init_style) chart.add("scatter", x_lst, y_lst, extra_data=extra_data, is_visualmap=True, visual_dimension=2, visual_orient='horizontal', visual_type='size', visual_range=[254830, 1154605773], visual_text_color='#000') page.add(chart) return page
pie = Pie("服装占比",title_pos='left',width=800) pie.add("", attr, v1, is_label_show=True,radius=[30,75]) pie.render('pie.html') #label_text_color字体颜色 attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "鞋", "袜子"] v1 = [110, 112, 133, 100, 108, 120] pie = Pie("饼图-服装占比", title_pos='center') pie.add("服饰",attr,v1,radius=[40, 75], label_text_color='red',is_label_show=True,legend_orient="vertical",legend_pos="left") pie.render('pie.html') # # # # # #散点图 from pyecharts import Scatter iris = pd.read_csv('iris.csv') scatter = Scatter('鸢尾花花瓣宽度和长度关系图') scatter.add("setosa", iris.Petal_Width[iris.Species=='setosa'], iris.Petal_Length[iris.Species=='setosa'], symbol_size = 8, mark_point_symbol='arrow') scatter.add("versicolor", iris.Petal_Width[iris.Species=='versicolor'], iris.Petal_Length[iris.Species=='versicolor'], symbol_size =10) scatter.add("virginica", iris.Petal_Width[iris.Species=='virginica'], iris.Petal_Length[iris.Species=='virginica'], symbol_size =12) scatter.render('iris.html') # # # # # #折线图 # 读取数据 GDP_data = pd.read_excel('国民经济核算季度数据.xlsx') # 选择部分数据 # mark_point_symbol 指定标签的形状 # mark_point_textcolor 指定标签的字体颜色 # mark_point_symbolsize 指定标记标记的大小
def test_page_grid_timeline_overlap(): # Grid v1 = [5, 20, 36, 10, 75, 90] v2 = [10, 25, 8, 60, 20, 80] bar = Bar("柱状图示例", height=720, width=1200, title_pos="65%") bar.add("商家A", CLOTHES, v1, is_stack=True) bar.add("商家B", CLOTHES, v2, is_stack=True, legend_pos="80%") line = Line("折线图示例") line.add( "最高气温", WEEK, [11, 11, 15, 13, 12, 13, 10], mark_point=["max", "min"], mark_line=["average"], ) line.add( "最低气温", WEEK, [1, -2, 2, 5, 3, 2, 0], mark_point=["max", "min"], mark_line=["average"], legend_pos="20%", ) v1 = [5, 20, 36, 10, 75, 90] v2 = [10, 25, 8, 60, 20, 80] scatter = Scatter("散点图示例", title_top="50%", title_pos="65%") scatter.add("scatter", v1, v2, legend_top="50%", legend_pos="80%") es = EffectScatter("动态散点图示例", title_top="50%") es.add( "es", [11, 11, 15, 13, 12, 13, 10], [1, -2, 2, 5, 3, 2, 0], effect_scale=6, legend_top="50%", legend_pos="20%", ) grid = Grid() grid.add(bar, grid_bottom="60%", grid_left="60%") grid.add(line, grid_bottom="60%", grid_right="60%") grid.add(scatter, grid_top="60%", grid_left="60%") grid.add(es, grid_top="60%", grid_right="60%") # Timeline bar_1 = Bar("2012 年销量", "数据纯属虚构") bar_1.add("春季", CLOTHES, [randint(10, 100) for _ in range(6)]) bar_1.add("夏季", CLOTHES, [randint(10, 100) for _ in range(6)]) bar_1.add("秋季", CLOTHES, [randint(10, 100) for _ in range(6)]) bar_1.add("冬季", CLOTHES, [randint(10, 100) for _ in range(6)]) bar_2 = Bar("2013 年销量", "数据纯属虚构") bar_2.add("春季", CLOTHES, [randint(10, 100) for _ in range(6)]) bar_2.add("夏季", CLOTHES, [randint(10, 100) for _ in range(6)]) bar_2.add("秋季", CLOTHES, [randint(10, 100) for _ in range(6)]) bar_2.add("冬季", CLOTHES, [randint(10, 100) for _ in range(6)]) bar_3 = Bar("2014 年销量", "数据纯属虚构") bar_3.add("春季", CLOTHES, [randint(10, 100) for _ in range(6)]) bar_3.add("夏季", CLOTHES, [randint(10, 100) for _ in range(6)]) bar_3.add("秋季", CLOTHES, [randint(10, 100) for _ in range(6)]) bar_3.add("冬季", CLOTHES, [randint(10, 100) for _ in range(6)]) bar_4 = Bar("2015 年销量", "数据纯属虚构") bar_4.add("春季", CLOTHES, [randint(10, 100) for _ in range(6)]) bar_4.add("夏季", CLOTHES, [randint(10, 100) for _ in range(6)]) bar_4.add("秋季", CLOTHES, [randint(10, 100) for _ in range(6)]) bar_4.add("冬季", CLOTHES, [randint(10, 100) for _ in range(6)]) bar_5 = Bar("2016 年销量", "数据纯属虚构", height=720, width=1200) bar_5.add("春季", CLOTHES, [randint(10, 100) for _ in range(6)]) bar_5.add("夏季", CLOTHES, [randint(10, 100) for _ in range(6)]) bar_5.add("秋季", CLOTHES, [randint(10, 100) for _ in range(6)]) bar_5.add( "冬季", CLOTHES, [randint(10, 100) for _ in range(6)], is_legend_show=True, ) timeline = Timeline(is_auto_play=True, timeline_bottom=0) timeline.add(bar_1, "2012 年") timeline.add(bar_2, "2013 年") timeline.add(bar_3, "2014 年") timeline.add(bar_4, "2015 年") timeline.add(bar_5, "2016 年") # Overlap attr = ["{}月".format(i) for i in range(1, 13)] v1 = [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3] v2 = [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3] v3 = [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2] bar = Bar(height=720, width=1200) bar.add("蒸发量", attr, v1) bar.add("降水量", attr, v2, yaxis_formatter=" ml", yaxis_max=250) line = Line() line.add("平均温度", attr, v3, yaxis_formatter=" °C") overlap = Overlap() overlap.add(bar) overlap.add(line, yaxis_index=1, is_add_yaxis=True) page = Page() page.add(grid) page.add(timeline) page.add(overlap) page.render()
def scatter(bq,output): page=Page() page.height=900 c=0 fc=14 #fontsize if len(bq.keys())>4: fig=plt.figure(figsize=(24,10)) else: fig=plt.figure(figsize=(24,5)) #fig.subplots_adjust(wspace=0.5,hspace=0.5) #iden the fig shape #2 col situation if len(bq.keys())%2==0 and len(bq.keys())%3!=0 and len(bq.keys())%4!=0: all_col=2 elif len(bq.keys())%3==0: all_col=3 elif len(bq.keys())%4==0: all_col=4 #iden shape end if int(len(bq.keys())%all_col)==0: row=int(len(bq.keys())/all_col) else: row=int(len(bq.keys())/all_col)+1 for key1 in bq: cp=[] #completeness ct=[] #contamination a=sorted(bq[key1]['completeness'].items(),key=lambda x:x[1],reverse=True) #sort keys according to their values #c=0 for e in a: cp.append(bq[key1]['completeness'][e[0]]) ct.append(bq[key1]['contamination'][e[0]]) c+=1 x=range(1,len(cp)+1) ##### literature figure part ##### #fig.subplots_adjust(wspace=0.3,hspace=0.6) if max(ct)>100: ax1=fig.add_subplot(row,all_col,c) ax1.set_xlabel(key1,color='black',fontsize=fc) ax1.set_ylabel('Completeness',fontsize=fc+1) ax1.scatter(x,cp,color='black',label='Completeness') ax2=ax1.twinx() ax2.scatter(x,ct,color='red',label='Contamination') ax2.set_ylabel('Contamination',color='black',fontsize=fc+1) ax2.tick_params(axis='y',colors='red') ax2.spines['right'].set_color('red') if max(ct)%10==0: max_10_ct=max(ct) else: max_10_ct=(10-max(ct)%10)+max(ct) ax2.axis([min(x),max(x),0,max_10_ct]) ax1.axis([min(x),max(x),0,max_10_ct]) #ax2.axis([min(x),max(x),0,max(cp)]) else: ax1=fig.add_subplot(row,all_col,c) ax1.set_xlabel(key1,color='black',fontsize=fc) ax1.set_ylabel('Completeness',fontsize=fc+1) ax1.scatter(x,cp,color='black',label='Completeness') ax2=ax1.twinx() ax2.scatter(x,ct,color='red',label='Contamination') ax2.set_ylabel('Contamination',color='black',fontsize=fc+1) ax2.tick_params(axis='y',colors='red') ax2.spines['right'].set_color('red') ax2.axis([min(x),max(x),0,100]) #plt.savefig(output+'/3.scatter.png') ##### literature figure end ##### #x=range(1,len(cp)+1) #grid=Grid() #overlap = Overlap() #scatter = Scatter() #scatter2 = Scatter(key1) if c%2==0: #2 if c%4!=0: overlap2 = Overlap() scatter3 = Scatter() scatter3.add("Completeness",x,cp,yaxis_label_textcolor='red',yaxis_line_color='red',xaxis_type='category',xaxis_max=max(x),legend_pos="40%",legend_orient="vertical") scatter4 = Scatter(key1,title_pos="25%") scatter4.add('Contamination',x,ct,xaxis_type='category',xaxis_max=max(x),legend_pos="40%",legend_orient="vertical") overlap2.add(scatter4) overlap2.add(scatter3) #4 else: overlap4 = Overlap() scatter7 = Scatter() scatter7.add("Completeness",x,cp,yaxis_label_textcolor='red',yaxis_line_color='red',xaxis_type='category',xaxis_max=max(x),legend_pos="90%",legend_orient="vertical") scatter8 = Scatter(key1,title_pos="75%") scatter8.add('Contamination',x,ct,xaxis_type='category',xaxis_max=max(x),legend_pos="90%",legend_orient="vertical") overlap4.add(scatter8) overlap4.add(scatter7) #overlap2.render(output+'/3.scatter_o2.html') else: #1 if (c+1)%4!=0: overlap = Overlap() scatter = Scatter() scatter.add("Completeness",x,cp,yaxis_label_textcolor='red',yaxis_line_color='red',xaxis_type='category',xaxis_max=max(x),legend_pos="15%",legend_orient="vertical") scatter2 = Scatter(key1) scatter2.add('Contamination',x,ct,xaxis_type='category',xaxis_max=max(x),legend_pos="15%",legend_orient="vertical") overlap.add(scatter2) overlap.add(scatter) #3 else: overlap3 = Overlap() scatter5= Scatter() scatter5.add("Completeness",x,cp,yaxis_label_textcolor='red',yaxis_line_color='red',xaxis_type='category',xaxis_max=max(x),legend_pos="65%",legend_orient="vertical") scatter6= Scatter(key1,title_pos="50%") scatter6.add('Contamination',x,ct,xaxis_type='category',xaxis_max=max(x),legend_pos="65%",legend_orient="vertical") overlap3.add(scatter6) overlap3.add(scatter5) #overlap.render(output+'/3.scatter_o1.html') ''' if c==len(bq.keys()) and c%2!=0: grid=Grid() grid.add(overlap,grid_left="60%") page.add(grid) continue ''' if c%2==0: #2 if c%4!=0: grid.add(overlap2,grid_left="30%",grid_width=250) #4 else: grid.add(overlap4,grid_left="80%",grid_width=200) page.add(grid) #grid.render(output+'/3.scatter.html') #page.render(output+'/3.scatter.html') else: #3 if (c+1)%4==0: grid.add(overlap3, grid_left="55%",grid_width=250) #1 else: grid=Grid() grid.width=1500 grid.height=300 grid.add(overlap,grid_left="5%",grid_width=250) #grid.render(output+'/3.scatter.html') #page.render(output+'/3.scatter.html') #exit() if c==len(bq.keys()) and c%4!=0: page.add(grid) page.render(output+'/3_scatter.html') #fig.subplots_adjust(wspace=0.3,hspace=0.3) #ax1.legend(loc='center', bbox_to_anchor=(-1.3, 3.8),ncol=5,fontsize=20) fig.subplots_adjust(wspace=0.5,hspace=0.4) plt.savefig(output+'/3.scatter.png')
def test_scatter_xaxis_type(): # xAxis type 'value' v1 = [10, 20, 30, 40, 50, 60] v2 = [10, 20, 30, 40, 50, 60] scatter = Scatter("散点图示例") scatter.add("A", v1, v2) scatter.add("B", v1[::-1], v2) assert '"type": "value"' in scatter._repr_html_() assert '"type": "category"' not in scatter._repr_html_() scatter.render() # xAxis type 'category' scatter = Scatter("散点图示例") scatter.add("A", ["a", "b", "c", "d", "e", "f"], v2) scatter.add("B", ["a", "b", "c", "d", "e", "f"], v1[::-1], xaxis_type="category") assert '"type": "category"' in scatter._repr_html_() scatter.render()
def test_scatter_visualmap_default(): scatter = Scatter("散点图示例") scatter.add("A", v1, v2) scatter.add("B", v1[::-1], v2, is_visualmap=True) scatter.render()
def test_scatter_draw_love(): scatter = Scatter("", width=800, height=480) scatter.draw("../images/love.png")
def test_scatter_draw__hot_red_bra(): scatter = Scatter("", width=1000, height=480) scatter.draw("../images/cup.png")
''' 散点图 add ''' from pyecharts import Scatter x1 = [20, 13, 43, 53, 34, 89] y1 = [10, 32, 43, 13, 54, 87] x2 = [12, 24, 41, 33, 54, 19] y2 = [13, 39, 31, 43, 24, 37] scatter = Scatter('散点图') scatter.add('A', x1, y1) scatter.add('B', x2, y2, is_visualmap=True, visual_type='size', visual_range_size=[10, 80]) scatter.render('a.html')