Python 數據可視化?

pyecharts 是一個用於生成 Echarts 圖表的類庫。實際上就是 Echarts 和 Python 的對接。 Echarts 是百度開源的一個數據可視化 JS 庫。主要用於數據可視化。

安裝

pyecharts 兼容 Python2 和 Python3。目前版本為 0.1.6

pip install pyecharts

入門

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

from pyecharts import Barbar = 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 文檔

Bar(柱狀圖/條形圖)

from pyecharts import Barattr = ["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"]v1 = [5, 20, 36, 10, 75, 90]v2 = [10, 25, 8, 60, 20, 80]bar = Bar("柱狀圖數據堆疊示例")bar.add("商家A", attr, v1, is_stack=True)bar.add("商家B", attr, v2, is_stack=True)bar.render()

from pyecharts import Barbar = Bar("標記線和標記點示例")bar.add("商家A", attr, v1, mark_point=["average"])bar.add("商家B", attr, v2, mark_line=["min", "max"])bar.render()

from pyecharts import Barbar = Bar("x 軸和 y 軸交換")bar.add("商家A", attr, v1)bar.add("商家B", attr, v2, is_convert=True)bar.render()

EffectScatter(帶有漣漪特效動畫的散點圖)

from pyecharts import EffectScatterv1 = [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()

Funnel(漏斗圖)

from pyecharts import Funnelattr = ["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"]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()

Gauge(儀錶盤)

from pyecharts import Gaugegauge = Gauge("儀錶盤示例")gauge.add("業務指標", "完成率", 66.66)gauge.show_config()gauge.render()

Geo(地理坐標系)

Scatter 類型

from pyecharts import Geodata = [ ("海門", 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()

HeatMap 類型

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="heatmap", is_visualmap=True, visual_range=[0, 300], visual_text_color="#fff")geo.show_config()geo.render()

EffectScatter 類型

from pyecharts import Geodata = [("海門", 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()

Graph(關係圖)

from pyecharts import Graphnodes = [{"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 = []for i in nodes: for j in nodes: 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()

from pyecharts import Graphimport jsonwith open("..jsonweibo.json", "r", encoding="utf-8") as f: 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()

HeatMap(熱力圖)

import randomfrom pyecharts import HeatMapx_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()heatmap.add("熱力圖直角坐標系", x_axis, y_aixs, data, is_visualmap=True,visual_text_color="#000", visual_orient="horizontal")heatmap.show_config()heatmap.render()

Kline(K線圖)

from pyecharts import Klinev1 = [[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 線圖示例")kline.add("日K", ["2017/7/{}".format(i + 1) for i in range(31)], v1)kline.show_config()kline.render()

kline = Kline("K 線圖示例")kline.add("日K", ["2017/7/{}".format(i + 1) for i in range(31)], v1, mark_point=["max"], is_datazoom_show=True)kline.show_config()kline.render()

Line(折線/面積圖)

from pyecharts import Lineattr = ["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"]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, mark_point=["average", "max", "min"],mark_point_symbol="diamond", mark_point_textcolor="#40ff27")line.add("商家B", attr, v2, mark_point=["average", "max", "min"],mark_point_symbol="arrow", mark_point_symbolsize=40)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()

Liquid(水球圖)

from pyecharts import Liquidliquid = Liquid("水球圖示例")liquid.add("Liquid", [0.6])liquid.show_config()liquid.render()

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

from pyecharts import Liquidliquid = Liquid("水球圖示例")liquid.add("Liquid", [0.6, 0.5, 0.4, 0.3], is_liquid_animation=False, shape="diamond")liquid.show_config()liquid.render()

Map(地圖)

Scatter 類型

from pyecharts import Mapvalue = [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()

HeatMap 類型

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="heatmap", is_visualmap=True, visual_range=[0, 300], visual_text_color="#fff")geo.show_config()geo.render()

EffectScatter 類型

from pyecharts import Mapvalue = [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()

Parallel(平行坐標系)

from pyecharts import Parallelc_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()

Pie(餅圖)

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

from pyecharts import Pieattr = ["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"]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()

Polar(極坐標系)

from pyecharts import Polarimport randomdata = [(i, random.randint(1, 100)) for i in range(101)]polar = Polar("極坐標系-散點圖示例")polar.add("", data, boundary_gap=False, type="scatter", is_splitline_show=False,area_color=None, is_axisline_show=True)polar.show_config()polar.render()

from pyecharts import Polarradius = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]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()

from pyecharts import Polarradius = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]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()

Radar(雷達圖)

from pyecharts import Radarschema = [ ("銷售", 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()

Scatter(散點圖)

from pyecharts import Scatterv1 = [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()

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

WordCloud(詞雲圖)

from pyecharts import WordCloudname = ["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/Kline, Scatter/EffectScatter 圖表

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

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

  • series -> dict

    追加圖表類型的 series 數據

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

from pyecharts import Bar, 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()

from pyecharts import Scatter, EffectScatterfrom pyecharts import Scatter, EffectScatterv1 = [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.custom(scatter.get_series())es_1 = EffectScatter()es_1.add("es_1", v1, v4, symbol="pin", effect_scale=5)es.custom(es_1.get_series())es.show_config()es.render()

from pyecharts import Line, Klinev1 = [[2320.26, 2320.26, 2287.3, 2362.94], [2300, 2291.3, 2288.26, 2308.38], [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("Kline - Line 示例")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)])kline.custom(line_1.get_series())klidne.custom(line_2.get_series())kline.show_config()kline.render()

更多示例

用極坐標系畫出一個愛心

import mathfrom pyecharts import Polardata = []for i in range(101): theta = i / 100 * 360 r = 5 * (1 + math.sin(theta / 180 * math.pi)) data.append([r, theta])hour = [i for i in range(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()

用極坐標系畫出一朵小花

import mathfrom pyecharts import Polardata = []for i in range(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()

還可以給小花塗上顏色

import mathfrom pyecharts import Polardata = []for i in range(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()

用散點圖畫出一個愛心

from pyecharts import Scatterscatter = Scatter("散點圖示例", width_=800, height=480)v1 ,v2 = scatter.draw("../images/love.png")scatter.add("Love", v1, v2)scatter.render()

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

from pyecharts import Scatterscatter = Scatter("散點圖示例", width_=1000, height=480)v1 ,v2 = scatter.draw("../images/cup.png")scatter.add("Cup", v1, v2)scatter.render()

用散點圖畫出一個性感的 Bra

from pyecharts import Scatterscatter = Scatter("散點圖示例", width_=1000, height=480)v1 ,v2 = scatter.draw("../images/cup.png")scatter.add("Cup", v1, v2, label_color=["#000"])scatter.render()

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

from pyecharts import Lineattr = ["周一", "周二", "周三", "周四", "周五", "周六", "周日", ]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()

餅圖嵌套

from pyecharts import Piepie = 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()

餅圖再嵌套

import randomfrom pyecharts import Pieattr = ["A", "B", "C", "D", "E", "F"]pie = Pie("餅圖示例", width_=1000, height=600)pie.add("", attr, [random.randint(0, 100) for _ in range(6)], radius=[50, 55], center=[25, 50],is_random=True)pie.add("", attr, [random.randint(20, 100) for _ in range(6)], radius=[0, 45], center=[25, 50],rosetype="area")pie.add("", attr, [random.randint(0, 100) for _ in range(6)], radius=[50, 55], center=[65, 50],is_random=True)pie.add("", attr, [random.randint(20, 100) for _ in range(6)], radius=[0, 45], center=[65, 50],rosetype="radius")pie.show_config()pie.render()

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

from pyecharts import Barattr = ["{}月".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]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()

加個 dataZoom

bar = Bar("柱狀圖示例")bar.add("蒸發量", attr, v1, mark_line=["average"], mark_point=["max", "min"])bar.add("降水量", attr, v2, mark_line=["average"], mark_point=["max", "min"],is_datazoom_show=True, datazoom_range=[50, 80])bar.show_config()bar.render()

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

from pyecharts import Piepie = 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()

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

import mathfrom pyecharts import Polardata = []for i in range(5): for j in range(101): theta = j / 100 * 360 alpha = 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()

Github 地址:github.com/chenjiandong

有什麼問題的話 歡迎大家到項目下面開 issue 討論,順便給個 star 什麼的!

項目更新:

pyecharts + Jupyter Notebook 數據可視化,還要啥 PPT?

3D 酷炫立體圖現已加入 pyecharts 豪華午餐


推薦閱讀:

R語言之數據可視化
有趣!如何用Python-matplotlib繪製雙層餅圖及環形圖?
10分鐘python圖表繪製 | seaborn入門(一):distplot與kdeplot
用R語言復盤美國總統大選

TAG:Python | 数据可视化 |