利用Pyecharts绘制15个超实用精美图表~

俊红的数据分析之路

共 11335字,需浏览 23分钟

 · 2021-10-21

什么是pyecharts?pyecharts是Python与ECharts的结合,Python是我们所熟知的语言,而ECharts是百度开源的数据可视化图表设计,这两者的有效结合,使得图表可视化更加绚丽多彩。

本文使用Python语言,借助pyecharts库,绘制常用的柱形图、折线图、饼图、散点图等,使用pyecharts库的交互功能实现动态可视化功能,对于里面的代码都可以修改进行复用,下面一起学习。

条形图


from pyecharts import options as optsfrom pyecharts.charts import Barfrom pyecharts.faker import Faker
c = ( Bar() .add_xaxis(Faker.choose()) .add_yaxis("商家A", Faker.values()) .add_yaxis("商家B", Faker.values()) .set_global_opts(title_opts=opts.TitleOpts(title="Bar-MarkLine(自定义)")) .set_series_opts( label_opts=opts.LabelOpts(is_show=False), markline_opts=opts.MarkLineOpts( data=[opts.MarkLineItem(y=50, name="yAxis=50")] ), ))c.render_notebook()

水平条形图动图


from pyecharts import options as optsfrom pyecharts.charts import Barfrom pyecharts.commons.utils import JsCodefrom pyecharts.faker import Faker
c = ( Bar() .add_xaxis(Faker.days_attrs) .add_yaxis("商家A", Faker.days_values,itemstyle_opts=opts.ItemStyleOpts(color="#d14a61")) .set_global_opts( title_opts=opts.TitleOpts(title="Bar-DataZoom(slider-水平)"), datazoom_opts=[opts.DataZoomOpts()], ) )c.render_notebook()

折线图


