pyecharts

 

本文轉載自:https://blog.csdn.net/qq_39143076/article/details/79065448,如有侵權,請聯繫刪除啊

如何做Python 的數據可視化?

pyecharts 是一個用於生成 Echarts 圖表的類庫。 Echarts 是百度開源的一個數據可視化 JS 庫。主要用於數據可視化。

一、安裝

pyecharts 兼容 Python2 和 Python3。目前版本爲 0.1.4

pip install pyecharts

pip install pyecharts-snapshot

pip install echarts-countries-pypkg

pip install echarts-china-provinces-pypkg

pip install echarts-china-cities-pypkg

二、入門

首先開始來繪製你的第一個圖表

frompyecharts importBarbar =Bar("我的第一個圖表", "這裏是副標題")bar.add("服裝", ["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"], [5, 20, 36, 10, 75, 90])bar.show_config()bar.render()

Tip:可以按右邊的下載按鈕將圖片下載到本地

  • add()

    主要方法,用於添加圖表的數據和設置各種配置項

  • show_config()

    打印輸出圖表的所有配置項

  • render()

    默認將會在根目錄下生成一個 render.html 的文件,支持 path 參數,設置文件保存位置,如 render(r"e:my_first_chart.html"),文件用瀏覽器打開。

    默認的編碼類型爲 UTF-8,在 Python3 中是沒什麼問題的,Python3 對中文的支持好很多。但是在 Python2 中,編碼的處理是個很頭疼的問題,暫時沒能找到完美的解決方法,目前只能通過文本編輯器自己進行二次編碼,我用的是 Visual Studio Code,先通過 Gbk 編碼重新打開,然後再用 UTF-8 重新保存,這樣用瀏覽器打開的話就不會出現中文亂碼問題了。

基本上所有的圖表類型都是這樣繪製的:

  1. chart_name = Type() 初始化具體類型圖表。

  2. add() 添加數據及配置項。

  3. render() 生成 .html 文件。

三、圖表類型

因篇幅原因,這裏只給出了每種圖表類型的示例(代碼 + 生成圖表),目的是爲了引起讀者的興趣。詳細參數的介紹請參考項目 README.md 文檔

1 Bar(柱狀圖/條形圖)
frompyecharts importBarbar =Bar("標記線和標記點示例")bar.add("商家A", attr, v1, mark_point=["average"])bar.add("商家B", attr, v2, mark_line=["min", "max"])bar.render()
frompyecharts importBarbar =Bar("x 軸和 y 軸交換")bar.add("商家A", attr, v1)bar.add("商家B", attr, v2, is_convert=True)bar.render()

2 EffectScatter(帶有漣漪特效動畫的散點圖)
frompyecharts importEffectScatterv1 =[10, 20, 30, 40, 50, 60]v2 =[25, 20, 15, 10, 60, 33]es =EffectScatter("動態散點圖示例")es.add("effectScatter", v1, v2)es.render()
es =EffectScatter("動態散點圖各種圖形示例")es.add("", [10], [10], symbol_size=20, effect_scale=3.5, effect_period=3, symbol="pin")es.add("", [20], [20], symbol_size=12, effect_scale=4.5, effect_period=4,symbol="rect")es.add("", [30], [30], symbol_size=30, effect_scale=5.5, effect_period=5,symbol="roundRect")es.add("", [40], [40], symbol_size=10, effect_scale=6.5, effect_brushtype='fill',symbol="diamond")es.add("", [50], [50], symbol_size=16, effect_scale=5.5, effect_period=3,symbol="arrow")es.add("", [60], [60], symbol_size=6, effect_scale=2.5, effect_period=3,symbol="triangle")es.render()

3 Funnel(漏斗圖)
frompyecharts importFunnelattr =["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"]value =[20, 40, 60, 80, 100, 120]funnel =Funnel("漏斗圖示例")funnel.add("商品", attr, value, is_label_show=True, label_pos="inside", label_text_color="#fff")funnel.render()
4 Gauge(儀表盤)
frompyecharts importGaugegauge =Gauge("儀表盤示例")gauge.add("業務指標", "完成率", 66.66)gauge.show_config()gauge.render()

