Pie(芒果派還是草莓派)
import matplotlib.pyplot as plt import numpy as np import pandas as pd from pylab import mpl import seaborn as sns mpl.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False plt.figure(facecolor='snow') sns.set_style("darkgrid", {"font.sans-serif": ['simhei', 'Droid Sans Fallback']}) font_size = 11 font_family = "SimHei" font_weight = "bold" plt.rc("font", size=font_size, family=font_family, weight=font_weight) def myPie(): data = [1249,1462,1728,1771,978] labels = ['2015','2016','2017','2018','2019'] explode = [0,0,0.3,0,0] colors = ['red','hotpink','purple','orange','yellow'] plt.axes(aspect="equal") #保證正圓 plt.xlim(0,8) plt.ylim(0,8) plt.gca().spines['right'].set_color('white') plt.gca().spines['top'].set_color('white') plt.gca().spines['left'].set_color('white') plt.gca().spines['bottom'].set_color('white') # 繪制餅圖 plt.pie(x=data, # 繪制數據 labels=labels, # 添加編程語言標簽 explode=explode, # 突出顯示Python colors=colors, # 設置自定義填充色 autopct='%.2f%%', # 設置百分比的格式,保留2位小數 pctdistance=0.8, # 設置百分比標簽和圓心的距離 labeldistance=1.37, # 設置標簽和圓心的距離 startangle=160, # 設置餅圖的初始角度 center=(4, 4), # 設置餅圖的圓心(相當於X軸和Y軸的范圍) radius=2.6, # 設置餅圖的半徑(相當於X軸和Y軸的范圍) counterclock=False, # 是否為逆時針方向,False表示順時針方向 wedgeprops={'linewidth': 1, 'edgecolor': 'pink'}, # 設置餅圖內外邊界的屬性值 # textprops={'fontsize': 19, 'color': 'black', 'fontproperties': my_font}, # 設置文本標簽的屬性值 textprops={'fontsize': 10, 'color': 'black'}, # 設置文本標簽的屬性值 frame=1) # 是否顯示餅圖的圓圈,1為顯示 # 不顯示X軸、Y軸的刻度值 plt.xticks(()) plt.yticks(()) # 添加圖形標題 # plt.title('專利分布', fontproperties=my_font) # plt.title('distribution of Food') # 顯示圖形 plt.show() fig.savefig('res/pic/4.png') def axPie(): fig, ax = plt.subplots(figsize=(8, 4), subplot_kw=dict(aspect="equal")) recipe = ['2015y 1249', '2016y 1462', '2017y 1728', '2018y 1771', '2019y 978'] data = [1249,1462,1728,1771,978] """ 參數wedgeprops以字典形式傳遞,設置餅圖邊界的相關屬性,例如圓環寬度0.5 餅狀圖默認從x軸正向沿逆時針繪圖,參數startangle可指定新的角(例如負40度)度起畫 """ wedges, texts = ax.pie(data, wedgeprops=dict(width=0.5), startangle=-40) # 創建字典bbox_props,設置文本框的邊框樣式(boxstyle:方框,pad設置方框尺寸)、前景色(fc)為白色(w)、邊框顏色(ec)為黑色(k)、線粗(lw)為0.72 bbox_props = dict(boxstyle="square,pad=0.3", fc="w", ec="k", lw=0.72) """ 參數集kw以字典形式傳遞,包含一系列用於繪圖標注的指定參數 xycoords用於指定點xy的坐標環境,xycoords='data'表示沿用被注釋的對象所采用的坐標系(默認設置) textcoords用於指定點xytext的坐標環境,textcoords='data'表示沿用被注釋的對象所采用的坐標系(默認設置) 參數arrowprops以字典形式傳遞,用於控制箭頭的諸多屬性,如箭頭類型(arrowstyle)、箭頭連接時的彎曲程度(connectionstyle) """ kw = dict(xycoords='data', textcoords='data', arrowprops=dict(arrowstyle="-"), bbox=bbox_props, zorder=0, va="center") for i, p in enumerate(wedges): # 遍歷每一個扇形 ang = (p.theta2 - p.theta1) / 2. + p.theta1 # 鎖定扇形夾角的中間位置,對應的度數為ang # np.deg2rad(x)將度數x轉為弧度(x*pi)/180 y = np.sin(np.deg2rad(ang)) # np.sin()求正弦 x = np.cos(np.deg2rad(ang)) # np.cos()求余弦 """ np.sign()符號函數:大於0返回1.0,小於0返回-1.0,等於0返回0.0 參數horizontalalignment用於設置垂直對齊方式,可選參數:left、right、center 當余弦值x大於0(即標簽在餅圖右側時,按框左側對齊)時,horizontalalignment="left" 當余弦值x小於0(即標簽在餅圖左側時,按框右側對齊)時,horizontalalignment="right" """ horizontalalignment = {-1: "right", 1: "left"}[int(np.sign(x))] connectionstyle = "angle,angleA=0,angleB={}".format(ang) # 參數connectionstyle用於控制箭頭連接時的彎曲程度 kw["arrowprops"].update({"connectionstyle": connectionstyle}) # 將connectionstyle更新至參數集kw的參數arrowprops中 """ 用一個箭頭/橫線指向要注釋的地方,再寫上一段話的行為,叫做annotate ax.annotate()用於對已繪制的圖形做標注 recipe[i]是第i個注釋文本 size設置字體大小 xy=(x1, y1)表示在給定的xycoords中,被注釋對象的坐標點 xytext=(x2, y2)表示在給定的textcoords中,注釋文本的坐標點 """ ax.annotate(recipe[i], size=15, xy=(x, y), xytext=(1.35 * np.sign(x), 1.4 * y), horizontalalignment=horizontalalignment, **kw) ax.set_title("") plt.show() fig.savefig('res/pic/3.png') if __name__ == "__main__": # drawLineStyle() # axPie() myPie()
myPie:
axPie: