如何在Python中使用pyecharts圖形畫可視化大屏
引言
pyecharts
是一個(gè)用于生成 ECharts 圖表的類庫(kù),可以方便地在 Python 中進(jìn)行數(shù)據(jù)可視化。ECharts 是一種使用 JavaScript 實(shí)現(xiàn)的,功能豐富的圖表庫(kù)。通過(guò) pyecharts
,我們可以在 Python 中創(chuàng)建各種類型的圖表,包括折線圖、柱狀圖、餅圖、散點(diǎn)圖等。使用pyecharts進(jìn)行可視化大屏的優(yōu)點(diǎn)有很多,比如:
豐富的圖表類型:pyecharts支持多種類型的圖表,可以滿足不同的數(shù)據(jù)可視化需求。
高效的性能:pyecharts的性能非常好,可以快速生成大量的圖表。
易用性:pyecharts的API設(shè)計(jì)簡(jiǎn)潔易用,可以快速上手。
可擴(kuò)展性:pyecharts支持自定義主題和與其他Python庫(kù)的集成,方便用戶擴(kuò)展功能。
一.Pyecharts的基本用法
1.語(yǔ)法結(jié)構(gòu)
Pyecharts的語(yǔ)法結(jié)構(gòu)包括以下部分:
- 圖表類型:Pyecharts支持多種圖表類型,如柱狀圖、折線圖、餅圖、散點(diǎn)圖等。每種圖表類型都有自己的方法和屬性,用于設(shè)置圖表的外觀和數(shù)據(jù)。
- 數(shù)據(jù):Pyecharts圖表的數(shù)據(jù)以列表形式給出,每個(gè)列表代表一個(gè)系列的數(shù)據(jù)。每個(gè)系列可以包含多個(gè)數(shù)據(jù)點(diǎn),每個(gè)數(shù)據(jù)點(diǎn)包含x軸和y軸的值。
- 配置項(xiàng):Pyecharts圖表支持多種配置項(xiàng),如標(biāo)題、圖例、提示框、工具欄等。這些配置項(xiàng)可以用于設(shè)置圖表的外觀和交互方式。
- 方法鏈:Pyecharts圖表的方法可以鏈?zhǔn)秸{(diào)用,例如
add_xaxis().add_yaxis()
。這種鏈?zhǔn)秸{(diào)用方式使得代碼更加簡(jiǎn)潔和易讀。
總之,Pyecharts的語(yǔ)法結(jié)構(gòu)基于ECharts的語(yǔ)法結(jié)構(gòu),通過(guò)Python類庫(kù)的方式實(shí)現(xiàn)。使用Pyecharts可以方便地在Python中創(chuàng)建各種類型的圖表,并對(duì)其進(jìn)行配置和定制。
二.繪制4個(gè)pyecharts圖形
pyecharts是一個(gè)基于Python語(yǔ)言的數(shù)據(jù)可視化庫(kù),可以用來(lái)創(chuàng)建各種類型的圖形,如折線圖、柱狀圖、散點(diǎn)圖、餅圖、地圖等。它基于Echarts庫(kù),通過(guò)Python語(yǔ)言提供了更簡(jiǎn)單、更便捷的方式來(lái)創(chuàng)建圖形,無(wú)需編寫復(fù)雜的JavaScript代碼。使用pyecharts,用戶可以通過(guò)簡(jiǎn)單的Python代碼來(lái)定義圖形的數(shù)據(jù)、樣式、布局等,然后生成HTML文件,從而實(shí)現(xiàn)圖形的展示和交互。通過(guò)pyecharts,用戶可以在Python環(huán)境下靈活、高效地進(jìn)行數(shù)據(jù)可視化工作。
1.需要注意的問(wèn)題
(1).繪制pyecharts圖形需要導(dǎo)入庫(kù)的相關(guān)類和函數(shù):在Python文件中導(dǎo)入pyecharts庫(kù)的相關(guān)類和函數(shù):
import pandas as pd from pyecharts.charts import Scatter from pyecharts import options as opts
(2).安裝pyecharts庫(kù):通過(guò)pip安裝pyecharts庫(kù),可以使用以下命令進(jìn)行安裝:
pip install pyecharts
2.繪制散點(diǎn)圖
1.安裝pyecharts庫(kù),導(dǎo)入必要的包:
# 繪制一個(gè)散點(diǎn)圖 import pandas as pd from pyecharts.charts import Scatter from pyecharts import options as opts
2.導(dǎo)入使用的數(shù)據(jù)集并準(zhǔn)備需要的數(shù)據(jù)并繪制散點(diǎn)圖
scatter=( Scatter() .add_xaxis(xaxis_data=x) .add_yaxis( '', y_axis=y, symbol_size=12, label_opts=opts.LabelOpts(is_show=False) ) .set_global_opts( xaxis_opts=opts.AxisOpts( type_='value', ), yaxis_opts=opts.AxisOpts( type_='value', ) ) ) scatter.render_notebook() #scatter.render('散點(diǎn)圖.html') 以下是這段代碼的逐行解釋: scatter=(:開始定義一個(gè)名為scatter的變量,該變量將存儲(chǔ)生成的散點(diǎn)圖。 Scatter():創(chuàng)建一個(gè)新的Scatter對(duì)象,這是生成散點(diǎn)圖的基礎(chǔ)。 .add_xaxis(xaxis_data=x):為散點(diǎn)圖添加x軸的數(shù)據(jù)。其中,x是一個(gè)包含x軸數(shù)據(jù)的列表或數(shù)組。 .add_yaxis('', y_axis=y, symbol_size=12, label_opts=opts.LabelOpts(is_show=False)): '':y軸的名稱(這里為空字符串,表示不顯示名稱)。 y_axis=y:為散點(diǎn)圖添加y軸的數(shù)據(jù)。其中,y是一個(gè)包含y軸數(shù)據(jù)的列表或數(shù)組。 symbol_size=12:設(shè)置散點(diǎn)的大小為12。 label_opts=opts.LabelOpts(is_show=False):設(shè)置標(biāo)簽的選項(xiàng),這里設(shè)置為不顯示標(biāo)簽。 .set_global_opts(:設(shè)置全局的配置選項(xiàng)。 xaxis_opts=opts.AxisOpts(type_='value',):設(shè)置x軸的類型為數(shù)值型。 yaxis_opts=opts.AxisOpts(type_='value',):設(shè)置y軸的類型為數(shù)值型。 ):結(jié)束.set_global_opts()方法的調(diào)用。 ): 結(jié)束Scatter()對(duì)象的創(chuàng)建。 scatter.render_notebook():在Jupyter Notebook中渲染這個(gè)散點(diǎn)圖。如果在一個(gè)Jupyter環(huán)境中運(yùn)行這段代碼,能看到一個(gè)在Notebook中顯示的散點(diǎn)圖。 scatter.render('散點(diǎn)圖.html'):這是一個(gè)注釋行,可以使用scatter.render('散點(diǎn)圖.html')將散點(diǎn)圖渲染到一個(gè)名為"散點(diǎn)圖.html"的HTML文件中。
以下是在jupyter中運(yùn)行上面的代碼所得到的散點(diǎn)圖:
3.繪制餅圖
根據(jù)以上繪制散點(diǎn)圖的具體描述,我們現(xiàn)在來(lái)繪制一個(gè)餅圖,繪制過(guò)程不明白的可以參考上面散點(diǎn)圖的詳細(xì)描述!
(1)導(dǎo)入數(shù)據(jù)包與所使用的數(shù)據(jù)文件
(2)這一段代碼使用了數(shù)據(jù)分箱 (數(shù)據(jù)分桶)和分組統(tǒng)計(jì)
- 使用
pd.cut
方法將df['年齡']
的數(shù)據(jù)分為四個(gè)年齡段:少年、青年、中年和老年。 - 2. 分箱的邊界是:0, 20, 40, 60, 100。
- 每個(gè)年齡段用相應(yīng)的標(biāo)簽標(biāo)識(shí)。
- 使用
df.groupby('年齡段').size()
對(duì)分箱后的數(shù)據(jù)進(jìn)行分組統(tǒng)計(jì),得到每個(gè)年齡段的人數(shù)。
# 數(shù)據(jù)分箱 df['年齡段'] = pd.cut( df['年齡'], bins = [0,20,40,60,100], labels=['少年','青年','中年','老年'] ) # 分組統(tǒng)計(jì) result = df.groupby('年齡段').size() #數(shù)據(jù)準(zhǔn)備 data = [[x,int(y)] for x,y in zip(result.index,result.values)] pie = ( Pie() .add( '',#數(shù)據(jù)的系列名稱,如果只有一個(gè)系列的數(shù)據(jù),填空字符 data, radius = ['30%','75%'], #橫向 左右 center=['25%','50%'], #上下 rosetype='radius' ) ) pie.render_notebook()
以下是圖形運(yùn)行展示:
4.雷達(dá)圖
(1)繪制雷達(dá)圖步驟:1.導(dǎo)入數(shù)據(jù)-2.定義數(shù)據(jù)標(biāo)簽-3.設(shè)置全局配置項(xiàng)-4.添加數(shù)據(jù)標(biāo)簽-5.設(shè)置圖例和標(biāo)題-6.最后打印圖表
(2)創(chuàng)建雷達(dá)圖并設(shè)置全局配置項(xiàng):
radar = Radar()
:創(chuàng)建一個(gè)新的雷達(dá)圖對(duì)象。radar.add_schema(schema=[opts.RadarIndicatorItem(name=labels[i], max_=20) for i in range(len(labels))])
:為雷達(dá)圖添加指標(biāo)和最大值。這里使用了一個(gè)列表推導(dǎo)式來(lái)為每個(gè)指標(biāo)設(shè)置名稱和最大值。
(3) 添加數(shù)據(jù)和標(biāo)簽:
- 使用一個(gè)循環(huán)來(lái)遍歷數(shù)據(jù)和標(biāo)簽,并使用
radar.add()
方法將數(shù)據(jù)添加到雷達(dá)圖中。 labels[i]
是當(dāng)前循環(huán)的指標(biāo)名稱。[x[i], y[i]]
是當(dāng)前指標(biāo)的數(shù)據(jù)。color="pink"
設(shè)置線條顏色為粉紅色。linestyle_opts=opts.LineStyleOpts(width=2, opacity=0.9)
設(shè)置線條樣式,包括寬度和透明度。
# 雷達(dá)圖 from pyecharts import options as opts from pyecharts.charts import Radar # 定義數(shù)據(jù)和標(biāo)簽 x = [[3, 6, 7, 8, 5, 9]] y = [[6, 8, 2, 7, 3, 5]] labels = ['年齡', '群眾', '團(tuán)員', '女生', '男生', '老師'] # 創(chuàng)建雷達(dá)圖并設(shè)置全局配置項(xiàng) radar = Radar() radar.add_schema(schema=[opts.RadarIndicatorItem(name=labels[i], max_=20) for i in range(len(labels))]) # 添加數(shù)據(jù)和標(biāo)簽 for i in range(len(x)): radar.add(labels[i], [x[i], y[i]], color="pink", linestyle_opts=opts.LineStyleOpts(width=2, opacity=0.9)) # 設(shè)置圖例和標(biāo)題 radar.set_global_opts(legend_opts=opts.LegendOpts(pos_left="center", pos_top="top"), title_opts=opts.TitleOpts(title="Radar Chart")) # 渲染圖表 #radar.render("雷達(dá)圖.html") radar.render_notebook()
圖片展示:
5. 柱形圖代碼展示
(1)導(dǎo)入數(shù)據(jù)包,從Excel文件中讀取數(shù)據(jù),然后按照“工作地所在省份”進(jìn)行分組并統(tǒng)計(jì)每個(gè)省份的會(huì)員卡號(hào)數(shù)量。最后,對(duì)結(jié)果進(jìn)行降序排序并取前30名。
(2)進(jìn)行數(shù)據(jù)準(zhǔn)備:將result
的索引轉(zhuǎn)化為列表并賦值給x
,然后將索引和值都轉(zhuǎn)化為列表并分別賦值給y1
和y2
。
(3).reversal_axis()
是用來(lái)實(shí)現(xiàn)柱形圖的,即從大到小的順序顯示。最后,設(shè)置全局配置項(xiàng),包括標(biāo)題、標(biāo)題鏈接和標(biāo)題文本樣式。
#繪制柱形圖 from pyecharts.charts import Bar df1=pd.read_excel('數(shù)據(jù)集/航空公司數(shù)據(jù).xlsx') result = df1.groupby('工作地所在省份')['會(huì)員卡號(hào)'].count().sort_values(ascending=False)[:30] #數(shù)據(jù)準(zhǔn)備 x = result.index.tolist() y1 = result.index.tolist() y2 = result.values.tolist() #畫圖 y = ( Bar( ) #init_opts=opts.InitOpts(width='600px',height='400px') .add_xaxis(x) .add_yaxis('人數(shù)',y1,stack=100) #stack 表示堆積效果,兩個(gè)stack參數(shù)值要相等 .add_yaxis('省份',y2,stack=100) .reversal_axis() #實(shí)現(xiàn)條形圖效果 .set_global_opts( title_opts=opts.TitleOpts( title="各省份用戶人數(shù)柱形圖(前30名)", title_link='https://www.baidu.com', #標(biāo)題鏈接 title_textstyle_opts = opts.TextStyleOpts( #文字樣本配置項(xiàng) color = 'red', font_size = 20, ) ) ) ) y.render_notebook()
以下是展示結(jié)果圖片:
三.制作大屏標(biāo)題
1.代碼解釋
1.這段代碼是使用pyecharts
庫(kù)來(lái)創(chuàng)建一個(gè)標(biāo)題為“大屏標(biāo)題”的餅圖,并設(shè)置了一些全局選項(xiàng)。
2.使用datetime.now()
獲取當(dāng)前時(shí)間,然后使用strftime('%Y-%m-%d')
格式化為'年-月-日'的格式,并賦值給now_time
變量。
3.使用render_notebook()
方法將圖表渲染到Jupyter Notebook中。這樣,當(dāng)在Jupyter環(huán)境中運(yùn)行這段代碼時(shí),我們會(huì)看到一個(gè)顯示“大屏標(biāo)題”和“截至:當(dāng)前時(shí)間”的空白區(qū)域,這是構(gòu)成大屏的標(biāo)題部分。
from pyecharts.charts import Pie from datetime import datetime now_time = datetime.now().strftime('%Y-%m-%d') # 獲取當(dāng)前時(shí)間 big_title = ( Pie() # 不畫圖,只顯示一個(gè)標(biāo)題,用來(lái)構(gòu)成大屏的標(biāo)題 .set_global_opts( title_opts=opts.TitleOpts(title="大屏標(biāo)題", title_textstyle_opts=opts.TextStyleOpts(font_size=40, # color='#FFFFFF', ), subtitle = f'截至:{now_time}', pos_top=10 ) ) ) big_title.render_notebook()
1.圖表結(jié)果展示
2.使用pyecharts庫(kù)創(chuàng)建Page對(duì)象
使用pyecharts
庫(kù)來(lái)創(chuàng)建一個(gè)Page
對(duì)象,該對(duì)象可以用來(lái)組合多個(gè)圖表并展示在一個(gè)頁(yè)面上。
(1)添加圖表到Page對(duì)象:使用add
方法將多個(gè)圖表添加到Page
對(duì)象中。這些圖表可以是上面已經(jīng)創(chuàng)建好的,如big_title
, scatter
, pie
, radar
, 和 y
這樣,這些圖表將會(huì)被組合到一個(gè)頁(yè)面上展示啦。
from pyecharts.charts import Page page = Page() # 創(chuàng)建Page對(duì)象 page.add( # 添加圖表到Page對(duì)象 big_title, scatter, pie, radar, y ) # page.render_notebook() page.render('tp.html') # 渲染Page對(duì)象到HTML文件 在html中可以調(diào)整各個(gè)圖形的位置和大小,按“Save Config”鍵保存配置chart_config.json(有的電腦不成功)。
在運(yùn)行這個(gè)代碼后可能會(huì)出現(xiàn) no test named ' false ' 的報(bào)錯(cuò):
解決方法有兩種:在anac
3.使用Python的BeautifulSoup庫(kù)來(lái)讀取和修改一個(gè)HTML文件
從bs4
模塊導(dǎo)入BeautifulSoup
類,這是一個(gè)用于解析HTML和XML文檔的庫(kù)。
from bs4 import BeautifulSoup
with open語(yǔ)句打開名為"tp.html"的文件,并設(shè)置模式為"r+"(讀寫模式),同時(shí)指定編碼為'utf-8',使用BeautifulSoup
類解析HTML文件內(nèi)容,并將解析后的對(duì)象賦值給html_bf
。
with open("tp.html", "r+", encoding='utf-8') as html: html_bf = BeautifulSoup(html, 'lxml')
- 使用BeautifulSoup的
select
方法來(lái)選擇所有帶有類名"chart-container"的<div>
標(biāo)簽。這些標(biāo)簽被存儲(chǔ)在divs
變量中。 - 下面的五行代碼都是為
divs
列表中的每個(gè)元素(即每個(gè)帶有"chart-container"類的<div>
標(biāo)簽)設(shè)置樣式屬性
divs = html_bf.select('.chart-container') # 根據(jù)css定位標(biāo)簽,選中圖像的父節(jié)點(diǎn)標(biāo)簽 divs[0]["style"] = "width:50%;height:99px;position:absolute;top:0px;left:10%;border-style:dashed;border-color:#000000;border-width:0px;" divs[1]["style"] = "width:350px;height:270px;position:absolute;top:50px;left:30px;border-style:solid;border-color:#88888;border-width:2px;" divs[2]["style"] = "width:350px;height:270px;position:absolute;top:50px;left:390px;border-style:solid;border-color:#66666;border-width:2px;" divs[3]["style"] = "width:350px;height:260px;position:absolute;top:350px;left:30px;border-style:solid;border-color:#444444;border-width:2px;" divs[4]["style"] = "width:350px;height:260px;position:absolute;top:350px;left:390px;border-style:solid;border-color:#444444;border-width:2px;" body = html_bf.find("body") # 根據(jù)標(biāo)簽名稱定位到body標(biāo)簽 body["style"] = "background-color:p;" # 修改背景顏色 html_new = str(html_bf) # 將BeautifulSoup對(duì)象轉(zhuǎn)換為字符 html.seek(0, 0) # 光標(biāo)移動(dòng)至 html.truncate() # 刪除光標(biāo)后的所有字符內(nèi)容 html.write(html_new) # 將由BeautifulSoup對(duì)象轉(zhuǎn)換得到的字符重新寫入html文件 html.close()
以上代碼的運(yùn)行結(jié)果展示如圖:
總結(jié):這段代碼的主要目的是讀取一個(gè)HTML文件,并使用BeautifulSoup庫(kù)修改其中特定元素的樣式,然后重新寫入修改后的內(nèi)容
大總結(jié)
使用pyecharts進(jìn)行數(shù)據(jù)可視化是一種非常有效的方式,它能夠?qū)?fù)雜的數(shù)據(jù)轉(zhuǎn)化為直觀的圖表,幫助我們更好地理解和分析數(shù)據(jù)。這是我對(duì)pyecharts進(jìn)行數(shù)據(jù)可視化的一些心得體會(huì)和總結(jié):簡(jiǎn)潔易用:pyecharts的API設(shè)計(jì)非常簡(jiǎn)潔,使用起來(lái)非常方便。交互性強(qiáng):pyecharts支持圖表之間的交互,比如可以通過(guò)鼠標(biāo)懸停在某個(gè)數(shù)據(jù)點(diǎn)上,顯示更多的信息。可擴(kuò)展性強(qiáng):pyecharts支持自定義主題,我們可以根據(jù)需要調(diào)整圖表的樣式。同時(shí),它也支持與其他Python庫(kù)的集成,比如使用pandas進(jìn)行數(shù)據(jù)處理,使用matplotlib進(jìn)行數(shù)據(jù)預(yù)處理等。
在使用pyecharts進(jìn)行數(shù)據(jù)可視化的過(guò)程中,我也遇到了一些問(wèn)題。比如,對(duì)于一些復(fù)雜的圖表類型,可能需要花費(fèi)更多的時(shí)間來(lái)學(xué)習(xí)和理解。另外,雖然pyecharts的性能很好,但是如果需要生成大量的圖表或者需要實(shí)時(shí)渲染的場(chǎng)景,可能需要考慮其他的解決方案。
總的來(lái)說(shuō),使用pyecharts進(jìn)行數(shù)據(jù)可視化是一種非常有效的方式。它簡(jiǎn)潔易用,交互性強(qiáng),可擴(kuò)展性強(qiáng),性能良好,社區(qū)活躍。在未來(lái)的工作中,我會(huì)繼續(xù)使用pyecharts進(jìn)行數(shù)據(jù)可視化,也會(huì)向社區(qū)貢獻(xiàn)自己的力量。
到此這篇關(guān)于在Python中使用pyecharts圖形畫可視化大屏的文章就介紹到這了,更多相關(guān)Python pyecharts圖形畫可視化大屏內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python+Turtle繪制可愛(ài)的多啦A夢(mèng)的示例代碼
這篇文章主要介紹了如何利用python中的Turtle模塊繪制一個(gè)童年記憶的卡通人物哆啦A夢(mèng),文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-03-03python中for語(yǔ)句簡(jiǎn)單遍歷數(shù)據(jù)的方法
這篇文章主要介紹了python中for語(yǔ)句簡(jiǎn)單遍歷數(shù)據(jù)的方法,以一個(gè)簡(jiǎn)單實(shí)例形式分析了Python中for語(yǔ)句遍歷數(shù)據(jù)的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-05-05python轉(zhuǎn)換pkl模型文件為txt文件問(wèn)題
這篇文章主要介紹了python轉(zhuǎn)換pkl模型文件為txt文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06Python3爬蟲里關(guān)于代理的設(shè)置總結(jié)
在本篇文章里小編給大家整理的是一篇關(guān)于Python3爬蟲里關(guān)于代理的設(shè)置總結(jié),需要的朋友們可以參考下。2020-07-07解決python subprocess參數(shù)shell=True踩到的坑
這篇文章主要介紹了解決python subprocess參數(shù)shell=True踩到的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04Python字符串對(duì)齊、刪除字符串不需要的內(nèi)容以及格式化打印字符
這篇文章主要給大家介紹了關(guān)于Python字符串對(duì)齊、刪除字符串不需要的內(nèi)容以及格式化打印字符的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01基于Python實(shí)現(xiàn)的購(gòu)物商城管理系統(tǒng)
這篇文章主要介紹了基于Python實(shí)現(xiàn)的購(gòu)物商城管理系統(tǒng),幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-04-04Numpy創(chuàng)建NumPy矩陣的簡(jiǎn)單實(shí)現(xiàn)
本文主要介紹了Numpy創(chuàng)建NumPy矩陣的簡(jiǎn)單實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02