5 Geo(地理座標系)
frompyecharts importGeodata =[ ("海門", 9),("鄂爾多斯", 12),("招遠", 12),("舟山", 12),("齊齊哈爾", 14),("鹽城", 15), ("赤峯", 16),("青島", 18),("乳山", 18),("金昌", 19),("泉州", 21),("萊西", 21), ("日照", 21),("膠南", 22),("南通", 23),("拉薩", 24),("雲浮", 24),("梅州", 25)...]geo =Geo("全國主要城市空氣質量", "data from pm2.5", title_color="#fff", title_pos="center",width=1200, height=600, background_color='#404a59')attr, value =geo.cast(data)geo.add("", attr, value, visual_range=[0, 200], visual_text_color="#fff", symbol_size=15, is_visualmap=True)geo.show_config()geo.render()

frompyecharts importGeodata =[("海門", 9), ("鄂爾多斯", 12), ("招遠", 12), ("舟山", 12), ("齊齊哈爾", 14), ("鹽城", 15)]geo =Geo("全國主要城市空氣質量", "data from pm2.5", title_color="#fff", title_pos="center", width=1200, height=600, background_color='#404a59')attr, value =geo.cast(data)geo.add("", attr, value, type="effectScatter", is_random=True, effect_scale=5)geo.show_config()geo.render()

6 Graph(關係圖)
frompyecharts importGraphnodes =[{"name": "結點1", "symbolSize": 10}, {"name": "結點2", "symbolSize": 20}, {"name": "結點3", "symbolSize": 30}, {"name": "結點4", "symbolSize": 40}, {"name": "結點5", "symbolSize": 50}, {"name": "結點6", "symbolSize": 40}, {"name": "結點7", "symbolSize": 30}, {"name": "結點8", "symbolSize": 20}]links =[]fori innodes: forj innodes: links.append({"source": i.get('name'), "target": j.get('name')})graph =Graph("關係圖-環形佈局示例")graph.add("", nodes, links, is_label_show=True, repulsion=8000, layout='circular', label_text_color=None)graph.show_config()graph.render()

frompyecharts importGraphimportjsonwithopen("..jsonweibo.json", "r", encoding="utf-8") asf: j =json.load(f) nodes, links, categories, cont, mid, userl =jgraph =Graph("微博轉發關係圖", width=1200, height=600)graph.add("", nodes, links, categories, label_pos="right", repulsion=50, is_legend_show=False, line_curve=0.2, label_text_color=None)graph.show_config()graph.render()

7 Line(折線/面積圖)
frompyecharts importLineattr =["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"]v1 =[5, 20, 36, 10, 10, 100]v2 =[55, 60, 16, 20, 15, 80]line =Line("折線圖示例")line.add("商家A", attr, v1, mark_point=["average"])line.add("商家B", attr, v2, is_smooth=True, mark_line=["max", "average"])line.show_config()line.render()
line =Line("折線圖-階梯圖示例")line.add("商家A", attr, v1, is_step=True, is_label_show=True)line.show_config()line.render()

line =Line("折線圖-面積圖示例")line.add("商家A", attr, v1, is_fill=True, line_opacity=0.2, area_opacity=0.4, symbol=None)line.add("商家B", attr, v2, is_fill=True, area_color='#000', area_opacity=0.3, is_smooth=True)line.show_config()line.render()

8 Liquid(水球圖)
frompyecharts importLiquidliquid =Liquid("水球圖示例")liquid.add("Liquid", [0.6])liquid.show_config()liquid.render()

frompyecharts importLiquidliquid =Liquid("水球圖示例")liquid.add("Liquid", [0.6, 0.5, 0.4, 0.3], is_liquid_outline_show=False)liquid.show_config()liquid.render()

frompyecharts importLiquidliquid =Liquid("水球圖示例")liquid.add("Liquid", [0.6, 0.5, 0.4, 0.3], is_liquid_animation=False, shape='diamond')liquid.show_config()liquid.render()

9 Map(地圖)
frompyecharts importMapvalue =[155, 10, 66, 78, 33, 80, 190, 53, 49.6]attr =["福建", "山東", "北京", "上海", "甘肅", "新疆", "河南", "廣西", "西藏"]map=Map("Map 結合 VisualMap 示例", width=1200, height=600)map.add("", attr, value, maptype='china', is_visualmap=True, visual_text_color='#000')map.show_config()map.render()

frompyecharts importMapvalue =[20, 190, 253, 77, 65]attr =['汕頭市', '汕尾市', '揭陽市', '陽江市', '肇慶市']map=Map("廣東地圖示例", width=1200, height=600)map.add("", attr, value, maptype='廣東', is_visualmap=True, visual_text_color='#000')map.show_config()map.render()

