文章每个图都带有案例,欢迎访问!!!
目录
plt.rcParams['font.sans-serif']=['SimHei']解决缺失字体

matplotlib.pyplot.plot(x,y,format_string,**kwargs)

- import matplotlib.pyplot as plt
- import pandas as pd
- s=pd.date_range(start='2022-08-02',freq='D',periods=10)
- df=pd.DataFrame(data=[30,29,33,38,28,26,31,24,19,25],index=s,columns=['温度'])
- x=s
- y=df['温度']
- plt.plot(x,y)
- plt.show()


import matplotlib.pyplot as plt
x=[1,2,3,4,5]
y=[10,15,20,25,30]
plt.plot(x,y,color='r')
y=[5,20,25,30,40]
plt.plot(x,y,color='g')
y=[10,20,30,40,50]
plt.plot(x,y,color='b')
y=[1,20,40,60,80]
plt.plot(x,y,color='y')
plt.show()
plt.plot(x,y,color='b',linestyle='-',marker='o',mfc='w')
mfc='w'使样式标记变成空心
import matplotlib.pyplot as plt
x=[1,2,3,4,5]
y=[10,15,20,25,30]
plt.plot(x,y,color='r',linestyle='--')
y=[5,20,25,30,40]
plt.plot(x,y,color='g',linestyle='-')
y=[10,20,30,40,50]
plt.plot(x,y,color='b',linestyle='-.')
y=[1,20,40,60,80]
plt.plot(x,y,color='y',linestyle=':')
plt.show()
import matplotlib.pyplot as plt
x=[1,2,3,4,5]
y=[10,15,20,25,30]
plt.plot(x,y,color='r',linestyle='--',marker='o')
plt.show()
plt.plot(x,y,color='b',linestyle='-',marker='o',mfc='w')

import matplotlib.pyplot as plt
plt.figure(num='画布',figsize=(8,6),facecolor='y')
plt.show()
- xlabel函数设置x轴坐标轴标题, ylabel函数设置
import matplotlib.pyplot as plt
import pandas as pd
plt.figure(num='温度',figsize=(10,4),facecolor='y')
s=pd.date_range(start='2022-08-02',freq='D',periods=10)
df=pd.DataFrame(data=[30,29,33,38,28,26,31,24,19,25],index=s,columns=['温度'])
x=s
y=df['温度']
plt.rcParams['font.sans-serif']=['SimHei']解决缺失字体
plt.title('天气预报')
plt.xlabel('日期')
plt.ylabel('温度')
plt.plot(x,y,marker='o',mfc='w')
plt.show()
plt.xticks()
plt.yticks()
import matplotlib.pyplot as plt
import random
plt.rcParams['font.sans-serif']=['KaiTi']
month=[str(i)+'月' for i in range(1,11)]
x=[i for i in range(1,11)]
y=[random.randint(1,10) for i in range(10)]#包含10
plt.xticks(range(1,11),month)
plt.yticks(range(1,11))
plt.plot(x,y,marker='o')
plt.show()
xlim函数设置x轴坐标轴范围,ylim函数设置y轴坐标轴范围
import matplotlib.pyplot as plt
import random
plt.rcParams['font.sans-serif']=['KaiTi']
month=[str(i)+'月' for i in range(1,11)]
x=[i for i in range(1,11)]
y=[random.randint(1,10) for i in range(10)]#包含10
plt.xticks(range(1,11),month)
plt.yticks(range(1,11))
plt.xlim(1,20)
plt.ylim(1,20)
plt.plot(x,y,marker='o')
plt.show()
plt.grid(color='0.5',linestyle='--',linewidth='1',axis='both')#x y both
import matplotlib.pyplot as plt
import random
plt.rcParams['font.sans-serif']=['KaiTi']
month=[str(i)+'月' for i in range(1,11)]
x=[i for i in range(1,11)]
y=[random.randint(1,10) for i in range(10)]#包含10
plt.xticks(range(1,11),month)
plt.yticks(range(1,11))
plt.plot(x,y,marker='o')
plt.grid(color='0.5',linestyle='--',linewidth='1',axis='both')#x y both
plt.show()
plt.text()
plt.title()
plt.legend(('销售次数',))


