def line3d_base(): data = [] for t in range(0, 25000): _t = t / 1000 x = (1 + 0.25 * math.cos(75 * _t)) * math.cos(_t) y = (1 + 0.25 * math.cos(75 * _t)) * math.sin(_t) z = _t + 2.0 * math.sin(75 * _t) data.append([x, y, z]) line3d = Line3D() line3d.add( "", data, xaxis3d_opts=opts.Axis3DOpts(type_="value"), yaxis3d_opts=opts.Axis3DOpts(type_="value"), grid3d_opts=opts.Grid3DOpts(width=100, depth=100), ) line3d.set_global_opts( title_opts=opts.TitleOpts(title="Line3D-基本示例"), visualmap_opts=opts.VisualMapOpts(max_=30) ) line3d.render("./line3d_base.html")
def line3d_base() -> Line3D: data = [] for t in range(0, 25000): _t = t / 1000 x = (1 + 0.25 * math.cos(75 * _t)) * math.cos(_t) y = (1 + 0.25 * math.cos(75 * _t)) * math.sin(_t) z = _t + 2.0 * math.sin(75 * _t) data.append([x, y, z]) c = (Line3D().add( "", data, xaxis3d_opts=opts.Axis3DOpts(Faker.clock, type_="value"), yaxis3d_opts=opts.Axis3DOpts(Faker.week_en, type_="value"), grid3d_opts=opts.Grid3DOpts(width=100, height=100, depth=100), ).set_global_opts( visualmap_opts=opts.VisualMapOpts(max_=30, min_=0, range_color=Faker.visual_color), title_opts=opts.TitleOpts(title="Line3D-基本示例"), )) return c
def scatter3d_base() -> Scatter3D: # data = [ # [random.randint(0, 100), random.randint(0, 200), random.randint(0, 100)] # for _ in range(10000) # ] data, max_rel = read_as_info( '..\\000LocalData\\as_compare\\as_core_map_data_integrate20191203.csv') c = (Scatter3D(init_opts=opts.InitOpts( width="1080px", height="1080px", page_title="全球互联网网络3D散点图", theme=ThemeType.ROMANTIC)).add( "随机散点", data, grid3d_opts=opts.Grid3DOpts(width=300, height=160, depth=300, rotate_speed=5, is_rotate=True, rotate_sensitivity=2), xaxis3d_opts=opts.Axis3DOpts(type_="value", name="经度", min_=180.0, max_=-180.0), yaxis3d_opts=opts.Axis3DOpts(type_="value", name="维度", min_=-180.0, max_=180.0), zaxis3d_opts=opts.Axis3DOpts(type_="value", name="连通度", min_=0, max_=max_rel + 1), itemstyle_opts=opts.ItemStyleOpts()).set_global_opts( title_opts=opts.TitleOpts("全球互联网网络3D散点图"), visualmap_opts=opts.VisualMapOpts( range_color=Faker.visual_color), )) print(data) print(Faker.visual_color) return c
def surface3D_flower() -> Surface3D: def surface3d_data(): for t0 in range(-30, 30, 1): y = t0 / 10 for t1 in range(-30, 30, 1): x = t1 / 10 z = math.sin(x * x + y * y) * x / 3.14 yield [x, y, z] c = (Surface3D().add( "", list(surface3d_data()), xaxis3d_opts=opts.Axis3DOpts(type_="value"), yaxis3d_opts=opts.Axis3DOpts(type_="value"), grid3d_opts=opts.Grid3DOpts(width=100, height=100, depth=100), ).set_global_opts( title_opts=opts.TitleOpts(title="Surface3D-曲面波图"), visualmap_opts=opts.VisualMapOpts(max_=1, min_=-1, range_color=Faker.visual_color), )) return c
def test_surface3d_base(): def surface3d_data(): for t0 in range(-60, 60, 1): y = t0 / 60 for t1 in range(-60, 60, 1): x = t1 / 60 if math.fabs(x) < 0.1 and math.fabs(y) < 0.1: z = "-" else: z = math.sin(x * math.pi) * math.sin(y * math.pi) yield [x, y, z] c = (Surface3D().add( "", list(surface3d_data()), xaxis3d_opts=opts.Axis3DOpts(type_="value"), yaxis3d_opts=opts.Axis3DOpts(type_="value"), grid3d_opts=opts.Grid3DOpts(width=100, height=100, depth=100), ).set_global_opts(visualmap_opts=opts.VisualMapOpts( max_=3, min_=-3, range_color=Faker.visual_color))) eq_(c.theme, "white") eq_(c.renderer, "canvas") c.render()
def bar_3d_fun(): # 三维数据,定义 x、y 长度,z 数值随机 data = [(i, j, random.randint(1, 20)) for i in range(7) for j in range(10)] print(len(data), data) Bar3D().add( # 添加 x、y、z 轴数据,并设置属性 series_name="", data=data, xaxis3d_opts=opts.Axis3DOpts(Faker.choose(), type_="category"), yaxis3d_opts=opts.Axis3DOpts(Faker.choose(), type_="category"), zaxis3d_opts=opts.Axis3DOpts(Faker.values(), type_="value"), # 添加旋转效果 grid3d_opts=opts.Grid3DOpts(width=100, depth=100, rotate_speed=150, is_rotate=True), ).set_global_opts( # 设置图表属性 # 视觉配置 visualmap_opts=opts.VisualMapOpts(max_=20), title_opts=opts.TitleOpts(title="主标题", subtitle="副标题")).render( # 设置输出路径 path="D:/temp/pyecharts_bar3d.html")
yield [x, y, z] data_xyz = list(surface3d_data()) ( Surface3D(init_opts=opts.InitOpts(width="1600px", height="800px")) .add( series_name="", shading="color", data=list(surface3d_data()), xaxis3d_opts=opts.Axis3DOpts(type_="value"), yaxis3d_opts=opts.Axis3DOpts(type_="value"), grid3d_opts=opts.Grid3DOpts(width=100, height=40, depth=100), ) .set_global_opts( visualmap_opts=opts.VisualMapOpts( dimension=2, max_=1, min_=-1, range_color=[ "#313695", "#4575b4", "#74add1", "#abd9e9", "#e0f3f8", "#ffffbf", "#fee090", "#fdae61",
] x_axis = [ "12am", "1am", "2am", "3am", "4am", "5am", "6am", "7am", "8am", "9am", "10am", "11am", "12pm", "1pm", "2pm", "3pm", "4pm", "5pm", "6pm", "7pm", "8pm", "9pm", "10pm", "11pm" ] y_axis = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"] bar3d = (Bar3D().add('', data=data, shading='realistic', xaxis3d_opts=opts.Axis3DOpts(x_axis, type_='category'), yaxis3d_opts=opts.Axis3DOpts(y_axis, type_='category'), zaxis3d_opts=opts.Axis3DOpts(type_='value'), grid3d_opts=opts.Grid3DOpts( width=140, depth=84, is_rotate=True)).set_global_opts( title_opts=opts.TitleOpts('一周不同时间段的骑行需求'), visualmap_opts=opts.VisualMapOpts( is_show=True, max_=600, is_piecewise=False, range_color=Faker.visual_color))) bar3d.render() # 天气维度(不同天气状况) def set_weather(val): if val == 1: return 'Good' elif val == 2: return 'Normal'
_t = t / 1000 x = (1 + 0.25 * math.cos(75 * _t)) * math.cos(_t) y = (1 + 0.25 * math.cos(75 * _t)) * math.sin(_t) z = _t + 2.0 * math.sin(75 * _t) data.append([x, y, z]) # In[131]: c = ( Line3D().add( "", data, xaxis3d_opts=opts.Axis3DOpts(Faker.clock, type_="value"), yaxis3d_opts=opts.Axis3DOpts(Faker.week_en, type_="value"), grid3d_opts=opts.Grid3DOpts(width=100, depth=100, rotate_speed=150, is_rotate=True), ).set_global_opts( visualmap_opts=opts.VisualMapOpts(max_=30, min_=0, range_color=Faker.visual_color), title_opts=opts.TitleOpts(title="Line3D-旋转的弹簧"), ) #.render("line3d_autorotate.html") ) c.render_notebook() # In[137]: # vis import pyecharts.options as opts
def to_map_china(self, area, variate, value, update_time): # 显示标识栏的颜色分段表示 pieces = [ { "max": 99999999, "min": 10000, "label": '>10000', "color": '#E64546' }, { "max": 9999, "min": 1000, "label": '1000-9999', "color": '#F57567' }, { "max": 999, "min": 100, "label": '100-999', "color": '#FF9985' }, { "max": 99, "min": 10, "label": '10-99', "color": '#FFC4B3' }, { "max": 9, "min": 1, "label": '1-9', "color": '#FFE5DB' }, { "max": 0, "min": 0, "label": '0', "color": '#FFFFFF' }, ] data_tip = [ '累计确诊', '死亡', '治愈', '现有确诊', '累计确诊增量', '死亡增量', '治愈增量', '现有确诊增量' ] data_area = [ '西藏', '澳门', '青海', '台湾', '香港', '贵州', '吉林', '新疆', '宁夏', '内蒙古', '甘肃', '天津', '山西', '辽宁', '黑龙江', '海南', '河北', '陕西', '云南', '广西', '福建', '上海', '北京', '江苏', '四川', '山东', '江西', '重庆', '安徽', '湖南', '河南', '广东', '浙江', '湖北' ] # 绘制地图 map = ( Map(init_opts=opts.InitOpts(width='800px', height='600px')) # 初始化配置项,设置地图大小 .add("累计确诊人数", [ list(z) for z in zip(area, variate) ], "china").set_global_opts( title_opts=opts.TitleOpts(title="中国疫情地图分布", subtitle='截止%s 中国疫情分布情况' % (update_time), pos_left='center', pos_top='30px'), #TitleOpts:标题设置 visualmap_opts=opts.VisualMapOpts(max_=200, is_piecewise=True, pieces=pieces), # # max_:设置 visualMapPiecewise 所有取值区间中的最大值,is_piecewise设置数据是否连续,split_number设置为分段数,pices可自定义数据分段 ).render("中国疫情地图.html") # 展示提取后的效果 ) # 绘制地理坐标图 geo = ( Geo().add_schema(maptype="china") #地图类型 .add( "累计确诊人数", [list(z) for z in zip(area, variate)], type_=ChartType.EFFECT_SCATTER, ).set_series_opts(label_opts=opts.LabelOpts( is_show=False)) # label_opts:标签配置项设置,is_show:是否显示视觉映射配置 .set_global_opts( title_opts=opts.TitleOpts(title="中国疫情地图分布", subtitle='截止%s 中国疫情分布情况' % (update_time), pos_left='center', pos_top='30px'), visualmap_opts=opts.VisualMapOpts(max_=200, is_piecewise=True, pieces=pieces), ).render("中国疫情新增情况.html")) # 绘制折线图 line = ( Line().add_xaxis(area) #添加x轴数值 .add_yaxis("累计确诊人数", variate) #添加y轴名称、数值 .add_yaxis("累计治愈人数", value).set_global_opts( title_opts=opts.TitleOpts(title="国内疫情情况"), xaxis_opts=opts.AxisOpts(axislabel_opts={ "interval": "0", "rotate": "45" }), #设置x轴数值分割间隔为0,且旋转45° yaxis_opts=opts.AxisOpts( type_='log', splitline_opts=opts.SplitLineOpts(is_show=True), is_scale=True, ) #设置y轴数据类型为“log”,凸显分割线,不会强制包含零刻度 ).set_series_opts(label_opts=opts.LabelOpts(is_show=False)) #标签设置项 .render("全国累计趋势折线图.html")) # 绘制柱状图 bar = ( Bar().add_xaxis(area).add_yaxis( "累计确诊人数", variate, stack='stack1') #若y轴设置项“stack”为同一个值,则显示为堆叠型柱状,反之,成分散型 # .add_yaxis("累计治愈人数",value,stack='stack2') # .add_yaxis("累计死亡人数", value, stack='stack1') .add_yaxis("累计治愈人数", value, stack='stack1').set_global_opts( title_opts=opts.TitleOpts(title="全国累计确诊治愈情况"), xaxis_opts=opts.AxisOpts(axislabel_opts={ "interval": "0", "rotate": "45" }), yaxis_opts=opts.AxisOpts( type_='log', splitline_opts=opts.SplitLineOpts(is_show=True), is_scale=True, )).set_series_opts(label_opts=opts.LabelOpts( is_show=False)).render("全国累计确诊治愈.html")) # 绘制饼状图 pie = ( Pie().add( "", [list(z) for z in zip(area, variate)], radius=["40%", "75%", "log"], #设置圆环大小及数据类型 ).set_global_opts( title_opts=opts.TitleOpts(title="国内疫情情况"), legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"), #图例配置项:图例列表的布局朝向为水平,图例组件离容器上侧的距离为15%,图例组件离容器左侧的距离为相对于容器高宽的20% ).set_series_opts( label_opts=opts.LabelOpts(formatter="{b}: {c}")) #设置标签形式 .render("全国累计趋势饼状图.html")) # 绘制3D柱状图 bar3d = ( Bar3D().add("全国指标", data, label_opts=opts.LabelOpts(position='left'), yaxis3d_opts=opts.Axis3DOpts(data_area), xaxis3d_opts=opts.Axis3DOpts( data_tip, type_="category", max_=8, interval=0, ), zaxis3d_opts=opts.Axis3DOpts(type_="value", min_=0), grid3d_opts=opts.Grid3DOpts(width="600", height="100", is_rotate=True) #设置三维笛卡尔坐标系组件在三维场景中的宽度,高度,以及是否自动旋转 ).set_global_opts( visualmap_opts=opts.VisualMapOpts( is_piecewise=True, pieces=pieces), title_opts=opts.TitleOpts(title="疫情指标"), ).render("疫情指标.html"))
bar3d.add("", data, shading="lambert", xaxis3d_opts=opts.Axis3DOpts(data=x_axis, type_="category", name="Date", name_gap=50, interval=1), yaxis3d_opts=opts.Axis3DOpts(data=y_axis, type_="category", name="Hours", name_gap=80, interval=1), zaxis3d_opts=opts.Axis3DOpts(type_="value", name="Incidence"), grid3d_opts=opts.Grid3DOpts(width=100, height=150, depth=300)) if n == 0: max_v = 2 elif n == 1: max_v = 0.5 elif n == 2: max_v = 20 elif n == 3: max_v = 20 bar3d.set_global_opts(title_opts=opts.TitleOpts(title=p, pos_right='50%', pos_top='10%'), visualmap_opts=opts.VisualMapOpts( max_=max_v, range_color=range_color, is_calculable=False,
def surface3d_base() -> Surface3D: def surface3d_data(): for t0 in range(-60, 60, 1): y = t0 / 60 for t1 in range(-60, 60, 1): x = t1 / 60 if math.fabs(x) < 0.1 and math.fabs(y) < 0.1: z = "-" else: z = math.sin(x * math.pi) * math.sin(y * math.pi) yield [x, y, z] c = ( Surface3D() .add( "", list(surface3d_data()), xaxis3d_opts=opts.Axis3DOpts(type_="value"), yaxis3d_opts=opts.Axis3DOpts(type_="value"), grid3d_opts=opts.Grid3DOpts(width=100, height=100, depth=100), ) .set_global_opts(import math from example.commons import Faker from pyecharts import options as opts from pyecharts.charts import Surface3D def surface3d_base() -> Surface3D: def surface3d_data(): for t0 in range(-60, 60, 1): y = t0 / 60 for t1 in range(-60, 60, 1): x = t1 / 60 if math.fabs(x) < 0.1 and math.fabs(y) < 0.1: z = "-" else: z = math.sin(x * math.pi) * math.sin(y * math.pi) yield [x, y, z] c = ( Surface3D() .add( "", list(surface3d_data()), xaxis3d_opts=opts.Axis3DOpts(type_="value"), yaxis3d_opts=opts.Axis3DOpts(type_="value"), grid3d_opts=opts.Grid3DOpts(width=100, height=100, depth=100), ) .set_global_opts( title_opts=opts.TitleOpts(title="Surface3D-基本示例"), visualmap_opts=opts.VisualMapOpts( max_=3, min_=-3, range_color=Faker.visual_color ), ) ) return c title_opts=opts.TitleOpts(title="Surface3D-基本示例"), visualmap_opts=opts.VisualMapOpts( max_=3, min_=-3, range_color=Faker.visual_color ), ) )
def plot_performance_overview(dict_results, plot_tymod, p): if plot_tymod == "pic": figs = {} for k, v in dict_results.items(): v = v.unstack() series = v.index.get_level_values(0).unique() if isinstance( v.index, pd.MultiIndex) else [k] c = 3 r = np.ceil(len(series) / c) fig = plt.figure(figsize=(8, 6)) plt.subplots_adjust(hspace=0.3) for i, _s in enumerate(series): _data = v.loc[_s] if isinstance(v.index, pd.MultiIndex) else v X, Y = np.meshgrid(_data.index, _data.columns, indexing='ij') Z = _data.values pos = int(r * 100 + c * 10 + (i + 1)) ax = fig.add_subplot(pos, projection='3d') ax.plot_surface(X, Y, Z, color='b') ax.set_title("%s" % _s, fontdict={"size": 8}) figs[k] = fig fig.savefig("%s_%s.png" % (p, k)) return figs elif plot_tymod == 'dyn-3d': results = {} for k, perf in dict_results.items(): perf = perf.unstack() c = (Surface3D(init_opts=opts.InitOpts( width="1000px", height="500px")).set_global_opts( title_opts=opts.TitleOpts(title="绩效-曲面波图(%s)" % k), visualmap_opts=opts.VisualMapOpts( max_=perf.values.max(), min_=perf.values.min(), range_color=Faker.visual_color), toolbox_opts=opts.ToolboxOpts(is_show=True), )) series = perf.index.get_level_values(0).unique() if isinstance( perf.index, pd.MultiIndex) else [k] for i, _s in enumerate(series): _data = perf.loc[_s] if isinstance(perf.index, pd.MultiIndex) else perf X, Y = np.meshgrid(_data.index, _data.columns) d = list( zip(X.flatten().astype(str), Y.flatten().astype(str), _data.values.T.flatten().astype(np.float))) c = c.add( series_name=str(_s), shading="color", data=d, xaxis3d_opts=opts.Axis3DOpts(type_="category"), yaxis3d_opts=opts.Axis3DOpts(type_="category"), grid3d_opts=opts.Grid3DOpts(width=100, height=50, depth=100), ) results[k] = c tab = Tab() for k, v in results.items(): tab.add(v, k) tab.render("%s.html" % p) elif plot_tymod == "dyn-hm": tab = Tab() for k, v in dict_results.items(): v = v.unstack() _tl = _timeline(v, name=k) tab.add(_tl, k) tab.render("%s.html" % p)
def scatter3d_base() -> Scatter3D: data = [ [random.randint(-10000, 10000), random.randint(-10000, 10000), random.randint(-10000, 10000)] for _ in range(100) ] # 求莫比乌斯环数据 # v_mobius = np.linspace(-1.0, 1.0, num=20, endpoint=True) # u_mobius = np.linspace(0, 2 * np.pi, num=20, endpoint=True) # x_3d = (1. + v_mobius/2. * np.cos(u_mobius/2.)) * np.cos(u_mobius) # print(x_3d) # y_3d = (1. + v_mobius/2. * np.cos(u_mobius/2.)) * np.sin(u_mobius) # print(y_3d) # z_3d = v_mobius/2. * np.sin(v_mobius/2.) # print(z_3d) # data = [[0, 0, 0], [100, 100, 100], [100, -100, -100]] # print(data) # data = [] # temp_list = [] # for iter_cnt in range(0, len(list(x_3d))): # temp_list.append(x_3d[iter_cnt]) # temp_list.append(y_3d[iter_cnt]) # temp_list.append(x_3d[iter_cnt]) # data.append(temp_list) # temp_list = [] print(data) # data, max_rel = read_as_info('..\\000LocalData\\as_compare\\as_core_map_data_integrate20191203.csv') assert isinstance( Scatter3D(init_opts=opts.InitOpts(width="1920px", height="960px", page_title="3D散点图", theme=ThemeType.DARK)) .add("3D散点可视化", data, grid3d_opts=opts.Grid3DOpts(width=100, height=100, depth=100, rotate_speed=5, is_rotate=False, rotate_sensitivity=2), xaxis3d_opts=opts.Axis3DOpts(type_="value", name="x", textstyle_opts=opts.TextStyleOpts(color="white")), yaxis3d_opts=opts.Axis3DOpts(type_="value", name="y", textstyle_opts=opts.TextStyleOpts(color="white")), zaxis3d_opts=opts.Axis3DOpts(type_="value", name="z", textstyle_opts=opts.TextStyleOpts(color="white")), itemstyle_opts=opts.ItemStyleOpts(color="white", border_width=0.01, border_color="red", area_color="blue"), # label_opts=opts.LabelOpts(color="objectwhite") ) .set_global_opts, ) c = ( Scatter3D(init_opts=opts.InitOpts(width="1920px", height="960px", page_title="3D散点图", theme=ThemeType.DARK)) .add("3D散点可视化", data, grid3d_opts=opts.Grid3DOpts(width=100, height=100, depth=100, rotate_speed=5, is_rotate=False, rotate_sensitivity=2), xaxis3d_opts=opts.Axis3DOpts(type_="value", name="x", textstyle_opts=opts.TextStyleOpts(color="white")), yaxis3d_opts=opts.Axis3DOpts(type_="value", name="y", textstyle_opts=opts.TextStyleOpts(color="white")), zaxis3d_opts=opts.Axis3DOpts(type_="value", name="z", textstyle_opts=opts.TextStyleOpts(color="white")), itemstyle_opts=opts.ItemStyleOpts(color="white", border_width=0.01, border_color="red", area_color="blue"), # label_opts=opts.LabelOpts(color="white") ) .set_global_opts( title_opts=opts.TitleOpts("3D散点图"), # visualmap_opts=opts.VisualMapOpts(range_color=Faker.visual_color), ) ) print(data) print(Faker.visual_color) return c