10 Parallel(平行座標系)
frompyecharts importParallelc_schema =[ {"dim": 0, "name": "data"}, {"dim": 1, "name": "AQI"}, {"dim": 2, "name": "PM2.5"}, {"dim": 3, "name": "PM10"}, {"dim": 4, "name": "CO"}, {"dim": 5, "name": "NO2"}, {"dim": 6, "name": "CO2"}, {"dim": 7, "name": "等級", "type": "category", "data": ['優', '良', '輕度污染', '中度污染', '重度污染', '嚴重污染']}]data =[ [1, 91, 45, 125, 0.82, 34, 23, "良"], [2, 65, 27, 78, 0.86, 45, 29, "良"], [3, 83, 60, 84, 1.09, 73, 27, "良"], [4, 109, 81, 121, 1.28, 68, 51, "輕度污染"], [5, 106, 77, 114, 1.07, 55, 51, "輕度污染"], [6, 109, 81, 121, 1.28, 68, 51, "輕度污染"], [7, 106, 77, 114, 1.07, 55, 51, "輕度污染"], [8, 89, 65, 78, 0.86, 51, 26, "良"], [9, 53, 33, 47, 0.64, 50, 17, "良"], [10, 80, 55, 80, 1.01, 75, 24, "良"], [11, 117, 81, 124, 1.03, 45, 24, "輕度污染"], [12, 99, 71, 142, 1.1, 62, 42, "良"], [13, 95, 69, 130, 1.28, 74, 50, "良"], [14, 116, 87, 131, 1.47, 84, 40, "輕度污染"]]parallel =Parallel("平行座標系-用戶自定義指示器")parallel.config(c_schema=c_schema)parallel.add("parallel", data)parallel.show_config()parallel.render()

11 Pie(餅圖)
frompyecharts importPieattr =["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"]v1 =[11, 12, 13, 10, 10, 10]pie =Pie("餅圖示例")pie.add("", attr, v1, is_label_show=True)pie.show_config()pie.render()

frompyecharts importPieattr =["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"]v1 =[11, 12, 13, 10, 10, 10]v2 =[19, 21, 32, 20, 20, 33]pie =Pie("餅圖-玫瑰圖示例", title_pos='center', width=900)pie.add("商品A", attr, v1, center=[25, 50], is_random=True, radius=[30, 75], rosetype='radius')pie.add("商品B", attr, v2, center=[75, 50], is_random=True, radius=[30, 75], rosetype='area', is_legend_show=False, is_label_show=True)pie.show_config() pie.render()

12 Polar(極座標系)
frompyecharts importPolarradius =['週一', '週二', '週三', '週四', '週五', '週六', '週日']polar =Polar("極座標系-堆疊柱狀圖示例", width=1200, height=600)polar.add("A", [1, 2, 3, 4, 3, 5, 1], radius_data=radius, type='barRadius', is_stack=True)polar.add("B", [2, 4, 6, 1, 2, 3, 1], radius_data=radius, type='barRadius', is_stack=True)polar.add("C", [1, 2, 3, 4, 1, 2, 5], radius_data=radius, type='barRadius', is_stack=True)polar.show_config()polar.render()

frompyecharts importPolarradius =['週一', '週二', '週三', '週四', '週五', '週六', '週日']polar =Polar("極座標系-堆疊柱狀圖示例", width=1200, height=600)polar.add("", [1, 2, 3, 4, 3, 5, 1], radius_data=radius, type='barAngle', is_stack=True)polar.add("", [2, 4, 6, 1, 2, 3, 1], radius_data=radius, type='barAngle', is_stack=True)polar.add("", [1, 2, 3, 4, 1, 2, 5], radius_data=radius, type='barAngle', is_stack=True)polar.show_config()polar.render()

13 Radar(雷達圖)
frompyecharts importRadarschema =[ ("銷售", 6500), ("管理", 16000), ("信息技術", 30000), ("客服", 38000), ("研發", 52000), ("市場", 25000)]v1 =[[4300, 10000, 28000, 35000, 50000, 19000]]v2 =[[5000, 14000, 28000, 31000, 42000, 21000]]radar =Radar()radar.config(schema)radar.add("預算分配", v1, is_splitline=True, is_axisline_show=True)radar.add("實際開銷", v2, label_color=["#4e79a7"], is_area_show=False)radar.show_config()radar.render()

