pyechart1.6 儀表盤


代碼上傳

GitHub
https://github.com/deepwindlee/MySQL-with-Python-DATA-MINING/blob/master/pyecharts_study20200102.ipynb


定義好儀表盤中的子圖

柱狀圖 、曲線圖、餅圖、地圖、可切換時間的柱狀圖、可切換時間的餅圖html

from pyecharts.faker import Faker # 僞造的數據
from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line, Page, Pie,Map, Timeline
##定義柱狀圖
def bar_datazoom_slider() -> Bar:
c = (
Bar()
.add_xaxis(Faker.days_attrs)
.add_yaxis("商家A", Faker.days_values)
.set_global_opts(
title_opts=opts.TitleOpts(title="Bar-DataZoom(slider-水平)"),
datazoom_opts=[opts.DataZoomOpts()],
)
)
return c

## 定義曲線圖
def line_markpoint() -> Line:
c = (
Line()
.add_xaxis(Faker.choose())
.add_yaxis(
"商家A",
Faker.values(),
markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="min")]),
)
.add_yaxis(
"商家B",
Faker.values(),
markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max")]),
)
.set_global_opts(title_opts=opts.TitleOpts(title="Line-MarkPoint"))
)
return c

## 定義玫瑰餅圖
def pie_rosetype() -> Pie:
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-玫瑰圖示例"))
)
return c

## 定義多y軸圖
def grid_mutil_yaxis() -> Grid:
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=80,
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)
return Grid().add(
bar, opts.GridOpts(pos_left="5%", pos_right="20%"), is_control_axis_index=True
)
def timeline_bar() -> Timeline:
x = Faker.choose()
tl = Timeline()
for i in range(2015, 2020):
bar = (
Bar()
.add_xaxis(x)
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(title_opts=opts.TitleOpts("某商店{}年營業額".format(i)))
)
tl.add(bar, "{}年".format(i))
return tl

#timeline_bar().render_notebook()
from pyecharts.charts import Bar, Page, Pie, Timeline,Map
def timeline_map() -> Timeline:
tl = Timeline()
for i in range(2015, 2020):
map0 = (
Map()
.add(
"商家A", [list(z) for z in zip(Faker.provinces, Faker.values())], "china"
)
.set_global_opts(
title_opts=opts.TitleOpts(title="Map-{}年某些數據".format(i)),
visualmap_opts=opts.VisualMapOpts(max_=200),
)
)
tl.add(map0, "{}年".format(i))
return tl
#timeline_map().render_notebook()
def timeline_pie() -> Timeline:
attr = Faker.choose()
tl = Timeline()
for i in range(2015, 2020):
pie = (
Pie()
.add(
"商家A",
[list(z) for z in zip(attr, Faker.values())],
rosetype="radius",
radius=["30%", "55%"],
)
.set_global_opts(title_opts=opts.TitleOpts("某商店{}年營業額".format(i)))
)
tl.add(pie, "{}年".format(i))
return tl

def table_base() -> Table:
#文本表格圖
table = Table()

headers = ["City name", "Area", "Population", "Annual Rainfall"]
rows = [
["Brisbane", 5905, 1857594, 1146.4],
["Adelaide", 1295, 1158259, 600.5],
["Darwin", 112, 120900, 1714.7],
["Hobart", 1357, 205556, 619.5],
["Sydney", 2058, 4336374, 1214.8],
["Melbourne", 1566, 3806092, 646.9],
["Perth", 5386, 1554769, 869.4],
]
table.add(headers, rows).set_global_opts(
title_opts=opts.ComponentTitleOpts(title="Table")
)
return table

下面把子圖都放到一個頁面上

page = Page()
page.add(bar_datazoom_slider(),
line_markpoint(),
pie_rosetype(),
grid_mutil_yaxis(),
timeline_bar(),
timeline_map(),
timeline_pie())
page.render('2020102順序多圖.html')
page.render_notebook()

打開保存的html文件,這種順序圖顯然是不適合業務的



給Page內加參數,進行簡單的排版

收縮放大後會從新自動排版,可是仍是不夠靈活