#
import matplotlib.pyplot as plt
import random
plt.rcParams['font.sans-serif']=['KaiTi']
month=[str(i)+'月' for i in range(1,11)]
x=[i for i in range(1,11)]
y=[random.randint(1,10) for i in range(10)]#包含10
plt.xticks(range(1,11),month)
plt.yticks(range(1,11))
for a,b in zip(x,y):
plt.text(a,b,(a,b),color='r',ha='center',fontsize='10')
plt.title('测试练习',fontsize='15',color='b')
plt.plot(x,y,marker='o',mfc='w')
plt.legend(('销售次数',))
plt.show()
matplotlib.pyplot.annotate(s,xy,xytext,xycoords,arrowprops)

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['KaiTi']
month=[str(i)+'月' for i in range(1,11)]
x=[1,2,3,4,5,6]
y=[10,18,32,47,8,26]
for a,b in zip(x,y):
plt.text(a,b,b,color='r',ha='center',fontsize='10')
plt.title('测试练习',fontsize='15',color='b')
plt.plot(x,y,marker='o',mfc='w')
plt.annotate('最大数',xy=(4,47),xytext=(5,47),arrowprops={'facecolor':'y','shrink':0.05}) plt.show()
matplotlib.pyplot.subplots_adjust(left,right,top,bottom)
plt.subplots_adjust(left=0.1,right=0.9,bottom=0.09,top=0.9)
plt.tick_params(bottom=True,left=True,right=True,top=True)#True显示刻度线
plt.rcParams['xtick.direction'] = 'in' # 将x周的刻度线方向设置向内
plt.rcParams['ytick.direction'] = 'in' # 将y轴的刻度方向设置向内
plt.rcParams['xtick.direction'] = 'out' # 将x周的刻度线方向设置向外
plt.rcParams['ytick.direction'] = 'out' # 将y轴的刻度方向设置向内外
plt.rcParams['xtick.direction'] = 'inout' # 将x周的刻度线方向设置向中间
plt.rcParams['ytick.direction'] = 'inout' # 将y轴的刻度方向设置向中间

准备数据:通过爬虫获取20200122到今天为止每日的新增病例数量,得到按季度增加的病例数量绘图。
数据文件地址:https://file1.dxycdn.com/2020/0223/045/3398299749526003760-135.json
- import pandas as pd
- import matplotlib.pyplot as plt
- df=pd.read_csv('tw.csv')
- for i in range(0,909):
- for j in range(0,1):
- df.iloc[i,j]=str(df.iloc[i,j])
- df['dateId']=pd.to_datetime(df['dateId'])
- df=df.set_index('dateId')
- df=df.resample('Q').sum().to_period('Q')
- plt.figure('简单折线图',figsize=(8,6),facecolor='y',)
- x=['2020Q1','2020Q2','2020Q3','2020Q4','2021Q1','2021Q2','2021Q3','2021Q4','2022Q1','2022Q2', '2022Q3']
- y=list(df['confirmedIncr'])
- plt.plot(x, y, color='b', linestyle='-', marker='o', mfc='w')
- plt.xlabel('季度')
- plt.ylabel('新增数量')
- for a,b in zip(x,y):
- plt.text(a,b,b,color='r',ha='center',fontsize='10')
- plt.title('疫情新增趋势按季度')
- plt.rcParams['font.sans-serif']=['SimHei']
- plt.grid(color='0.5',linestyle='--',linewidth='1',axis='both')
- plt.subplots_adjust(left=0.1,right=0.9,bottom=0.09,top=0.9)
- plt.show()


- import numpy as np
- import pandas as pd
- import matplotlib.pyplot as plt
- import json
- import requests
- from lxml import etree
- plt.rcParams['font.sans-serif'] = ['KaiTi']
- url = "https://ncov.dxy.cn/ncovh5/view/pneumonia?from=timeline&isappinstalled=0"
- headers={
- 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36 Edg/98.0.1108.62',
- }
- res = requests.get(url=url,headers=headers)
- res.encoding = "utf-8"
- content = res.text
- html = etree.HTML(content)
- con = html.xpath('//*[@id="fetchRecentStatV2"]/text()')
- con = str(con)
- begin = con.index("[{")
- end = con.index("}catch(e){}']")
- con = con[begin : end]
- ls = json.loads(con)
- # ==============================绘图====================================================
- df_data = pd.DataFrame.from_dict(ls)
- print(df_data)
- def btxzzt():
- ls_provinceShortName = [] # 省份
- ls_yesterdayLocalConfirmedCount= [] # 本土新增确诊
- for x in ls:
- provinceShortName = x["provinceShortName"]
- yesterdayLocalConfirmedCount = x["yesterdayLocalConfirmedCount"]
- ls_provinceShortName.append(provinceShortName)
- ls_yesterdayLocalConfirmedCount.append(yesterdayLocalConfirmedCount)
-
- x = np.array(ls_provinceShortName)
- y = np.array(ls_yesterdayLocalConfirmedCount)
- plt.figure('基本柱状图',figsize=(8,6),facecolor='y')
- plt.title("近期风险地区疫情本土新增")
- plt.xlabel("省份")
- plt.ylabel("人数")
- plt.yticks(range(0,99))
- for i,j in zip(range(len(y)), y):
- plt.text(i, j, j)#(i,j)表示添加标签的位置,j表示添加的内容
- plt.grid(color='0.5', linestyle='--', linewidth='1', axis='y')
- plt.subplots_adjust(left=0.1, right=0.9, bottom=0.09, top=0.9)
- plt.bar(x, y,width=0.8,alpha=0.5,color='g')
- plt.show()
- btxzzt()