from pyecharts.charts import Linefrom pyecharts import options as opts
# 示例数据cate = ['Apple', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo', 'Meizu']data1 = [123, 153, 89, 107, 98, 23]data2 = [56, 77, 93, 68, 45, 67]
line = (Line() .add_xaxis(cate) .add_yaxis('电商渠道', data1, markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")])) .add_yaxis('门店', data2, is_smooth=True, markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(name="自定义标记点", coord=[cate[2], data2[2]], value=data2[2])])) .set_global_opts(title_opts=opts.TitleOpts(title="Line-基本示例", subtitle="我是副标题")) )
line.render_notebook()

面积图


import pyecharts.options as optsfrom pyecharts.charts import Linefrom pyecharts.faker import Faker
c = ( Line() .add_xaxis(Faker.choose()) .add_yaxis("商家A", Faker.values(), areastyle_opts=opts.AreaStyleOpts(opacity=0.5)) .add_yaxis("商家B", Faker.values(), areastyle_opts=opts.AreaStyleOpts(opacity=0.5)) .set_global_opts(title_opts=opts.TitleOpts(title="Line-面积图")))c.render_notebook()

饼图


from pyecharts.charts import Piefrom pyecharts import options as opts
# 示例数据cate = ['Apple', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo', 'Meizu']data = [153, 124, 107, 99, 89, 46]
pie = (Pie() .add('', [list(z) for z in zip(cate, data)], radius=["30%", "75%"], rosetype="radius" ) .set_global_opts(title_opts=opts.TitleOpts(title="Pie-基本示例", subtitle="我是副标题")) .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%")) )
pie.render_notebook()

玫瑰图


from pyecharts import options as optsfrom pyecharts.charts import Piefrom pyecharts.faker import Faker
v = Faker.choose()c = ( Pie() .add( "", [list(z) for z in zip(v, Faker.values())], radius=["30%", "75%"], center=["25%", "50%"], rosetype="radius", label_opts=opts.LabelOpts(is_show=False), ) .add( "", [list(z) for z in zip(v, Faker.values())], radius=["30%", "75%"], center=["75%", "50%"], rosetype="area", ) .set_global_opts(title_opts=opts.TitleOpts(title="Pie-玫瑰图示例")))c.render_notebook()

漏斗图


import pyecharts.options as optsfrom pyecharts.charts import Funnel
x_data = ["展现", "点击", "访问", "咨询", "订单"]y_data = [100, 80, 60, 40, 20]
data = [[x_data[i], y_data[i]] for i in range(len(x_data))]
( Funnel() .add( series_name="", sort_='ascending', data_pair=data, gap=2, tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a}
{b} : {c}%"
),
label_opts=opts.LabelOpts(is_show=True, position="inside"), itemstyle_opts=opts.ItemStyleOpts(border_color="#fff", border_width=1), ) .set_global_opts(title_opts=opts.TitleOpts(title="漏斗图", subtitle="纯属虚构"))).render_notebook()

热力图


from pyecharts.charts import HeatMapfrom pyecharts import options as optsfrom pyecharts.faker import Fakerimport random
# 示例数据data = [[i, j, random.randint(0, 100)] for i in range(24) for j in range(7)]
heat = (HeatMap() .add_xaxis(Faker.clock) .add_yaxis("访客数", Faker.week, data, label_opts=opts.LabelOpts(is_show=True, position="inside")) .set_global_opts( title_opts=opts.TitleOpts(title="HeatMap-基本示例", subtitle="我是副标题"), visualmap_opts=opts.VisualMapOpts(), legend_opts=opts.LegendOpts(is_show=False)) )
heat.render_notebook()

散点图


from pyecharts import options as optsfrom pyecharts.charts import Scatterfrom pyecharts.faker import Faker
c = ( Scatter() .add_xaxis(Faker.choose()) .add_yaxis("商家A", Faker.values()) .add_yaxis("商家B", Faker.values()) .set_global_opts( title_opts=opts.TitleOpts(title="Scatter-VisualMap(Size)"), visualmap_opts=opts.VisualMapOpts(type_="size", max_=150, min_=20), ))c.render_notebook()

三维散点图


from pyecharts import options as optsfrom pyecharts.charts import Scatter3Dimport random

data = [[random.randint(0, 150), random.randint(0, 100), random.randint(0, 100)] for _ in range(1000)]
scatter3D = (Scatter3D() .add("", data) .set_global_opts( title_opts=opts.TitleOpts("Scatter3D-基本示例"), visualmap_opts=opts.VisualMapOpts(range_color=Faker.visual_color)) )
scatter3D.render_notebook()

箱线图


from pyecharts import options as optsfrom pyecharts.charts import Boxplot
v1 = [ [850, 740, 900, 1070, 930, 850, 950, 980, 980, 880, 1000, 980], [960, 940, 960, 940, 880, 800, 850, 880, 900, 840, 830, 790],]v2 = [ [890, 810, 810, 820, 800, 770, 760, 740, 750, 760, 910, 920], [890, 840, 780, 810, 760, 810, 790, 810, 820, 850, 870, 870],]c = Boxplot()c.add_xaxis(["expr1", "expr2"])c.add_yaxis("A", c.prepare_data(v1))c.add_yaxis("B", c.prepare_data(v2))c.set_global_opts(title_opts=opts.TitleOpts(title="BoxPlot-基本示例"))c.render_notebook()

地图


from pyecharts import options as optsfrom pyecharts.charts import Mapimport random
province = ['广东', '湖北', '湖南', '四川', '重庆', '黑龙江', '浙江', '山西', '河北', '安徽', '河南', '山东', '西藏']data = [(i, random.randint(50, 150)) for i in province]
_map = ( Map() .add("销售额", data, "china") .set_global_opts( title_opts=opts.TitleOpts(title="Map-基本示例"), legend_opts=opts.LegendOpts(is_show=False), visualmap_opts=opts.VisualMapOpts(max_=200, is_piecewise=True), ) )
_map.render_notebook()

区域热力图


from pyecharts import options as optsfrom pyecharts.charts import Geofrom pyecharts.globals import ChartTypeimport random
province = ['杭州', '宁波', '温州', '嘉兴', '丽水', '衢州', '绍兴', '台州', '湖州','金华','舟山']data = [(i, random.randint(50, 150)) for i in province]
geo = (Geo() .add_schema(maptype="浙江") .add("门店数", data, type_=ChartType.HEATMAP) .set_series_opts(label_opts=opts.LabelOpts(is_show=False)) .set_global_opts( visualmap_opts=opts.VisualMapOpts(), legend_opts=opts.LegendOpts(is_show=False), title_opts=opts.TitleOpts(title="Geo-浙江热力地图")) )
geo.render_notebook()

世界地图


from pyecharts.charts import Map  # 注意这里与老版本pyecharts调用的区别from pyecharts import options as optsimport randomcountry = ['China', 'Canada', 'France', 'Japan', 'Russia', 'USA']data_world = [(i, random.randint(100, 200)) for i in country]world = (    Map()    .add('', # 此处没取名,所以空着      data_world, # 数据      'world') # 地图类型    .set_global_opts(        title_opts=opts.TitleOpts(title='World Map'),        visualmap_opts=opts.VisualMapOpts(            max_=200,            min_=100,            is_piecewise=True)  # 定义图例为分段型,默认为连续的图例    )    .set_series_opts(label_opts=opts.LabelOpts(is_show=False)))world.render_notebook()

词云图


import pyecharts.options as optsfrom pyecharts.charts import WordCloud
data = [ ("生活资源", "999"), ("供热管理", "888"), ("供气质量", "777"), ("生活用水管理", "688"), ("一次供水问题", "588"), ("交通运输", "516"), ("城市交通", "515"), ("环境保护", "683"), ("房地产管理", "662"), ("城乡建设", "649"), ("社会保障与福利", "429"), ("社会保障", "707"), ("文体与教育管理", "506"), ("公共安全", "506"), ("公交运输管理", "586"), ("出租车运营管理", "585"),]
( WordCloud() .add(series_name="热点分析", data_pair=data, word_size_range=[6, 66]) .set_global_opts( title_opts=opts.TitleOpts( title="热点分析", title_textstyle_opts=opts.TextStyleOpts(font_size=23) ), tooltip_opts=opts.TooltipOpts(is_show=True), )).render_notebook()

组合图


from pyecharts import options as optsfrom pyecharts.charts import Bar,Line,Gridfrom pyecharts.commons.utils import JsCodefrom pyecharts.faker import Faker
x_data = ["{}月".format(i) for i in range(1, 13)]bar = ( Bar() .add_xaxis(x_data) .add_yaxis( "蒸发量", [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3], yaxis_index=0, color="#d14a61", ) .add_yaxis( "降水量", [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3], yaxis_index=1, color="#5793f3", ) .extend_axis( yaxis=opts.AxisOpts( name="蒸发量", type_="value", min_=0, max_=250, position="right", axisline_opts=opts.AxisLineOpts( linestyle_opts=opts.LineStyleOpts(color="#d14a61") ), axislabel_opts=opts.LabelOpts(formatter="{value} ml"), ) ) .extend_axis( yaxis=opts.AxisOpts( type_="value", name="温度", min_=0, max_=25, position="left", axisline_opts=opts.AxisLineOpts( linestyle_opts=opts.LineStyleOpts(color="#675bba") ), axislabel_opts=opts.LabelOpts(formatter="{value} °C"), splitline_opts=opts.SplitLineOpts( is_show=True, linestyle_opts=opts.LineStyleOpts(opacity=1) ), ) ) .set_global_opts( yaxis_opts=opts.AxisOpts( name="降水量", min_=0, max_=250, position="right", offset=50, axisline_opts=opts.AxisLineOpts( linestyle_opts=opts.LineStyleOpts(color="#5793f3") ), axislabel_opts=opts.LabelOpts(formatter="{value} ml"), ), title_opts=opts.TitleOpts(title="Grid-多 Y 轴示例"), tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"), ) )
line = ( Line() .add_xaxis(x_data) .add_yaxis( "平均温度", [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2], yaxis_index=2, color="#675bba", label_opts=opts.LabelOpts(is_show=False), ) )bar.overlap(line)bar.render_notebook()


我的新书上市一周销量持续新书榜第一,感兴趣的同学点击「阅读原文」直接半价购买书籍
浏览 7
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报