一、画饼图并且解决中文乱码问题:
import matplotlib.pyplot as plt
myfont = mpl.font_manager.FontProperties(fname=r"/Users/Anne/Downloads/weuruan 2/msyh.ttf") #fname指定字体文件 选简体显示中文#fname="本机字体路径"
mpl.rcParams['axes.unicode_minus'] = False
mpl.rcParams['font.sans-serif'] = ['SimHei']
# Pie chart, where the slices will be ordered and plotted counter-clockwise:
labels = '青Frogs', 'Hogs', 'Dogs', 'Logs'
sizes = [15, 30, 45, 10]
explode = (0, 0.1, 0, 0) # only "explode" the 2nd slice (i.e. 'Hogs')
fig1, ax1 = plt.subplots()
patches,l_text,p_text = ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
shadow=True, startangle=90)
ax1.axis('equal',fontproperties=myfont) # Equal aspect ratio ensures that pie is drawn as a circle.
for t in l_text:
t.set_fontproperties(myfont) # 把每个文本设成中文字体
plt.show()
import matplotlib.pyplot as plt
plt.style.use('ggplot')
edu = [0.2515,0.3724,0.3336,0.0368,0.0057]
labels = ['中专','大专','本科','硕士','其他']
explode = [0,0.1,0,0,0]
colors=['#9999ff','#ff9999','#7777aa','#2442aa','#dd5555']
plt.axes(aspect='equal')
plt.xlim(0,4)
plt.ylim(0,4)
patches,l_text,p_text = plt.pie(x = edu,
explode=explode,
labels=labels,
colors=colors,
autopct='%.1f%%',
pctdistance=0.8,
labeldistance = 1.15,
startangle = 180,
radius = 1.5,
counterclock = False,
wedgeprops = {'linewidth': 1.5, 'edgecolor':'green'},
textprops = {'fontsize':12, 'color':'k'},
center = (1.8,1.8),
frame = 1
)
plt.xticks(())
plt.yticks(())
plt.title('芝麻信用失信用户教育水平分布',fontproperties=myfont)
for t in l_text:
t.set_fontproperties(myfont) # 把每个文本设成中文字体
plt.show()
#x:指定绘图的数据
#explode:指定饼图某些部分的突出显示,即呈现爆炸式
#labels:为饼图添加标签说明,类似于图例说明
#colors:指定饼图的填充色
#autopct:自动添加百分比显示,可以采用格式化的方法显示
#pctdistance:设置百分比标签与圆心的距离
#shadow:是否添加饼图的阴影效果
#labeldistance:设置各扇形标签(图例)与圆心的距离
#startangle:设置饼图的初始摆放角度
#radius:设置饼图的半径大小
#counterclock:是否让饼图按逆时针顺序呈现
#wedgeprops:设置饼图内外边界的属性,如边界线的粗细、颜色等
#textprops:设置饼图中文本的属性,如字体大小、颜色等
#center:指定饼图的中心点位置,默认为原点
#frame:是否要显示饼图背后的图框,如果设置为True的话,需要同时控制图框x轴、y轴的范围和饼图的中心位置
import matplotlib.pyplot as plt
from matplotlib import font_manager
# 中文字体准备
my_font = font_manager.FontProperties(fname="/Library/Fonts/Songti.ttc",size=16)
# 数据准备
movie_name = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴','降魔传','追捕','七十七天','密战','狂兽','其它']
place_count = [60605,54546,45819,28243,13270,9945,7679,6799,6101,4621,20105]
# 显示饼图
# patches:为了得到饼图的返回值
# l_texts:饼图外标签的文本
# p_texts:饼图内部文本的
patches,l_text,p_text = plt.pie(place_count, labels=movie_name, autopct="%1.2f%%", colors=['b', 'r', 'g', 'y', 'c', 'm', 'y', 'm', 'c', 'g', 'g'], shadow=True, startangle=90, labeldistance = 1.1, pctdistance = 0.8)
# labeldistance:文本的位置离远点有多远,1.1指1.1倍半径的位置
# autopct:圆里面的文本格式,%1.2f %%表示小数有2位,整数有1位的浮点数
# shadow:饼是否有阴影
# startAngle:起始角度为0,从0开始逆时针转,为第一块。一般选择从90度开始比较好看
# pctdistance:百分比的文本离圆心的距离
for t in l_text:
t.set_fontproperties(my_font) # 把每个文本设成中文字体
# 图形保存到该文件路径下
plt.savefig("pie.png")
# 保持饼形图圆形,保证长宽一样
plt.axis("equal")
plt.show()
二、条形图📊
matplotlib.pyplot.rcParams#中文乱码的处理
#对坐标轴不能正确显示负号进行设置
matplotlib.pyplot.bar#绘图,依次x轴、y轴、x轴刻度标签对齐形式、填充色、填充透明度
matplotlib.pyplot.ylabel#添加轴标签
matplotlib.pyplot.title#添加标题
matplotlib.pyplot.xticks#添加刻度标签
matplotlib.pyplot.ylim#设置Y轴的刻度范围
enumerate#循环为每个条形图添加数值标签,enumerate返回x=gpd的index,y=gdp的value
matplotlib.pyplot.text(x, y, ha=)#ha函数定义水平值标签的对齐形式
matplotlib.pyplot.show()#显示图形
import matplotlib.pyplot as plt
import matplotlib as mpl
myfont = mpl.font_manager.FontProperties(fname=r"/Users/Anne/Downloads/weuruan 2/msyh.ttf") #fname指定字体文件 选简体显示中文
mpl.rcParams['axes.unicode_minus'] = False
mpl.rcParams['font.sans-serif'] = ['SimHei']
GDP = [12406.8,13908.57,9386.87,9143.64]
#plt.rcParams['font.sans-serif'] =['SimHei']
#plt.rcParams['axes.unicode_minus'] = False
plt.bar(range(4), GDP, align = 'center',color='steelblue', alpha = 0.8)
plt.ylabel('GDP',fontproperties=myfont)
plt.title('四个直辖市GDP大比拼',fontproperties=myfont)
plt.xticks(range(4),['北京市','上海市','天津市','重庆市'],fontproperties=myfont)
plt.ylim([4000,16000])
for x,y in enumerate(GDP):
print(x)
print(y)
plt.text(x,y+100,'%s' %round(y,1),ha='center')
plt.show()
def barGrph(X,Y,Ylabel,Title,Ylim, Align ,Color, Alpha,Myfont):
'''
:X:横坐标数据,Y:纵坐标数据,
Ylabel:纵坐标标签名,
Title:标题名(图名),
Ylim:纵坐标的刻度值范围,
Align:变量值位置设定 ,
Color:bar图的颜色,
Alpha:透明度,
Myfont:字体类型
'''
plt.bar(range(len(X.unique())), list(Y), align = Align,color=Color, alpha = Alpha)
plt.ylabel(Ylabel,fontproperties=Myfont)
plt.title(Title,fontproperties=Myfont)
plt.xticks(range(len(X.unique())),list(X.unique()),fontproperties=Myfont)
plt.ylim(Ylim)
for x,y in enumerate(Y):
plt.text(x,y+3000,'%s' %round(y,1),ha='center')
plt.show()
import matplotlib.pyplot as plt
price = [39.5,39.9,45.4,38.9,33.34]
#plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
#plt.rcParams['axes.unicode_minus'] = False
plt.barh(range(5), price, align = 'center',color='steelblue', alpha = 0.8)
plt.xlabel('价格',fontproperties=myfont)
plt.title('不同平台书的最低价比较',fontproperties=myfont)
plt.yticks(range(5),['亚马逊','当当网','中国图书网','京东','天猫'],fontproperties=myfont)
plt.xlim([32,47])
for x,y in enumerate(price):
plt.text(y+0.1,x,'%s' %y,va='center')
plt.show()
import matplotlib.pyplot as plt
import numpy as np
Y2016 = [15600,12700,11300,4270,3620]
Y2017 = [17400,14800,12000,5200,4020]
labels = ['北京','上海','香港','深圳','广州']
bar_width = 0.45
plt.bar(np.arange(5), Y2016, label = '2016', color = 'steelblue', alpha = 0.8, width = bar_width)
plt.bar(np.arange(5)+bar_width, Y2017, label = '2017', color = 'indianred', alpha = 0.8, width = bar_width)
plt.xlabel('Top5城市',fontproperties=myfont)
plt.ylabel('家庭数量',fontproperties=myfont)
plt.title('亿万财富家庭数Top5城市分布',fontproperties=myfont)
plt.xticks(np.arange(5)+bar_width,labels,fontproperties=myfont)
plt.ylim([2500, 19000])
for x2016,y2016 in enumerate(Y2016):
plt.text(x2016, y2016+100, '%s' %y2016)
for x2017,y2017 in enumerate(Y2017):
plt.text(x2017+bar_width, y2017+100, '%s' %y2017)
plt.legend()
# 图形保存到该文件路径下
plt.savefig("bar.png")
plt.show()
多重条形图📊
推叠图:
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
# 中文字体准备
my_font = font_manager.FontProperties(fname="/Library/Fonts/Songti.ttc",size=24)
date =[1,2,3,4,5]
earn=[156,356,574,300,687]
pay=[[15,30,27,43,21],[22,38,27,18,42]]
plt.stackplot(date,earn,pay, colors=['green','yellow','orange'])
plt.xlabel('time')
plt.ylabel('value')
plt.plot([],[],color='green', label="income", lineWidth=5)
plt.plot([],[],color='yellow',label="launch", lineWidth=5)
plt.plot([],[],color='orange',label="dinner", lineWidth=5)
plt.title(u'叠堆图示例——统计五天收入与支出', FontProperties=myfont)
plt.legend()
plt.show()