主要代码:
w=0.2
plt.bar(x, y1,width=0.2,color='g',alpha=0.5) plt.bar(x+w, y2,width=0.2,color='r',alpha=0.5) plt.bar(x+2*w, y3,width=0.2,color='b',alpha=0.5) plt.bar(x+3*w, y4,width=0.2,color='y',alpha=0.5)

- import pandas as pd
- import numpy as np
- import matplotlib.pyplot as plt
- df=pd.read_excel('多柱状图.xlsx')
- plt.figure('多柱状图',facecolor='y',figsize=(10,7))
- x=np.array([1,2,3,4,5,6,7])
- y1=df['1月']+df['2月']+df['3月']
- y2=df['4月']+df['5月']+df['6月']
- y3=df['7月']+df['8月']+df['9月']
- y4=df['10月']+df['11月']+df['12月']
- plt.xlabel('产品')
- plt.ylabel('季度销售量')
- w=0.2
- for i,j in zip(x, y1):
- plt.text(i,j,j,ha='center',color='g')
- for i, j in zip(x, y2):
- plt.text(i+0.2, j, j, ha='center', color='r')
- for i, j in zip(x, y3):
- plt.text(i+0.4, j, j, ha='center', color='b')
- for i, j in zip(x, y4):
- plt.text(i+0.6, j, j, ha='center', color='y')
- plt.rcParams['font.sans-serif']=['SimHei']
- plt.bar(x, y1,width=0.2,color='g',alpha=0.5)
- plt.bar(x+w, y2,width=0.2,color='r',alpha=0.5)
- plt.bar(x+2*w, y3,width=0.2,color='b',alpha=0.5)
- plt.bar(x+3*w, y4,width=0.2,color='y',alpha=0.5)
- data=df['产品名称']
- plt.xticks(x,data)
- plt.legend(['第一季度','第二季度','第三季度','第四季度'])
- plt.subplots_adjust(left=0.08, right=0.98, bottom=0.09, top=0.95)
- plt.show()

- import pandas as pd
- import matplotlib.pyplot as plt
- df=pd.DataFrame(data={
- '总成绩':[61,71,89,74,36,25,86,73,84,86,87]
- })
- plt.rcParams['font.sans-serif']=['KaiTi']
- x=df['总成绩']
- plt.xlabel('分数')
- plt.ylabel('人数')
- plt.title('直方图')
- bins=[0,10,20,30,40,50,60,70,80,90,100]
- plt.xticks(bins)
- plt.hist(x,bins,facecolor='g',edgecolor='k')
- plt.show()


- import pandas as pd
- import matplotlib.pyplot as plt
- pd.set_option('display.unicode.east_asian_width', True)
- s=pd.DataFrame(data={
- '商品名':['小米手机','华为手机','华为电脑','小米电脑'],
- '销量':[400,200,50,60]
- })
- plt.rcParams['font.sans-serif']=['KaiTi']
- x=s['销量']
- labels=s['商品名']
- plt.pie(x,labels=labels,autopct='%1.1f%%',labeldistance=1.05,textprops={'fontsize':12})
- #保证饼形图为圆形
- plt.axis('equal')
- plt.legend(labels,fontsize='10')
- plt.show()

通过在绘制基本饼图中加一个参数explode=(0.1,0,0,0)实现
shadow=True使饼图带有阴影效果,有层次感
- import pandas as pd
- import matplotlib.pyplot as plt
- pd.set_option('display.unicode.east_asian_width', True)
- s=pd.DataFrame(data={
- '商品名':['小米手机','华为手机','华为电脑','小米电脑'],
- '销量':[400,200,50,60]
- })
- plt.rcParams['font.sans-serif']=['KaiTi']
- x=s['销量']
- labels=s['商品名']
- plt.pie(x,labels=labels,autopct='%1.1f%%',labeldistance=1.05,textprops={'fontsize':12},explode=(0.1,0,0,0),shadow=True)
- #保证饼形图为圆形
- plt.axis('equal')
- plt.legend(labels,fontsize='10')
- plt.show()

