Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
者: 俊欣
來源:關于數據分析與可視化
今天小編來為大家安利另外一個用于繪制可視化圖表的Python框架,名叫Dash,建立在Flask、Plotly.js以及React.js的基礎之上,在創建之出的目的是為了幫助前端知識匱乏的數據分析人員,以純Python編程的方式快速制作出交互特性強的數據可視化大屏,在經過多年的迭代發展,如今不僅僅可以用來開發在線數據可視化作品,即便是輕量級的數據儀表盤、BI應用甚至是博客或者是常規的網站都隨處可見Dash框架的影子,今天小編就先來介紹一下該框架的一些基礎知識,并且來制作一個簡單的數據可視化大屏。
我們先來了解一下Dash框架中的兩個基本概念
Layout顧名思義就是用來設計可視化大屏的外觀和布局,添加一些例如下拉框、單選框、復選框、輸入框、文本框、滑動條等組件,其中Dash框架對HTML標簽也進行了進一步的封裝,使得我們直接可以通過Python代碼來生成和設計每一個網頁所需要的元素,例如
<div>
<h1>Hello World!!</h1>
<div>
<p>Dash converts Python classes into HTML</p>
</div>
</div>
我們轉化成Dash的Python結構就是
html.Div([
html.H1('Hello Dash'),
html.Div([
html.P('Dash converts Python classes into HTML'),
])
])
Callbacks也就是回調函數,基本上是以裝飾器的形式來體現的,實現前后端異步通信的交互,例如我們在點擊按鈕或者下拉框之后出現的功能就是通過回調函數來實現的。
在導入模塊之前,我們先用pip命令來進行安裝,
! pip install dash
! pip install dash-html-components
! pip install dash-core-components
! pip install plotly
然后我們導入這些剛剛安裝完的模塊,其中dash-html-components用來生成HTML標簽,dash-core-components模塊用來生成例如下拉框、輸入框等組件,這里我們還需要用到plotly模塊,因為我們需要用到的數據來自該模塊,里面是一眾互聯網公司過去一段時間中股價的走勢
import dash
import dash_html_components as html
import dash_core_components as dcc
import plotly.graph_objects as go
import plotly.express as px
那么我們讀取數據并且用plotly來繪制折線圖,代碼如下
app=dash.Dash() #實例化Dash
df=px.data.stocks() #讀取股票數據
def stock_prices():
# 繪制折線圖
fig=go.Figure([go.Scatter(x=df['date'], y=df['AAPL'],
line=dict(color='firebrick', width=4), name='Apple')
])
fig.update_layout(title='股價隨著時間的變幻',
xaxis_title='日期',
yaxis_title='價格'
)
return fig
app.layout=html.Div(id='parent', children=[
html.H1(id='H1', children='Dash 案例一', style={'textAlign': 'center',
'marginTop': 40, 'marginBottom': 40}),
dcc.Graph(id='line_plot', figure=stock_prices())
])
if __name__=='__main__':
app.run_server()
我們點擊運行之后會按照提示將url復制到瀏覽器當中便可以看到出來的結果了,如下所示
從代碼的邏輯上來看,我們通過Dash框架中的Div方法來進行頁面的布局,其中有參數id來指定網頁中的元素,以及style參數來進行樣式的設計,最后我們將會指出來的圖表放在dcc.Graph()函數當中。
然后我們再添置一個下拉框,當我們點擊這個下拉框的時候,可是根據我們的選擇展示不同公司的股價,代碼如下
dcc.Dropdown(id='dropdown',
options=[
{'label': '谷歌', 'value': 'GOOG'},
{'label': '蘋果', 'value': 'AAPL'},
{'label': '亞馬遜', 'value': 'AMZN'},
],
value='GOOG'),
output
options參數中的label對應的是下拉框中的各個標簽,而value對應的是DataFrame當中的列名
df.head()
output
最后我們將下拉框和繪制折線圖的函數給連接起來,我們點擊下拉框選中不同的選項的時候,折線圖也會相應的產生變化,
@app.callback(Output(component_id='bar_plot', component_property='figure'),
[Input(component_id='dropdown', component_property='value')])
def graph_update(dropdown_value):
print(dropdown_value)
# Function for creating line chart showing Google stock prices over time
fig=go.Figure([go.Scatter(x=df['date'], y=df['{}'.format(dropdown_value)],
line=dict(color='firebrick', width=4))
])
fig.update_layout(title='股價隨著時間的變幻',
xaxis_title='日期',
yaxis_title='價格'
)
return fig
我們看到callback()方法中指定輸入和輸出的媒介,其中Input參數,里面的component_id對應的是下拉框的id也就是dropdown,而Output參數,當中的component_id對應的是折線圖的id也就是bar_plot,我們來看一下最后出來的結果如下
最后,全部的代碼如下所示
者:俊欣
來源:關于數據分析與可視化
今天我們就來說說如何用Pyecharts模塊來制作炫酷的可視化大屏,最后的效果如下
步驟如下:
這次我們使用的數據是虛構的某超市2021年第一季度的訂單數據,總共是有1000條,
df.info()
output
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1000 entries, 0 to 999
Data columns (total 17 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 訂單編號 1000 non-null object
1 分支 1000 non-null object
2 省份 1000 non-null object
3 顧客類型 1000 non-null object
4 性別 1000 non-null object
5 商品類型 1000 non-null object
6 單價 1000 non-null float64
7 數量 1000 non-null int64
8 Tax 5% 1000 non-null float64
9 總價 1000 non-null float64
10 日期 1000 non-null datetime64[ns]
.......
dtypes: datetime64[ns](1), float64(7), int64(1), object(8)
memory usage: 132.9+ KB
其中顧客的類型有普通顧客與會員,性別有男性與女性,剩下的還有包括商品類型、購買時間、支付方式、各個商品的毛利率等數據,
接下來我們開始各個圖表的繪制,我們先來看餅圖的繪制,代碼并不復雜,首先我們對“商品類型”這一列的數據進行統計
products_type_index=df["商品類型"].value_counts().index.tolist()
products_type_values=df["商品類型"].value_counts().values.tolist()
然后再調用Pyecharts()模塊中的Pie()實例進行圖表的繪制
def pie_chart_2():
c=(
Pie(init_opts=opts.InitOpts(chart_id=4, bg_color='#1C1C1C',
theme=ThemeType.INFOGRAPHIC))
.add("", [list(z) for z in zip(products_type_index,
products_type_values)])
.set_global_opts(title_opts=opts.TitleOpts(title="商品類型分布圖",
title_textstyle_opts=opts.TextStyleOpts(font_size=25, color='#FFFFFF')),
legend_opts=opts.LegendOpts(orient="vertical",
pos_left="5%",
pos_top="10%"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
return c
if __name__=="__main__":
map=map_chart()
map.render("4.html")
output
另外,我們也看到了單張圖片當中有兩張餅圖的情況,這是使用了Pyecharts()模塊當中的Grid()實例,將若干張繪制完成的圖表遵從一定的順序來進行組合
grid=(
Grid(init_opts=opts.InitOpts(width='1000px', height='600px',
chart_id=3, bg_color='#1C1C1C'))
.add(c_1, grid_opts=opts.GridOpts(pos_left="60%"))
.add(c_2, grid_opts=opts.GridOpts(pos_right="50%"))
)
同樣地,我們將不同省份的數據給篩選出來之后,然后進行圖表的繪制
city_index=df["省份"].value_counts().index.tolist()
city_values=df["省份"].value_counts().values.tolist()
地圖的繪制用的是Pyecharts模塊當中的Map()實例,可以看到顧客幾乎都分布在北京、浙江以及上海這幾個地方
def map_chart():
c=(
Map(init_opts=opts.InitOpts(chart_id=2,
bg_color='#1C1C1C'))
.add("商家A", [list(z) for z in zip(city_index,
city_values)], "china")
.set_global_opts(
title_opts=opts.TitleOpts(title="顧客在全國的分布圖",
title_textstyle_opts=opts.TextStyleOpts(font_size=25,
color='#FFFFFF')),
visualmap_opts=opts.VisualMapOpts(max_=250),
)
)
return c
if __name__=="__main__":
map=map_chart()
map.render("2.html")
output
我們針對的是購買時間,看一下哪些購買時間段的人會比較多
hour_index=df["小時"].value_counts().index.tolist()
hour_index_str=[str(hour_ind) + "時" for hour_ind in hour_index]
hour_values=df["小時"].value_counts().values.tolist()
調用Bar()實例進行繪制圖表
def bar_chart():
c=(
Bar(init_opts=opts.InitOpts(chart_id=5, bg_color='#1C1C1C',
theme=ThemeType.CHALK))
.add_xaxis(hour_index_str)
.add_yaxis("商家A", hour_values)
.set_global_opts(title_opts=opts.TitleOpts(title="購物的時間分布",
subtitle="購物時間",
title_textstyle_opts=opts.TextStyleOpts(font_size=25, color='#FFFFFF')))
)
return c
if __name__=="__main__":
map=map_chart()
map.render("5.html")
output
將繪制出來的若干份圖表組合到一塊兒,總共有這幾種方式
我們使用的是Page()示例來順序展示多張圖表,先實例化該對象
page=Page(layout=Page.DraggablePageLayout, page_title="基于Pyecharts的銷售數據大屏")
之所以用DraggablePageLayout屬性是為了調整成我們所想要的布局,然后將我們所繪制的圖表一一添加
page.add(
title(),
map_chart(),
pie_chart(),
pie_chart_2(),
bar_chart(),
)
page.render('test_2.html')
最后生成一個test_2.html的文件,然后我們將布局調整成我們想要的結果
對圖片布局完成之后,要記得點擊左上角的save config按鈕對布局文件進行保存。之后本地會生成一個chart_config.json文件,然后運行下面的代碼
page.save_resize_html('test_2.html', cfg_file='chart_config.json', dest='可視化大屏.html')
打開重新生成的可視化大屏.html,便是新的內容
在日常工作中,為了更直觀的發現數據中隱藏的規律,察覺到變量之間的互動關系,人們常常借助可視化幫助我們更好的給他人解釋現象,做到一圖勝千文的說明效果。
在Python中,常見的數據可視化庫有:
matplotlib 是最常見的2維庫,可以算作可視化的必備技能庫,由于matplotlib是比較底層的庫,api很多,代碼學起來不太容易。
seaborn 是建構于matplotlib基礎上,能滿足絕大多數可視化需求。更特殊的需求還是需要學習matplotlib。
上述兩個庫都是靜態的可視化庫,大多數做過前端Web開發的同學都用到過Echarts.js庫,它是一款前端可視化的JS庫、功能非常之強大。在使用之前,需要導入js庫到項目中。對于平時用Python較多的同學而言,如果每次實現可視化功能(特別是一些小需求),都需要引用js庫顯然不太方便,于是就在想有沒有Python與Echarts結合的輪子。答案是肯定的,在Github中就有一個國人開發的一個Echarts與Python結合的輪子:Pyecharts,它不僅很好的兼容了web項目,而且可以做到可視化的動態效果。
Pyecharts 是一個用于生成 Echarts 圖表的類庫。常規的Echarts 是由百度開源的一個數據可視化 JS 庫,主要用于數據可視化。簡單來說,Pyecharts是一款將python與echarts結合的強大的數據可視化工具。
使用 Pyecharts 可以生成獨立的網頁,也可以在 flask , Django 中集成使用。
項目介紹:
http://pyecharts.herokuapp.com/
項目源碼:
https://github.com/pyecharts/pyecharts
從項目文檔介紹可知, pyecharts目前分為兩個大的系列版本:0.5.x 和v1.x.x。
支持 Python2.7,3.4+
0.5.x 版本將不再進行維護,文檔位于 05x-docs.pyecharts.org。
僅支持 Python3.6+
新版本系列將從 v1.0.0 開始,文檔位于 pyecharts.org;示例位于 gallery.pyecharts.org
PS: v0.5.x 和 V1 間不兼容,V1 是一個全新的版本。
得益于Echarts 項目,目前Pyecharts支持 30+ 種常見圖表,如下所示:
Bar(柱狀圖/條形圖)
Bar3D(3D 柱狀圖)
Boxplot(箱形圖)
EffectScatter(散點圖)
Funnel(漏斗圖)
Gauge(儀表盤)
Geo(地理坐標系)
Graph(關系圖)
HeatMap(熱力圖)
Kline(K線圖)
Line(折線/面積圖)
Line3D(3D 折線圖)
Liquid(水球圖)
Map(地圖)
Parallel(平行坐標系)
Pie(餅圖)
Polar(極坐標系)
Radar(雷達圖)
Sankey(桑基圖)
Scatter(散點圖)
Scatter3D(3D 散點圖)
ThemeRiver(主題河流圖)
WordCloud(詞云圖)
1、pip 安裝
# 安裝 v1 以上版本
$ pip install pyecharts -U
# 如果需要安裝 0.5.11 版本的開發者,可以使用
# pip install pyecharts==0.5.11
2、源碼安裝
# v1 以上版本
$ git clone https://github.com/pyecharts/pyecharts.git
# 如果需要安裝 0.5.11 版本,請使用 git clone https://github.com/pyecharts/pyecharts.git -b v05x
$ cd pyecharts
$ pip install -r requirements.txt
$ python setup.py install
在使用pip安裝庫時,由于墻的原因,下載時可能會出現斷線和速度過慢的問題導致下載失敗,所以建議通過豆瓣源或清華鏡像來進行下載:
# 豆瓣源下載
pip install -i https://pypi.douban.com/simple pyecharts
# 清華鏡像源
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyecharts
PS: 這里要專門說明一下,自從 0.3.2 開始,為了縮減項目本身的體積以及維持 pyecharts 項目的輕量化運行,pyecharts 將不再自帶地圖 js 文件。如用戶需要用到地圖圖表(Geo、Map),可自行安裝對應的地圖文件包。
# 通過pip命令進行安裝
pip install echarts-countries-pypkg
pip install echarts-china-provinces-pypkg
pip install echarts-china-cities-pypkg
現在我們來開始正式使用pycharts,這里我們先直接使用官方的數據,感受一下可視化展示效果。
from pyecharts.charts import Bar
from pyecharts import options as opts
# V1 版本開始支持鏈式調用
bar=(
Bar
.add_xaxis(["襯衫", "毛衣", "領帶", "褲子", "風衣", "高跟鞋", "襪子"])
.add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105])
.add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])
.set_global_opts(title_opts=opts.TitleOpts(title="某商場銷售情況"))
)
bar.render_notebook
在這里順便安利一下jupyter,pyecharts在v0.1.9.2版本開始,在jupyter上可以直接調用實例(例如上方直接調用bar.render_notebook())就可以將圖表直接展示出來,非常方便。
如果腳本在非jupyter環境運行,圖表渲染方法需改為:
bar.render
默認情況下,pycharts生成圖表為HTML格式,也支持生成png圖片格式,如下:
from snapshot_selenium import snapshot as driver
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.render import make_snapshot
def bar_chart -> Bar:
c=(
Bar
.add_xaxis(["襯衫", "毛衣", "領帶", "褲子", "風衣", "高跟鞋", "襪子"])
.add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105])
.add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])
.reversal_axis
.set_series_opts(label_opts=opts.LabelOpts(position="right"))
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-測試渲染圖片"))
)
return c
# 需要安裝 snapshot-selenium 或者 snapshot-phantomjs
make_snapshot(driver, bar_chart.render, "bar.png")
在上面官方示例中的柱狀圖表我們已經能感受到pycharts可視化功能的強大,最后再介始幾種日常工作中常用的可視化圖表及對應示例。
6.1 Pie餅狀圖
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
pie=(
Pie
.add("", [list(z) for z in zip(Faker.choose(), Faker.values())])
.set_colors(["blue", "green", "yellow", "red", "pink", "orange", "purple"])
.set_global_opts(title_opts=opts.TitleOpts(title="Pie-設置顏色"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
pie.render_notebook
6.2 儀表盤
from pyecharts import options as opts
from pyecharts.charts import Gauge
g=(
Gauge
.add("", [("完成率", 66.6)])
.set_global_opts(title_opts=opts.TitleOpts(title="Gauge-基本示例"))
)
g.render_notebook
6.3 折線圖
import pyecharts.options as opts
from pyecharts.charts import Line
from pyecharts.faker import Faker
c=(
Line
.add_xaxis(Faker.choose)
.add_yaxis("商家A", Faker.values, is_smooth=True)
.add_yaxis("商家B", Faker.values, is_smooth=True)
.set_global_opts(title_opts=opts.TitleOpts(title="Line-smooth"))
)
c.render_notebook
6.4 K線圖
from pyecharts import options as opts
from pyecharts.charts import Kline
data=[
[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],
]
k=(
Kline
.add_xaxis(["2017/7/{}".format(i + 1) for i in range(31)])
.add_yaxis("k線圖", data)
.set_global_opts(
yaxis_opts=opts.AxisOpts(is_scale=True),
xaxis_opts=opts.AxisOpts(is_scale=True),
title_opts=opts.TitleOpts(title="K線圖-基本示例"),
)
)
k.render_notebook
6.5 地圖Map
from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.faker import Faker
map=(
Map
.add("中國地圖", [list(z) for z in zip(Faker.provinces, Faker.values())], "china")
.set_global_opts(title_opts=opts.TitleOpts(title="Map-基本示例"))
)
map.render_notebook
6.6 詞云圖
import pyecharts.options as opts
from pyecharts.charts import WordCloud
data=[
("生活資源", "999"),
("供熱管理", "888"),
("供氣質量", "777"),
("生活用水管理", "688"),
("一次供水問題", "588"),
("交通運輸", "516"),
("城市交通", "515"),
("環境保護", "483"),
("房地產管理", "462"),
("城鄉建設", "449"),
("社會保障與福利", "429"),
("社會保障", "407"),
("文體與教育管理", "406"),
("公共安全", "406"),
("公交運輸管理", "386"),
("出租車運營管理", "385"),
("供熱管理", "375"),
("市容環衛", "355"),
("自然資源管理", "355"),
("粉塵污染", "335"),
("噪聲污染", "324"),
("土地資源管理", "304"),
("物業服務與管理", "304"),
("醫療衛生", "284"),
("粉煤灰污染", "284"),
("占道", "284"),
("供熱發展", "254"),
("農村土地規劃管理", "254"),
("生活噪音", "253"),
("供熱單位影響", "253"),
("城市供電", "223"),
("房屋質量與安全", "223"),
("大氣污染", "223"),
("房屋安全", "223"),
("文化活動", "223"),
("拆遷管理", "223"),
("公共設施", "223"),
("供氣質量", "223"),
("供電管理", "223"),
("燃氣管理", "152"),
("教育管理", "152"),
("醫療糾紛", "152"),
("執法監督", "152"),
("設備安全", "152"),
("政務建設", "152"),
("縣區、開發區", "152"),
("宏觀經濟", "152"),
("教育管理", "112"),
("社會保障", "112"),
("生活用水管理", "112"),
("物業服務與管理", "112"),
("分類列表", "112"),
("農業生產", "112"),
("二次供水問題", "112"),
("城市公共設施", "92"),
("拆遷政策咨詢", "92"),
("物業服務", "92"),
("物業管理", "92"),
("社會保障保險管理", "92"),
("低保管理", "92"),
("文娛市場管理", "72"),
("城市交通秩序管理", "72"),
("執法爭議", "72"),
("商業煙塵污染", "72"),
("占道堆放", "71"),
("地上設施", "71"),
("水質", "71"),
("無水", "71"),
("供熱單位影響", "71"),
("人行道管理", "71"),
("主網原因", "71"),
("集中供熱", "71"),
("客運管理", "71"),
("國有公交(大巴)管理", "71"),
("工業粉塵污染", "71"),
("治安案件", "71"),
("壓力容器安全", "71"),
("身份證管理", "71"),
("群眾健身", "41"),
("工業排放污染", "41"),
("破壞森林資源", "41"),
("市場收費", "41"),
("生產資金", "41"),
("生產噪聲", "41"),
("農村低保", "41"),
("勞動爭議", "41"),
("勞動合同爭議", "41"),
("勞動報酬與福利", "41"),
("醫療事故", "21"),
("停供", "21"),
("基礎教育", "21"),
("職業教育", "21"),
("物業資質管理", "21"),
("拆遷補償", "21"),
("設施維護", "21"),
("市場外溢", "11"),
("占道經營", "11"),
("樹木管理", "11"),
("農村基礎設施", "11"),
("無水", "11"),
("供氣質量", "11"),
("停氣", "11"),
("燃氣管理", "11"),
("市容環衛", "11"),
("新聞傳媒", "11"),
("人才招聘", "11"),
("市場環境", "11"),
("行政事業收費", "11"),
("食品安全與衛生", "11"),
("城市交通", "11"),
("房地產開發", "11"),
("房屋配套問題", "11"),
("物業服務", "11"),
("物業管理", "11"),
("占道", "11"),
("園林綠化", "11"),
("戶籍管理及身份證", "11"),
("公交運輸管理", "11"),
("公路(水路)交通", "11"),
("房屋與圖紙不符", "11"),
("有線電視", "11"),
("社會治安", "11"),
("林業資源", "11"),
("其他行政事業收費", "11"),
("經營性收費", "11"),
("食品安全與衛生", "11"),
("體育活動", "11"),
("有線電視安裝及調試維護", "11"),
("低保管理", "11"),
("勞動爭議", "11"),
("社會福利及事務", "11"),
("一次供水問題", "11"),
]
c=(
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),
)
)
c.render_notebook
上述示例僅供參考,讀者們結合日常工作應用,學會舉一反三才是關健,更多Pychart示例介紹可見:代碼示例
*請認真填寫需求信息,我們會在24小時內與您取得聯系。