最近在研究 pyecharts 的用法,它是 python 的一個可視化工具,而後就想着結合微信來一塊兒玩 很少說,直接看效果:html
pip install pyecharts
pip install snapshot_selenium
pip install echarts-countries-pypkg
pip install echarts-china-provinces-pypkg
pip install echarts-china-cities-pypkg
pip install echarts-china-counties-pypkg
pip install wxpy
複製代碼
主要是獲取好友基本數據,用來作數據可視化 代碼以下:python
from wxpy import Bot, Chat
class Demo(Chat):
@staticmethod
def get_friend():
bot = Bot()
friends = bot.friends(update=True)
friend_data = []
for friend in friends:
if friend.sex == 1:
sex = "男"
elif friend.sex == 2:
sex = "女"
else:
sex = ""
friend_dict = {
"city": friend.city,
"province": friend.province,
"sex": sex,
"signature": friend.signature,
}
friend_data.append(friend_dict)
return friend_data
複製代碼
返回的是微信好友列表,包含好友城市,省份,性別和個性簽名等數據。編程
地理座標系組件用於地圖的繪製,支持在地理座標系上繪製散點圖,線集。json
在 pyecharts 中地理座標圖主要是基於 Geo 模塊微信
def geo_base():
city_data = get_data()
geo = Geo(init_opts=opts.InitOpts(theme="vintage"))
for city in city_data:
try:
geo.add_schema(maptype="china", itemstyle_opts=opts.ItemStyleOpts(color="gray"))
geo.add("微信好友分佈地圖", [city], type_="effectScatter", symbol_size=10)
geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(), title_opts=opts.TitleOpts(title="微信好友分佈地圖"), )
except Exception as e:
print(e)
pass
# geo.render("geo.html")
make_snapshot(driver, geo.render(), "geo.png")
複製代碼
運行完以後會在當前目錄生成一個 geo.png 的圖片 app
該圖片就是微信好友中國分佈地圖echarts
熱力圖也是基於 Geo 模塊 惟一的區別在 add 函數中 type 的爲 heatmapide
代碼以下:函數
def heat_map():
city_data = get_data()
geo = Geo(init_opts=opts.InitOpts(theme="vintage"))
for city in city_data:
try:
geo.add_schema(maptype="廣東", itemstyle_opts=opts.ItemStyleOpts(color="gray"))
geo.add("廣東好友熱力圖", [city], type_="heatmap", symbol_size=10)
geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(), title_opts=opts.TitleOpts(title="熱力圖"), toolbox_opts=opts.ToolboxOpts())
except :
pass
geo.render("heat.html")
複製代碼
好比能夠選擇某個省份的數據,運行以後的效果:工具
以上就是微信中的廣東好友分佈熱力圖
地圖是基於 Map 模塊進行擴展 主要用到函數是 add
def add(
# 系列名稱,用於 tooltip 的顯示,legend 的圖例篩選。
series_name: str,
# 數據項 (座標點名稱,座標點值)
data_pair: Sequence,
# 地圖類型,具體參考 pyecharts.datasets.map_filenames.json 文件
maptype: str = "china",
# 是否選中圖例
is_selected: bool = True,
# 是否開啓鼠標縮放和平移漫遊。
is_roam: bool = True,
# 當前視角的中心點,用經緯度表示
center: Optional[Sequence] = None,
# 當前視角的縮放比例。
zoom: Optional[Numeric] = 1,
# 自定義地區的名稱映射
name_map: Optional[dict] = None,
# 標記圖形形狀
symbol: Optional[str] = None,
# 是否顯示標記圖形
is_map_symbol_show: bool = True,
# 標籤配置項,參考 `series_options.LabelOpts`
label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),
# 提示框組件配置項,參考 `series_options.TooltipOpts`
tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
# 圖元樣式配置項,參考 `series_options.ItemStyleOpts`
itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,
)
複製代碼
代碼以下:
def map_base():
province_data = province_list()
maps = Map()
maps.add("", province_data, "china")
maps.set_global_opts(title_opts=opts.TitleOpts(title="微信好友分佈圖"), visualmap_opts=opts.VisualMapOpts())
make_snapshot(driver, geo.render(), "map.png")
複製代碼
運行以後,就是生成文章開頭所示的圖片,是否是頗有趣呀!
好友城市分佈詞雲圖
c = (
WordCloud()
.add("", city_list, word_size_range=[15, 50], shape="diamond", word_gap=10)
.set_global_opts(title_opts=opts.TitleOpts(title="diamond"))
)
make_snapshot(driver, c.render(), "world.png")
複製代碼
效果以下:
先來看下效果:
代碼以下:
def bar_datazoom_slider() -> Bar:
city_data = get_data()
c = (
Bar(init_opts=opts.InitOpts(page_title="條形圖"))
.add_xaxis([city[0] for city in city_data])
.add_yaxis("城市人數", [city[1] for city in city_data])
.set_global_opts(
title_opts=opts.TitleOpts(title="好友城市分佈條形圖"),
datazoom_opts=[opts.DataZoomOpts(orient="vertical")]
)
)
return c
複製代碼
最後,再提供你們微信頭像另外一種好玩的方式:
先看圖:
除此以外,還能定製文字,將本身想製做的文字,輸入便可!
公衆號 【Python編程與實戰】後臺回覆 "image" 便可獲取源碼