value_bj =[ [55, 9, 56, 0.46, 18, 6, 1], [25, 11, 21, 0.65, 34, 9, 2], [56, 7, 63, 0.3, 14, 5, 3], [33, 7, 29, 0.33, 16, 6, 4]...]value_sh =[ [91, 45, 125, 0.82, 34, 23, 1], [65, 27, 78, 0.86, 45, 29, 2], [83, 60, 84, 1.09, 73, 27, 3], [109, 81, 121, 1.28, 68, 51, 4]...]c_schema=[{"name": "AQI", "max": 300, "min": 5}, {"name": "PM2.5", "max": 250, "min": 20}, {"name": "PM10", "max": 300, "min": 5}, {"name": "CO", "max": 5}, {"name": "NO2", "max": 200}, {"name": "SO2", "max": 100}]radar =Radar()radar.config(c_schema=c_schema, shape='circle')radar.add("北京", value_bj, item_color="#f9713c", symbol=None)radar.add("上海", value_sh, item_color="#b3e4a1", symbol=None)radar.show_config()radar.render()

14 Scatter(散點圖)
frompyecharts importScatterv1 =[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()

散點打印Pyecharts字體。

frompyecharts importScatterscatter =Scatter("散點圖示例")v1, v2 =scatter.draw("../images/pyecharts-0.png")scatter.add("pyecharts", v1, v2, is_random=True)scatter.show_config()scatter.render()

15 WordCloud(詞雲圖)
frompyecharts importWordCloudname =['Sam S Club', 'Macys', 'Amy Schumer', 'Jurassic World', 'Charter Communications', 'Chick Fil A', 'Planet Fitness', 'Pitch Perfect', 'Express', 'Home', 'Johnny Depp', 'Lena Dunham', 'Lewis Hamilton', 'KXAN', 'Mary Ellen Mark', 'Farrah Abraham', 'Rita Ora', 'Serena Williams', 'NCAA baseball tournament', 'Point Break']value =[10000, 6181, 4386, 4055, 2467, 2244, 1898, 1484, 1112, 965, 847, 582, 555, 550, 462, 366, 360, 282, 273, 265]wordcloud =WordCloud(width=1300, height=620)wordcloud.add("", name, value, word_size_range=[20, 100])wordcloud.show_config()wordcloud.render()

wordcloud =WordCloud(width=1300, height=620)wordcloud.add("", name, value, word_size_range=[30, 100], shape='diamond')wordcloud.show_config()wordcloud.render()

五、用戶自定義

用戶還可以自定義結合 Line/Bar 圖表

需使用 get_series() 和 custom() 方法

get_series()"""獲取圖表的 series 數據 """
custom(series)'''追加自定義圖表類型 '''
  • series -> dict

    追加圖表類型的 series 數據

先用 get_series() 獲取數據,再使用 custom() 將圖表結合在一起

frompyecharts importBar, Lineattr =['A', 'B', 'C', 'D', 'E', 'F']v1 =[10, 20, 30, 40, 50, 60]v2 =[15, 25, 35, 45, 55, 65]v3 =[38, 28, 58, 48, 78, 68]bar =Bar("Line - Bar 示例")bar.add("bar", attr, v1)line =Line()line.add("line", v2, v3)bar.custom(line.get_series())bar.show_config()bar.render()

六、更多示例

用極座標系畫出一個愛心

importmathfrompyecharts importPolardata =[]fori inrange(101): theta =i /100*360r =5*(1+math.sin(theta /180*math.pi)) data.append([r, theta])hour =[i fori inrange(1, 25)]polar =Polar("極座標系示例", width=1200, height=600)polar.add("Love", data, angle_data=hour, boundary_gap=False,start_angle=0)polar.show_config()polar.render()

用極座標系畫出一朵小花

importmathfrompyecharts importPolardata =[]fori inrange(361): t =i /180*math.pi r =math.sin(2*t) *math.cos(2*t) data.append([r, i])polar =Polar("極座標系示例", width=1200, height=600)polar.add("Flower", data, start_angle=0, symbol=None, axis_range=[0, None])polar.show_config()polar.render()

還可以給小花塗上顏色

importmathfrompyecharts importPolardata =[]fori inrange(361): t =i /180*math.pi r =math.sin(2*t) *math.cos(2*t) data.append([r, i])polar =Polar("極座標系示例", width=1200, height=600)polar.add("Color-Flower", data, start_angle=0, symbol=None, axis_range=[0, None], area_color="#f71f24", area_opacity=0.6)polar.show_config()polar.render()

用散點圖畫出一個愛心

frompyecharts importScatterscatter =Scatter("散點圖示例", width=800, height=480)v1 ,v2 =scatter.draw("../images/love.png")scatter.add("Love", v1, v2)scatter.render()

用散點圖畫出一個火辣的 Bra

frompyecharts importScatterscatter =Scatter("散點圖示例", width=1000, height=480)v1 ,v2 =scatter.draw("../images/cup.png")scatter.add("Cup", v1, v2)scatter.render()

某地最低溫和最高氣溫折線圖

frompyecharts importLineattr =['週一', '週二', '週三', '週四', '週五', '週六', '週日', ]line =Line("折線圖示例")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"], yaxis_formatter="°C")line.show_config()line.render()

餅圖嵌套

frompyecharts importPiepie =Pie("餅圖示例", title_pos='center', width=1000, height=600)pie.add("", ['A', 'B', 'C', 'D', 'E', 'F'], [335, 321, 234, 135, 251, 148], radius=[40, 55],is_label_show=True)pie.add("", ['H', 'I', 'J'], [335, 679, 204], radius=[0, 30], legend_orient='vertical', legend_pos='left')pie.show_config()pie.render()

餅圖再嵌套

importrandomfrompyecharts importPieattr =['A', 'B', 'C', 'D', 'E', 'F']pie =Pie("餅圖示例", width=1000, height=600)pie.add("", attr, [random.randint(0, 100) for_ inrange(6)], radius=[50, 55], center=[25, 50],is_random=True)pie.add("", attr, [random.randint(20, 100) for_ inrange(6)], radius=[0, 45], center=[25, 50],rosetype='area')pie.add("", attr, [random.randint(0, 100) for_ inrange(6)], radius=[50, 55], center=[65, 50],is_random=True)pie.add("", attr, [random.randint(20, 100) for_ inrange(6)], radius=[0, 45], center=[65, 50],rosetype='radius')pie.show_config()pie.render()

某地的降水量和蒸發量柱狀圖

frompyecharts importBarattr =["{}月".format(i) fori inrange(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]bar =Bar("柱狀圖示例")bar.add("蒸發量", attr, v1, mark_line=["average"], mark_point=["max", "min"])bar.add("降水量", attr, v2, mark_line=["average"], mark_point=["max", "min"])bar.show_config()bar.render()

各類電影中"好片"所佔的比例

frompyecharts importPiepie =Pie('各類電影中"好片"所佔的比例', "數據來着豆瓣", title_pos='center')pie.add("", ["劇情", ""], [25, 75], center=[10, 30], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None, )pie.add("", ["奇幻", ""], [24, 76], center=[30, 30], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None, legend_pos='left')pie.add("", ["愛情", ""], [14, 86], center=[50, 30], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None)pie.add("", ["驚悚", ""], [11, 89], center=[70, 30], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None)pie.add("", ["冒險", ""], [27, 73], center=[90, 30], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None)pie.add("", ["動作", ""], [15, 85], center=[10, 70], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None)pie.add("", ["喜劇", ""], [54, 46], center=[30, 70], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None)pie.add("", ["科幻", ""], [26, 74], center=[50, 70], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None)pie.add("", ["懸疑", ""], [25, 75], center=[70, 70], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None)pie.add("", ["犯罪", ""], [28, 72], center=[90, 70], radius=[18, 24], label_pos='center', is_label_show=True, label_text_color=None, is_legend_show=True, legend_top="center")pie.show_config()pie.render()

用極座標系畫出一個蝸牛殼

importmathfrompyecharts importPolardata =[]fori inrange(5): forj inrange(101): theta =j /100*360alpha =i *360+theta r =math.pow(math.e, 0.003*alpha) data.append([r, theta])polar =Polar("極座標系示例")polar.add("", data, symbol_size=0, symbol='circle', start_angle=-25, is_radiusaxis_show=False, area_color="#f3c5b3", area_opacity=0.5, is_angleaxis_show=False)polar.show_config()polar.render()

 

分類: Python

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章