page = Page(layout=Page.SimplePageLayout)
# 須要自行調整每一個 chart 的 height/width,顯示效果在不一樣的顯示器上可能不一樣
page.add(bar_datazoom_slider(),
line_markpoint(),
pie_rosetype(),
grid_mutil_yaxis(),
timeline_bar(),
timeline_map(),
timeline_pie()
)

page.render_notebook()
page.render('20200102簡單排版,收縮放大後會從新自動排版.html')



改變Page()內參數,能夠對html 內的子圖進行拖拽放大縮小排版

page = Page(layout=Page.DraggablePageLayout)
page.add(bar_datazoom_slider(),
line_markpoint(),
pie_rosetype(),
grid_mutil_yaxis(),
timeline_bar(),
timeline_map(),
timeline_pie()
)
page.render('20200112drag可拖拽縮小隨意組合.html')

排版好後點擊右上角的 SAVE_FIg 按鈕,保存參數,再讀取參數,新的html內的子圖也固定了



使用生成好的參數(從生成的文件中複製json數據)

cfg_dict = [{"cid":"0ffb8c5376e44e4e8163249945fb8a62",
"width":"662px",
"height":"247px",
"top":"31px",
"left":"8px"},
{"cid":"989078509b19408f981e1ed0ce16e13b",
"width":"692px",
"height":"253px",
"top":"32px",
"left":"701px"},
{"cid":"8f6d92a2b3874c9284c2f80fa1671cdb",
"width":"1383px",
"height":"422px",
"top":"341px",
"left":"18px"},
{"cid":"15b9d663bb5b411d9da720ca8d657399",
"width":"694px","height":"500px",
"top":"783px","left":"22px"},
{"cid":"c910f679ee574fd5920c1de206225f07",
"width":"900px","height":"500px",
"top":"784px","left":"737px"},
{"cid":"61f7328625c6409aab3b93f6f489cd1f",
"width":"763px","height":"500px","top":"1311px","left":"5px"},
{"cid":"7603986f38ad445caec386225a1dfd3e","width":"900px","height":"500px","top":"1300px","left":"790px"}]

讀取這個參數,就能夠固定好html內的子表,生成新的html文件

##dest 爲新文件名, cfg_dict 爲從json數據中複製到的參數
Page.save_resize_html("20200112drag可拖拽縮小隨意組合.html", cfg_dict=cfg_dict, dest="my_new_charts2.html")

打開新文件後發現子圖固定了



git


還能夠添加 文本表格圖 和 網絡圖片

from pyecharts.components import Image
from pyecharts.options import ComponentTitleOpts
def table_base() -> Table:
table = Table()

headers = ["City name", "Area", "Population", "Annual Rainfall"]
rows = [
["Brisbane", 5905, 1857594, 1146.4],
["Adelaide", 1295, 1158259, 600.5],
["Darwin", 112, 120900, 1714.7],
["Hobart", 1357, 205556, 619.5],
["Sydney", 2058, 4336374, 1214.8],
["Melbourne", 1566, 3806092, 646.9],
["Perth", 5386, 1554769, 869.4],
]
table.add(headers, rows).set_global_opts(
title_opts=opts.ComponentTitleOpts(title="Table")
)
return table

def image_base() -> Image:
image = Image()

img_src = (
" https://upload-images.jianshu.io/upload_images/9024458-44671873bd6b5397.jpg?imageMogr2/auto-orient/strip|imageView2/2"
)
image.add(
src=img_src,
style_opts={"width": "800px", "height": "1000px", "style": "margin-top: 20px"},
).set_global_opts(
title_opts=ComponentTitleOpts(title="Image-基本示例", subtitle="從網絡載入圖片")
)
return image
page = Page(layout=Page.DraggablePageLayout)
# 須要自行調整每一個 chart 的 height/width,顯示效果在不一樣的顯示器上可能不一樣
page.add(bar_datazoom_slider(),
line_markpoint(),
pie_rosetype(),
grid_mutil_yaxis(),
timeline_bar(),
timeline_map(),
timeline_pie(),
table_base(),image_base()

)

page.render_notebook()
page.render('秦妃.html')

排版後可得


本文分享自微信公衆號 - deepwind數據分析()。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。github

相關文章
相關標籤/搜索