一 柱状图
import pandas as pd
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
#设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
#刻度的负数
plt.rcParams['axes.unicode_minus'] = False
data = pd.read_excel(r"C:01.柱状图.xlsx")
data.sort_values(by='分数',inplace=True,ascending=False)
plt.bar(data.姓名,data.分数,label='成绩')
plt.legend(loc="upper left")
plt.title('三年级二班成绩',fontsize=16,fontweight='bold')
#设置标题
plt.xlabel("姓名")
plt.ylabel("分数")
#设置字体倾斜 rotation倾斜度数
plt.xticks(data.姓名,rotation=45)
#刻度范围
plt.ylim([-30,120])
#紧凑型布局
plt.tight_layout()
plt.show(block = True)
二 条形图 orientation="horizontal"
import pandas as pd
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
#设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
# #刻度的负数
# plt.rcParams['axes.unicode_minus'] = False
data = pd.read_excel(r"01.柱状图.xlsx")
data.sort_values(by='分数',inplace=True,ascending=False)
plt.bar(x=0,bottom=data.姓名,height=0.5,width=data.分数,color='pink',orientation='horizontal',alpha=0.5)
plt.show(block=True)
三 分组状形图
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import matplotlib
matplotlib.use("TKAgg")
#用黑体显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
data = pd.read_excel(03.分组柱状图.xlsx")
data.sort_values(by='第二年',inplace=True,ascending=False)
#转换为列表
# print(data['姓名'].values.tolist())
plt.bar(x=data.姓名,height=data.第一年,color='blue',width=0.5,label="第一年",alpha=0.5)
plt.bar(x=np.arange(len(data.姓名))+0.5,height=data.第二年,color='pink',width=0.5,label="第二年")
plt.legend()
#轴旋转
plt.xticks(data.姓名)
ax = plt.gca()
ax.set_xticklabels(data.姓名,rotation=45,ha="center")
#对图形的设置
figure = plt.gcf()
figure.subplots_adjust(left=0.1,bottom=0.3)
#循环标签
for x ,y1 in enumerate(data.第一年):
plt.text(x, y1,str(y1),fontsize=20,rotation=0,ha='center',va='bottom')
for x ,y2 in enumerate(data.第二年):
plt.text(x+0.3,y2,str(y2),fontsize=20,rotation=0,ha='center',va='bottom')
plt.show(block=True)
三 叠加柱形图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use("TKAgg")
#用黑体显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
data = pd.read_excel(r"C:/04.堆叠柱状图.xlsx")
plt.bar(np.arange(9),data.语文,label='语文',color='pink')
plt.bar(np.arange(9),data.数学,bottom=data.语文,label='数学',color='purple',alpha=0.5)
plt.bar(np.arange(9),data.英语,bottom=data.语文+data.数学,label='英语',color='blue',alpha=0.2)
#设置x轴
plt.xticks(np.arange(9),data.姓名)
ax = plt.gca()
ax.set_xticklabels(data.姓名,rotation=45)
plt.legend(loc='upper center',ncol=3)
#y的刻度
plt.ylim([10,350])
#标签循坏
for x1,y1 in enumerate(data.语文):
plt.text(x1,y1-10,str(y1),color='gray',fontsize=10,ha='center',va='center')
for x2,y2 in enumerate(data.语文+data.数学):
plt.text(x2,y2-10,str(y2),color='gray',fontsize=10,ha='center',va='center')
for x3,y3 in enumerate(data.语文+data.数学+data.英语):
plt.text(x3,y3-10,str(y3),color='gray',fontsize=10,ha='center',va='center')
plt.show(block=True)
四 叠加条形图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use("TKAgg")
plt.rcParams['font.sans-serif'] = ['SimHei']
data = pd.read_excel(r/07.饼图.xlsx")
#数据姓名列 数据转化为元祖 tuple 转化为列表list
#plt.pie label explode color autopct pctdistance counterclock textprops
plt.pie(data.第一次,labels=tuple(data.姓名),explode=(0,0.2,0),colors=['r','g','b'],autopct='%.1f%%',startangle=90,counterclock=False,labeldistance=0.8,textprops={'fontsize':12,'color':'w'},shadow=True)
#将饼图为正圆
plt.axis('equal')
#添加图例 图例内边距 borderaxespad 图例内边距 bbox_inches忽略不可见的轴
plt.legend(loc='upper right',fontsize=10,bbox_to_anchor=[1.1,1.05],borderaxespad=0.3,ncol=3)
plt.savefig(r"C:/Users/xx/Desktop/03.matplotlib课件和笔记/matplotlib课件和笔记/课件/00.图.jpg",dpi=200)
plt.show(block=True)
五 折线图
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use("TKAgg")
data = pd.read_excel(r"08.折线图.xlsx")
plt.plot(data.时间,data.蔬菜,color='b',marker='*',ms=10)
plt.plot(data.时间,data.水果,color='c',marker='o',ms=10)
plt.plot(data.时间,data.食品,color='m',marker='h',ms=10)
plt.plot(data.时间,data.用品,color='y',marker='d',ms=10)
for z in[data.蔬菜,data.水果,data.食品,data.用品]:
for x,y in zip(data.时间,z):
plt.text(x,y+0.3,str(y),ha='center',va='center',fontsize=8,rotation=0)
plt.show(block=True)
六 平均线
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
plt.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.use("TKAgg")
data = pd.read_excel(r"09.折线与柱状组合图.xlsx")
plt.bar(data.班级,data.销售量,label='销售量',color='m',alpha=0.5)
#显示图例
plt.legend(loc='upper right')
#平均线
ping = np.mean(data.销售量)
plt.axhline(y=ping,c='y',ls=':',lw=2)
plt.show(block=True)
七 与子画布图
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib
matplotlib.use('TKAgg')
plt.rcParams['font.sans-serif'] = ['SimHei']
data = pd.read_excel(r"09.折线与柱状组合图.xlsx")
fig = plt.figure()
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222)
ax3 = fig.add_subplot(223)
plt.plot(data.班级,data.毛利率,label='毛利率',c='m',alpha=0.5,marker='*',ms=10)
ax4 = fig.add_subplot(224)
plt.bar(data.班级,data.销售量,color='m',alpha=0.5,label='销售量')
plt.show(block=True)
八 创建多个子图
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib
matplotlib.use('TKAgg')
plt.rcParams['font.sans-serif'] = ['SimHei']
data = pd.read_excel(r"/09.折线与柱状组合图.xlsx")
#figsize 宽和高
# fig = plt.figure(num='宋宋',figsize=(8,10),dpi=300,facecolor='m',alpha=0.5)
fig = plt.figure()
plt.subplot(221)
plt.bar(data.班级,data.销售量)
plt.subplot(222)
plt.pie(x=data.销售量,labels=tuple(data.班级))
plt.subplot(223)
plt.plot(data.班级,data.销售量)
plt.show(block=True)
九 新增子图
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import matplotlib
matplotlib.use('TKAgg')
plt.rcParams['font.sans-serif'] = ['SimHei']
data = pd.read_excel(r"09.折线与柱状组合图.xlsx")
fig = plt.figure()
# left,bottom,width,height=0.1,0.1,0.8,0.8
#
# ax1 = fig.add_axes([left,bottom,width,height])
ax1 = fig.add_axes([0.1,0.1,0.8,0.8])
ax1.set_title("销售量")
ax1.bar(data.班级,data.销售量)
ax2 = fig.add_axes([0.65,0.65,0.25,0.25])
ax2.plot(data.班级,data.毛利率)
ax2.set_title("毛利率")
#
# ax1 = fig.add_subplot(221)
#
# ax1.bar(data.班级,data.销售量)
#
# ping = np.mean(data.销售量)
#
# plt.axhline(y=ping,ls=':',lw=2,c='y')
#
# ax4 = fig.add_subplot(224)
#
# ax4.bar(data.班级,data.销售量)
plt.show(block=True)
#figsize 宽和高
# fig = plt.figure(num='宋宋',figsize=(8,10),dpi=300,facecolor='m',alpha=0.5)
# fig = plt.figure()
#
# plt.subplot(221)
#
# plt.bar(data.班级,data.销售量)
#
# plt.subplot(222)
#
# plt.pie(x=data.销售量,labels=tuple(data.班级))
#
# plt.subplot(223)
#
# plt.plot(data.班级,data.销售量)
#
十 柱状图 折线图 twins 百分比
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#实现百分比
import matplotlib.ticker as ticker
import matplotlib
matplotlib.use("TKAgg")
plt.rcParams['font.sans-serif'] =['SimHei']
data = pd.read_excel(r"/09.折线与柱状组合图.xlsx")
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.bar(data.班级,data.销售量,label='销售量')
plt.xticks(data.班级)
ax1 = plt.gca()
ax1.set_xticklabels(data.班级,rotation=45,ha="center")
plt.legend(loc="upper left")
ax1.set_ylim([0,12500])
#2的共享轴是1 twins()ax2 = ax1.twins
ax2 = ax1.twinx()
#百分比标签
# formatter = mtick.FormatStrFormatter('%.2f%%')
ax2.plot(data.班级,data.毛利率,marker='o',color='blue',label='毛利率',alpha=0.5)
# ax2.yaxis.set_major_formatter(formatter)
#自己设置百分比
pec = ticker.PercentFormatter(1,2)
ax2.yaxis.set_major_formatter(pec)
# ax2.set_ylim([0,1])
for x,y in zip(data.班级,data.毛利率):
plt.text(x,y,str(round(y*100,2))+'%',color='pink',fontsize=10)
ax2.legend(loc='upper right')
# for x, y in zip(data.班级,data.毛利率):
#
# plt.text(x,y,str(y)+'%',c='b',alpha=0.5,fontsize=10)
plt.show(block=True)
十一 日期转换 strftime
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import matplotlib
matplotlib.use('TKAgg')
plt.rcParams['font.sans-serif'] =['SimHei']
data = pd.read_excel(r"12.日期.xlsx")
date = [d.strftime('%m-%d') for d in data.日期]
plt.plot(date,data.销售)
# plt.xticks(date,rotation=45)
plt.tight_layout()
plt.show(block=True)
十一 网格参数
plt.grid(True, linestyle='--', color='gray', linewidth=0.5) b:布尔值,表示是否绘制网格线,默认为True。 which:字符串,指定应用于哪些轴('major', 'minor', 或 'both'),默认为'major'。 axis:字符串,指定应用于哪个轴('x', 'y', 或 'both'),默认为'both'。 color:字符串或颜色代码,指定网格线的颜色。 linestyle:字符串,指定网格线的样式(如'-', '--', '-.', ':')。 linewidth:浮点数,指定网格线的宽度。
十二 散点图
#显示全部的列
pd.options.display.max_columns=None
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
#显示全部的列
pd.options.display.max_columns=None
import matplotlib
matplotlib.use('TKAgg')
plt.rcParams['font.sans-serif'] =['SimHei']
data = pd.read_excel(r"16.散点图.xlsx")
plt.scatter(data.身高,data.体重,s=data.体重,c=data.身高,marker='o',alpha=0.5)
plt.colorbar()
# plt.plot(data.日期,data.销售)
#
# plt.grid(axis='x',linestyle=':',color='pink')
# date = [d.strftime('%m-%d') for d in data.日期]
#
# plt.plot(date,data.销售)
# plt.xticks(date,rotation=45)
# plt.tight_layout()
plt.show(block=True)
十三 直方图
plt.hist(data, bins=30) plt.hist(data, bins=30) x:要绘制的数据。 bins:区间的数量或边界值的数组。如果是一个整数,表示将数据分成多少个区间;如果是一个数组,表示每个区间的边界值。 density:布尔值,如果为True,则归一化直方图,使得总面积等于1。 alpha:直方图的透明度。 color:直方图的颜色。 edgecolor:直方图边缘的颜色 import matplotlib.pyplot as plt import numpy as np import pandas as pd #显示全部的列 pd.options.display.max_columns=None import matplotlib matplotlib.use('TKAgg') plt.rcParams['font.sans-serif'] =['SimHei'] data = pd.read_excel(r"17.直方图.xlsx") plt.hist(data.身高,bins=30,facecolor='pink',alpha=0.5,edgecolor='purple')
13.1 轴的颜色以及隐藏轴
import matplotlib.pyplot as plt import numpy as np import pandas as pd #显示全部的列 pd.options.display.max_columns=None import matplotlib matplotlib.use('TKAgg') plt.rcParams['font.sans-serif'] =['SimHei'] data = pd.read_excel(r"17.直方图.xlsx") fig,ax = plt.subplots(1,1) ax.spines['top'].set_color('none') ax.spines['right'].set_color('none') ax.spines['left'].set_color('none') ax.spines['bottom'].set_color('none') #取消刻度 ax.set_xticks([]) ax.set_yticks([])import matplotlib.pyplot as plt import numpy as np import pandas as pd #显示全部的列 pd.options.display.max_columns=None import matplotlib matplotlib.use('TKAgg') plt.rcParams['font.sans-serif'] =['SimHei'] data = pd.read_excel(r"1.xlsx") fig,ax = plt.subplots(1,1) ax.spines['top'].set_color('none') ax.spines['right'].set_color('none') ax.spines['left'].set_color('none') ax.spines['bottom'].set_color('none') #取消刻度 ax.set_xticks([]) ax.set_yticks([])
fig,ax = plt.subplot() ax.plot() #对轴标签进行更改 某个坐标值 plt.gca().get_xtickslabels()[2].set(c='r',fontsize='10')轴分段
# plt.locator_params('x',nbins=5) plt.gca().locator_params('x',nbins=5)获取当前轴的刻度plt.gca().get_xticklabels
import matplotlib.pyplot as ticker 设置x轴的刻度 plt.gca().xaxis.set_major_locator() #设置标签百分比 ax2.yaxis.set_major_formatter(ticker.PercentFormatter(xmax=1, decimals=2)) #日期转换 日期 = [d.strftime('%Y-%m-%d') for d in 数据.日期] #显示全部的列 pd.options.display.max_columns=None #刻度显示的位置 ax.xaxis.set_ticks_position('bottom') # 刻度显示在x轴的下方 ax.xaxis.set_ticks_position('top') # 刻度显示在x轴的上方 # 设置x轴的主要刻度间隔为7个单位 ax.xaxis.set_major_locator(ticker.MultipleLocator(7)) #负数问题 plt.rcParams['axes.unicode_minus'] = False #保留小数点后几位 plt.gca().xaxis.set_major_formatter(ticker.FormatStrFormatter('%.2f'))
import matplotlib.pyplot as plt
import matplotlib.pyplot as ticker
import numpy as np
import pandas as pd
#显示全部的列
pd.options.display.max_columns=None
import matplotlib
matplotlib.use('TKAgg')
plt.rcParams['font.sans-serif'] =['SimHei']
#负数问题
#plt.rcParms[''axis.unicode_minua]=False
plt.rcParams['axes.unicode_minus'] = False
data = pd.read_excel(r"17.直方图.xlsx")
fig,ax = plt.subplots(1,1)
ax.plot(data.序号,data.身高)
#7的倍数
# plt.gca().xaxis.set_major_locator(ticker.MultipleLocator(7))
#保留小数点后几位
plt.gca().xaxis.set_major_formatter(ticker.FormatStrFormatter('%.2f'))
#坐标轴刻度的调整
# plt.locator_params('x',nbins=5)
# plt.gca().locator_params('x',nbins=5)
#x轴刻度7的倍数
日期
import matplotlib.pyplot as plt import matplotlib as mpl import matplotlib.pyplot as ticker import numpy as np import pandas as pd #显示全部的列 pd.options.display.max_columns=None import matplotlib matplotlib.use('TKAgg') plt.rcParams['font.sans-serif'] =['SimHei'] #负数问题 #plt.rcParms[''axis.unicode_minua]=False plt.rcParams['axes.unicode_minus'] = False data = pd.read_excel(r"12.日期.xlsx") plt.plot(data.日期,data.销售) plt.gca().xaxis.set_major_formatter(mpl.dates.DateFormatter('%Y*%M*%d')
import matplotlib.pyplot as plt import matplotlib as mpl import matplotlib.pyplot as ticker import numpy as np import pandas as pd #显示全部的列 pd.options.display.max_columns=None import matplotlib matplotlib.use('TKAgg') plt.rcParams['font.sans-serif'] =['SimHei'] #负数问题 #plt.rcParms[''axis.unicode_minua]=False plt.rcParams['axes.unicode_minus'] = False data = pd.read_excel(r"08.折线图.xlsx") plt.plot(data.时间,data.蔬菜) # plt.gca().set_xlim([0,10]) # # plt.gca().set_ylim([0,30]) #设置x y 刻度值 x最小值 x最大值 y最小值 y最大值 # plt.gca().axis([0,10,0,30]) #下限 bottom plt.gca().set_ylim(bottom=-10) #左边从5开始 # plt.gca().set_xlim(left=5) #右边设置为25 plt.gca().set_xlim(right=25)
13.2
import matplotlib.pyplot as plt
import matplotlib as mpl
import matplotlib.pyplot as ticker
import numpy as np
import pandas as pd
#显示全部的列
pd.options.display.max_columns=None
import matplotlib
matplotlib.use('TKAgg')
plt.rcParams['font.sans-serif'] =['SimHei']
#负数问题
#plt.rcParms[''axis.unicode_minua]=False
plt.rcParams['axes.unicode_minus'] = False
data = pd.read_excel(r"/08.折线图.xlsx")
plt.plot(data.时间,data.蔬菜)
plt.plot(data.时间,data.水果)
#覆盖区域 下限 上限
plt.fill_between(data.时间,0,data.蔬菜,facecolor='purple',alpha=0.3)
plt.fill_between(data.时间,data.蔬菜,data.水果,facecolor='blue',alpha=0.3)
十四 雷达图
import matplotlib.pyplot as plt import pandas as pd import numpy as np import matplotlib plt.rcParams['font.sans-serif'] =['SimHei'] plt.rcParams['axes.unicode_minus'] = False matplotlib.use('TKAgg') theta = np.array([0.25,0.75,1,1.5,0.25]) r = [20,40,60,80,20] plt.polar(theta*np.pi,r,'go-') plt.ylim(0,100)
十五 标题以及轴标签
plt.subplot(221) plt.plot(["A","B","C"],[1,2,3,],'bo-',alpha=0.2) set = dict(facecolor='purple',pad=2,alpha=0.5) plt.xlabel("song",bbox=set)
drawstyle
'default':这是默认的连接方式,点与点之间用直线连接。
'steps':这个连接方式使得每个数据点用水平线和垂直线连接,形成阶梯状。它等同于 'steps-pre',用于向后兼容。
'steps-pre':在这种连接方式下,每个数据点先垂直连接到下一个数据点的y坐标,再水平连接到下一个数据点的x坐标,形成一种预阶梯状的图形。
'steps-mid':这种连接方式使得每个数据点先水平连接到当前和下一个数据点的中点,再垂直连接到下一个数据点的y坐标,形成一种中阶梯状的图形。
'steps-post':在 'steps-post' 连接方式下,每个数据点先水平连接到下一个数据点的x坐标,再垂直连接到当前数据点的y坐标,形成一种后阶梯状的
15.1线
plt.axhline(y=0.2,linewidth=5,c='b',alpha=0.5) plt.axvline(x=0.4)线段
plt.axhline(y=0.5,xmin=0.2,xmax=0.6,c='b',alpha=0.2)#填充 plt.axhspan(1,1.3,facecolor='lightskyblue')#交叉填充
x =np.arange(0.0,2,0.01) y1 = np.sin(2*np.pi*x) y2 = 1.2*np.sin(4*np.pi*x) fig,ax = plt.subplots() ax.plot(x,y1,x,y2,color='purple',alpha=0.2) ax.fill_between(x,y1,y2,where=y2>y1,facecolor='b',alpha=0.2)#文本注释
set = dict(facecolor='purple',alpha=0.2,shrink=0.05,width=10) plt.annotate("haha",xy=("B",2),xytext=("B",2.5),textcoords='axes points',arrowprops=set)#添加标签 边框文本设置
plt.plot(["A","B","C"],[5,2,3],'ro-') border = dict(boxstyle='sawtooth',fc='0.5',ec='r') plt.text("B",2.2,"shs",bbox=border)#t通过annotate 设置标签 箭头格式
set = dict(arrowprops="->",connectionstyle='angle') plt.annotate("shx",xy=("B",2),xytext=('C',5),arrowprops=set)#日期转换
date = [d.strftime('%Y-%m-%d') for d in data.日期]
十六 树状图
import matplotlib.pyplot as plt import pandas as pd plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False import matplotlib matplotlib.use('TKAgg') import squarify import numpy as np data = pd.read_excel(r"29.树状图.xlsx") colo = ['pink','lightskyblue','yellowgreen','purple','gray','lightsteelblue','lightcoral'] ax = squarify.plot(sizes=data.销售数量,label=data.名称,color=colo,edgecolor='white',alpha=0.5,linewidth=2,text_kwargs={'fontsize':8}) plt.axis('off') ax.set_title('销售情况') print(data) plt.show(block=True)
十六 玫瑰图
import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
import matplotlib
matplotlib.use('TKAgg')
import squarify
import numpy as np
数据 = pd.read_excel(r"30.玫瑰图.xlsx")
角度=np.linspace(0,2*np.pi,len(数据.业绩),endpoint=False)
图=plt.axes(polar=True) # 实例化极坐标系
# 图.set_theta_direction(-1) # 顺时针为极坐标正方向
图.set_theta_zero_location('N') # 让0度指向N
列表=np.random.random((len(数据.业绩)))
颜色=['b','gold','darkviolet','turquoise','r','g','grey','c','m','y','k','darkorange','lightgreen','plum','tan']
业绩 = np.concatenate((数据.业绩,[数据.业绩[0]]))
角度 = np.concatenate((角度,[角度[0]]))
姓名 = np.concatenate((数据.姓名,[数据.姓名[0]]))
plt.bar(角度,业绩,width=0.33,color=颜色)
plt.bar(角度,height=130,width=0.33,color='white')
for 角度,业绩,姓名 in zip(角度,业绩,姓名):
plt.text(角度+0.03,业绩+100,str(姓名))
plt.gca().set_axis_off()
# colo=['b','gold','darkviolet','turquoise','r','g','grey','c','m','y','k','darkorange','lightgreen','plum','tan']
#
# #角度
#
# tax = np.linspace(0.2*np.pi,len(data.业绩),endpoint=False)
#
# # print(tax)
# #图
# ax = plt.axes(polar=True)
#
# s = np.concatenate([data.业绩,[data.业绩[0]]])
#
# tax = np.concatenate((tax,[tax[0]]))
#
# name = np.concatenate((data.姓名,[data.姓名[0]]))
#
# plt.bar(tax,s,width=0.33,color=colo)
# colo = ['pink','lightskyblue','yellowgreen','purple','gray','lightsteelblue','lightcoral']
#
# ax = squarify.plot(sizes=data.销售数量,label=data.名称,color=colo,edgecolor='white',alpha=0.5,linewidth=2,text_kwargs={'fontsize':8})
#
# plt.axis('off')
#
# ax.set_title('销售情况')
# print(data)
plt.show(block=True)