python編程——繪製創意圖(pecharts、turtle)

引言

Python常用的繪圖工具包括:matplotlib, seaborn, plotly等,以及一些其他專用於繪製某類圖如詞雲圖等的包,描繪繪圖軌跡的turtle包等。

1 turtle繪製奧運五環圖

turtle繪圖的函數非常好用,基本看到函數名字就能知道含義,下面使用turtle來繪製奧運五環圖。

1 導入庫

import turtle as p

2 定義畫圓函數

def drawCircle(x,y,c='red'):
    p.pu()# 擡起畫筆
    p.goto(x,y) # 繪製圓的起始位置
    p.pd()# 放下畫筆
    p.color(c)# 繪製c色圓環
    p.circle(30,360) #繪製圓:半徑,角度

3 畫筆基本設置

p.pensize(3) # 畫筆尺寸設置3

4 繪製五環圖調用畫圓函數

drawCircle(0,0,'blue')
drawCircle(60,0,'black')
drawCircle(120,0,'red')
drawCircle(90,-30,'green')
drawCircle(30,-30,'yellow')    
p.done()

結果奧運五環

2 turtle繪製漫天雪花

導入模塊
導入 turtle庫和 python的 random

import turtle as p
import random

繪製雪花

def snow(snow_count):
    p.hideturtle()
    p.speed(500)
    p.pensize(2)
    for i in range(snow_count):
        r = random.random()
        g = random.random()
        b = random.random()
        p.pencolor(r, g, b)
        p.pu()
        p.goto(random.randint(-350, 350), random.randint(1, 270))
        p.pd()
        dens = random.randint(8, 12)
        snowsize = random.randint(10, 14)
        for _ in range(dens):
            p.forward(snowsize)  # 向當前畫筆方向移動snowsize像素長度
            p.backward(snowsize) # 向當前畫筆反方向移動snowsize像素長度
            p.right(360 / dens)  # 順時針移動360 / dens度

繪製地面

def ground(ground_line_count):
    p.hideturtle()
    p.speed(500)
    for i in range(ground_line_count):
        p.pensize(random.randint(5, 10))
        x = random.randint(-400, 350)
        y = random.randint(-280, -1)
        r = -y / 280
        g = -y / 280
        b = -y / 280
        p.pencolor(r, g, b)
        p.penup()  # 擡起畫筆
        p.goto(x, y)  # 讓畫筆移動到此位置
        p.pendown()  # 放下畫筆
        p.forward(random.randint(40, 100))  # 眼當前畫筆方向向前移動40~100距離

主函數

def main():
    p.setup(800, 600, 0, 0)
    # p.tracer(False)
    p.bgcolor("black")
    snow(30)
    ground(30)
    # p.tracer(True)
    p.mainloop()
##運行
if __name__=="__main__":
    main()

動態圖結果展示:在這裏插入圖片描述

3 wordcloud詞雲圖

import hashlib
import pandas as pd
from wordcloud import WordCloud
geo_data=pd.read_excel(r"../data/geo_data.xlsx")
print(geo_data)
# 0     深圳 1     深圳  2     深圳  3     深圳 4     深圳 5 深圳
# 6     深圳 7     廣州  8     廣州  9     廣州
words = ','.join(x for x in geo_data['city'] if x != []) #篩選出非空列表值
wc = WordCloud(
    background_color="green", #背景顏色"green"綠色
    max_words=100, #顯示最大詞數
    font_path='./fonts/simhei.ttf', #顯示中文
    min_font_size=5,
    max_font_size=100,
    width=500  #圖幅寬度 )
x = wc.generate(words)
x.to_file('../data/geo_data.png')

測試結果:
在這裏插入圖片描述

4 pyecharts詞雲圖

from pyecharts import options as opts
from pyecharts.charts import Page, WordCloud
from pyecharts.globals import SymbolType

words = [ ("Python", 100), ("C++", 80),  ("Java", 95), ("R", 50),
         ("JavaScript", 79),("C", 65)]
def wordcloud() -> WordCloud:
    c = (WordCloud()
        # word_size_range: 單詞字體大小範圍
        .add("", words, word_size_range=[20, 100], shape='cardioid')
        .set_global_opts(title_opts=opts.TitleOpts(title="WordCloud")) )
    return c
wordcloud().render('./img/wordcloud.html')

("C",65)表示在本次統計中C語言出現65次
在這裏插入圖片描述

pyecharts繪製儀表盤

pyecharts繪製儀表盤,只需要幾行代碼:

from pyecharts import charts
# 儀表盤
gauge = charts.Gauge()
gauge.add('Python小例子', [('Python機器學習', 30), ('Python基礎', 70.),
                        ('Python正則', 90)])
gauge.render(path="./data/儀表盤.html")
print('ok')

在這裏插入圖片描述

pyecharts水球圖

from pyecharts import options as opts
from pyecharts.charts import Liquid, Page
from pyecharts.globals import SymbolType

def liquid() -> Liquid:
    c = (
        Liquid()
        .add("lq", [0.67, 0.30, 0.15])
        .set_global_opts(title_opts=opts.TitleOpts(title="Liquid"))
    )
    return c
liquid().render('./img/liquid.html')

水球圖的取值[0.67, 0.30, 0.15]表示下圖中的三個波浪線,一般代表三個百分比:在這裏插入圖片描述
備註,水球和儀表盤的代碼還沒調試通,報錯,from pyecharts import options as opts ImportError: cannot import name ‘options’,怎麼調試通,懇請大佬賜教。

參考來源:https://github.com/jackzhenguo/python-small-examples

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章