200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > matplotlib饼图百分比可视化

matplotlib饼图百分比可视化

时间:2019-05-23 16:07:14

相关推荐

matplotlib饼图百分比可视化

填写自己的mysql连接方式和sql语句即可实现饼图带百分比,线长度自己可以调参数

import pymysql

from matplotlib import pyplot as plt

import numpy as np

class mysql_func():

# 配置mysql数据库连接池

definit(self, host=’’, user=’’, password=’’, port=, database=’’,

charset=’’):

self.host = host

self.user = user

self.password = password

self.port = port

self.database = database

self.charset = charset

self.db = pymysql.connect(host=host, user=user, password=password, port=port, database=database,

charset=charset)

# 取数据,tuple类型返回def get_data(self, sql):self.curors = self.db.cursor()self.curors.execute(sql)mit()data = self.curors.fetchall()self.curors.close()return data# 存数据,int类型返回成功条数def get_row_number(self, sql, data=None):self.curors = self.db.cursor()if data is None or len(data) == 0:self.curors.execute(sql)else:if type(data[0]) != type([]):data = [data]self.curors.executemany(sql, data)mit()data = self.curors.rowcountself.curors.close()return data# 取数据,[dict]类型返回def get_json(self, sql):self.curors = self.db.cursor()self.curors.execute(sql)mit()columns = [col[0] for col in self.curors.description]data = [dict(zip(columns, row)) for row in self.curors.fetchall()]self.curors.close()return data

def academic_co_country_img():

mysql_aliyun = mysql_func(host=’’, user=’’, password=’’, port=,

database=’’)

sql = ‘’’’’’

country_data = mysql_aliyun.get_data(sql)

print(country_data)

fig, ax = plt.subplots(figsize=(10, 6), subplot_kw=dict(aspect=“equal”))

size = 0.3

vals = np.array([[k[1],0] for k in country_data])

# print(vals.sum())

ingredients = [k[0] for k in country_data]

print(ingredients)

recipe = []

for k in country_data:

recipe.append(k[1]/vals.sum())

# recipe.append(format(k[1]/vals.sum(),’.1%’))

# print(recipe)

new_ingredients = []

for l in range(len(ingredients)):

new_ingredients.append(ingredients[l] + " " + str(format(recipe[l],’.1%’)))

print(new_ingredients)

new_data = []qita_num = 0data = [k[1] for k in country_data]if len(data) >= 10:for d in range(len(data)):if d > 9:new_data.append(data[d])qita_num += data[d]new_data.append(qita_num)else:new_data = dataprint(new_data,"************************")wedges, texts = ax.pie(data, wedgeprops=dict(width=0.3), startangle=-40)ax.legend(new_ingredients, title="", loc="upper left", bbox_to_anchor=(1, 0, 0.5, 1), )# 每一类别说明框# boxstyle框的类型,fc填充颜色,ec边框颜色,lw边框宽度bbox_props = dict(boxstyle="square,pad=0.3", fc='white', ec="white", lw=0.72)# 设置框引出方式kw = dict(arrowprops=dict(arrowstyle="-"),bbox=bbox_props, zorder=0, va="center")# 添加标签ta = 1.4for i, p in enumerate(wedges):# if recipe[i] >= 0.03:if i < 10:ang = (p.theta2 - p.theta1) / 2. + p.theta1y = np.sin(np.deg2rad(ang))x = np.cos(np.deg2rad(ang))# 设置方向horizontalalignment = {-1: "right", 1: "left"}[int(np.sign(x))]connectionstyle = "angle,angleA=0,angleB={}".format(ang)kw["arrowprops"].update({"connectionstyle": connectionstyle})#设置标注 这一步可以调整饼图的线ax.annotate(format(recipe[i],'.1%'), xy=(x, y), xytext=(1.35 * np.sign(x), 1.4 * y),horizontalalignment=horizontalalignment, color='black', **kw)ta -= 0.3ax.set_title(" ")plt.show()'''cmap = plt.get_cmap("tab20c")outer_colors = cmap(np.arange(3) * 4)wedges = ax.pie(vals.sum(axis=1), wedgeprops=dict(width=0.5), startangle=-40, autopct='%.1f%%',radius=1, pctdistance=1.2, labeldistance=1.2)ax.legend(ingredients, title="", loc="upper left", bbox_to_anchor=(1, 0, 0.5, 1),)ax.set(aspect="equal", title='')plt.show()'''

ifname== ‘main’:

academic_co_country_img()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。