通过参数wedgeprops实现
若要绘制内嵌环形饼图通过设置半径radius实现
- import pandas as pd
- import matplotlib.pyplot as plt
- pd.set_option('display.unicode.east_asian_width', True)
- s=pd.DataFrame(data={
- '商品名':['小米手机','华为手机','华为电脑','小米电脑'],
- '北京销量':[400,200,50,60],
- '上海销量':[299,386,79,67]
- })
- plt.rcParams['font.sans-serif']=['KaiTi']
- x=s['北京销量']
- x1=s['上海销量']
- color=['y','g','r','b']
- labels=s['商品名']
- plt.pie(x,labels=labels,autopct='%1.1f%%',colors=color,labeldistance=1.05,radius=1,pctdistance=0.85,textprops={'fontsize':12},wedgeprops={'width':0.4,'edgecolor':'w'})
- plt.pie(x1,autopct='%1.1f%%',colors=color,labeldistance=1.05,radius=0.7,pctdistance=0.85,textprops={'fontsize':12},wedgeprops={'width':0.4,'edgecolor':'w'})
- plt.legend(labels,fontsize='10',frameon=False)
- #保证饼形图为圆形
- plt.axis('equal')
- plt.show()


- import matplotlib.pyplot as plt
- import random
- x=[i for i in range(1,11)]
- y=[random.randint(1,11) for i in range(1,11)]
- plt.scatter(x,y,color='r')
- plt.show()


案例中的数据是自己拟的

- import matplotlib.pyplot as plt
- import pandas as pd
- df=pd.read_excel('多柱状图.xlsx')
- plt.rcParams['font.sans-serif']=['KaiTi']
- x=df['产品名称']
- y1=df['1月']+df['2月']+df['3月']
- y2=df['4月']+df['5月']+df['6月']
- y3=df['7月']+df['8月']+df['9月']
- y4=df['10月']+df['11月']+df['12月']
- plt.stackplot(x,y1,y2,y3,y4)
- plt.legend(['第一季度','第二季度','第三季度','第四季度'])
- plt.show()
热力图
- import matplotlib.pyplot as plt
- import pandas as pd
- import random
- df=pd.DataFrame(data={
- '姓名':['小明','小红','张三','李四','小虎'],
- '语文':[random.randint(80,150) for i in range(5)],
- '数学':[random.randint(80,150) for i in range(5)],
- '英语':[random.randint(80,150) for i in range(5)]
- })
- plt.rcParams['font.sans-serif']=['KaiTi']
- x=df.loc[:,'语文':]
- plt.yticks(range(5),df['姓名'])
- plt.xticks(range(3),['语文','数学','英语'])
- plt.title('学生成绩热力图')
- plt.imshow(x)
- plt.colorbar()#显示颜色条
- plt.show()


绘制多个子图三种方式
subplot- import matplotlib.pyplot as plt
- import random
- #绘制第一个子图
- plt.subplot(2,2,1)
- plt.plot([1,2,3,4,5],[random.randint(1,10) for i in range(5)])
- #绘制第一个子图
- plt.subplot(2,2,2)
- plt.scatter([1,2,3,4,5],[random.randint(1,10) for i in range(5)],color='r')
- #绘制第一个子图
- plt.subplot(2,1,2)
- plt.bar([1,2,3,4,5],[random.randint(1,10) for i in range(5)])
- plt.show()
subplots- import matplotlib.pyplot as plt
- import random
- figure,axes=plt.subplots(2,2)#两行两列
- # 第一个绘图区
- axes[0,0].plot([1,2,3,4,5],[random.randint(1,10) for i in range(5)])
- # 第二个绘图区
- axes[0,1].scatter([1,2,3,4,5],[random.randint(1,10) for i in range(5)])
- # 第三个绘图区
- axes[1,0].bar([1,2,3,4,5],[random.randint(1,10) for i in range(5)])
- # 第四个绘图区
- axes[1,1].pie([random.randint(1,10) for i in range(5)],autopct='%1.1f%%')
- plt.show()

- import matplotlib.pyplot as plt
- import random
- fig=plt.figure()
- #绘制第一个子图
- ax1=fig.add_subplot(2,2,1)
- ax1.plot([1,2,3,4,5],[random.randint(1,10) for i in range(5)])
- #绘制第二个子图
- ax2=fig.add_subplot(2,2,2)
- ax2.scatter([1,2,3,4,5],[random.randint(1,10) for i in range(5)],color='r')
- #绘制第三个子图
- ax3=fig.add_subplot(2,2,3)
- ax3.bar([1,2,3,4,5],[random.randint(1,10) for i in range(5)])
- # 绘制第四个
- ax4=fig.add_subplot(2,2,4)
- ax4.pie([random.randint(1,10) for i in range(5)],autopct='%1.1f%%')
- plt.show()

plt.savefig('demo.png')
