matplotlib绘制图(全面)

matplotlib

所需要的文件数据可以在该页面资源中下载!

霸敛的博客_CSDN博客-笔记,项目,django项目领域博主
折线图

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(2)
y = np.random.random(10)
x = range(len(y))

plt.grid()  # 网格
plt.plot(y, c='g')  # 画折线图,颜色为绿色
plt.xlabel('x')  # 设置x轴标签
plt.ylabel('y')  # 设置y轴标签
plt.xticks(x, ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'g'))  # 设置x轴刻度
plt.title('matplotlib')
plt.show()

 运行结果:

 

柱状图

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams["font.family"]="FangSong"  #字体类型 仿宋
pd.set_option("max_columns",None) #显示所有列
# pd.set_option("max_rows",None) #显示所有行
df=pd.read_csv("豆瓣华语电影数据.csv")
print(df)
print(df.info())
#显示评论人数前10的电影,评分对比
data=df.sort_values(by="rating_num",ascending=False).head(10)
print(data)
#设置图纸大小和分辨率
plt.figure(figsize=(11,7),dpi=100)
#绘制柱状图
plt.bar(data["title"],data["rate"],label="评分",width=0.6)
plt.show()

运行结果:
在这里插入图片描述

柱状图:

#不同电影类型数量
data=df.loc[:,"is_drama":"is_erotic"].sum()
print(data)
#绘制柱状图
x=["剧情","动作","喜剧","爱情","科幻","动画","悬疑","惊悚","恐怖","犯罪","同性","音乐","歌舞","传记","历史","战争","西部","奇幻","冒险","灾难","武侠","情色"]
plt.bar(x,data)
for x,y in zip(x,data):
    plt.text(x,y,"%.f"%y,ha="center")
plt.show()

 运行结果:
 

在这里插入图片描述

 堆积柱状图:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams["font.family"]="FangSong"
pd.set_option("max_columns",None) #显示所有列
# pd.set_option("max_rows",None) #显示所有行
df=pd.read_csv("豆瓣电影数据1.csv")
print(df)
#统计评分前10的电影,上映5天的总票房以及单日票房对比
data=df.sort_values(by="imdb_score",ascending=False).head(10)
print(data)
plt.bar(data["name"],data["r1"])
plt.bar(data["name"],data["r2"],bottom=data["r1"])
plt.bar(data["name"],data["r3"],bottom=data["r1"]+data["r2"])
plt.bar(data["name"],data["r4"],bottom=data["r1"]+data["r2"]+data["r3"])
plt.bar(data["name"],data["r5"],bottom=data["r1"]+data["r2"]+data["r3"]+data["r4"])
plt.xticks(rotation=-90)
plt.show()

运行结果:

在这里插入图片描述

并列柱状图
竖型的!

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams["font.family"]="FangSong"
pd.set_option("max_columns",None) #显示所有列
# pd.set_option("max_rows",None) #显示所有行
df=pd.read_csv("nobel.csv")
print(df)

#显示不同世纪不同奖项的数量对比
df["世纪"]=df["year"]//100+1
data=df.groupby(["世纪","category"]).count()["year"].unstack()
print(data)
x=np.arange(data.columns.size)
plt.bar(x,data.loc[20],width=0.4)
plt.bar(x+0.4,data.loc[21],width=0.4)
plt.xticks(ticks=x+0.2,labels=data.columns)
plt.legend(labels=["20世纪","21世纪"])
plt.title("不同世纪不同奖项获取数量")
for i,j in zip(x,data.loc[20]):
    plt.text(i,j+1,j,ha="center")
for i,j in zip(x+0.4,data.loc[21]):
    plt.text(i,j+1,j,ha="center")
plt.show()

 运行结果:
 

在这里插入图片描述

 

横向的!

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams["font.family"]="FangSong"
pd.set_option("max_columns",None) #显示所有列
# pd.set_option("max_rows",None) #显示所有行
df=pd.read_csv("nobel.csv")
print(df)
#显示不同世纪不同奖项的数量对比
df["世纪"]=df["year"]//100+1
data=df.groupby(["世纪","category"]).count()["year"].unstack()
print(data)
y=np.arange(data.columns.size)
plt.barh(y,data.loc[20],height=0.4)
plt.barh(y+0.4,data.loc[21],height=0.4)
plt.yticks(ticks=y+0.2,labels=data.columns)
plt.legend(labels=["20世纪","21世纪"])
plt.title("不同世纪不同奖项获取数量")
for i,j in zip(y,data.loc[20]):
    plt.text(j,i,j,va="center")
for i,j in zip(y+0.4,data.loc[21]):
    plt.text(j,i,j,va="center")
plt.show()

运行结果:
 

在这里插入图片描述

 

堆积折线图:

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["font.family"]="FangSong"
x=['A','B','C','D','E']
y1=np.random.randint(10,20,5)
y2=np.random.randint(10,20,5)
bar_width=0.35
plt.stackplot(x,y1,y2)
plt.xlim(0,4)
plt.legend(labels=["数据1",'b数据2'],loc="upper left")
plt.show()

运行结果:
 

在这里插入图片描述

 

饼图:

例题1

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams["font.family"]="FangSong"
pd.set_option("max_columns",None) #显示所有列
# pd.set_option("max_rows",None) #显示所有行
df=pd.read_excel("朝阳医院2018年销售数据1.xlsx")
print(df)
#显示每个月的总销售额在全年的占比情况
df["购药时间"]=pd.to_datetime(df["购药时间"])
data=df.groupby(df["购药时间"].dt.month)["实收金额"].sum()
plt.pie(data,labels=data.index.map(lambda a:str(a)+"月"),
        autopct="%.2f%%",#设置饼内百分比显示格式
        pctdistance=0.8,#设置饼内百分比与饼边缘的距离
        labeldistance=1.1,#设置饼外标签与饼边缘的距离
        shadow=True,
        explode=(0.1,0,0,0,0,0.2,0))#设置每块饼与中心点的分离比例
plt.show()

运行结果:
 

在这里插入图片描述

 例题2:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams["font.family"]="FangSong"
pd.set_option("max_columns",None) #显示所有列
# pd.set_option("max_rows",None) #显示所有行
df=pd.read_excel("朝阳医院2018年销售数据1.xlsx")
print(df)
#显示各个季度的总销售额占比,突出销售额最高的季度(分列式饼图)
df["购药时间"]=pd.to_datetime(df["购药时间"])
data=df.groupby(df["购药时间"].dt.quarter)["实收金额"].sum()
print(data)
plt.pie(data,labels=data.index.map(lambda a:str(a)+"季度"),
        autopct="%.2f%%",#设置饼内百分比显示格式
        pctdistance=0.8,#设置饼内百分比与饼边缘的距离
        labeldistance=1.1,#设置饼外标签与饼边缘的距离
        shadow=True,
        explode=(0.1,0,0))#设置每块饼与中心点的分离比例
plt.show()

运行结果:
在这里插入图片描述

散点图:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams["font.family"]="FangSong"
pd.set_option("max_columns",None) #显示所有列
# pd.set_option("max_rows",None) #显示所有行
df=pd.read_csv("nobel.csv")
print(df)
#显示诺贝尔奖得奖者的获奖年龄
df["birth_date"]=pd.to_datetime(df["birth_date"])
df["age"]=df["year"]-df["birth_date"].dt.year
print(df)
plt.scatter(df["year"],df["age"],s=15,c="b",marker="*")
plt.show()

 运行结果:

在这里插入图片描述

 直方图:
 

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import re
plt.rcParams["font.family"]="FangSong"
pd.set_option("max_columns",None) #显示所有列
pd.set_option("max_rows",None) #显示所有行
df=pd.read_csv("豆瓣电影数据1.csv")
print(df)
# print(df["片长"])
df.dropna(subset=["片长"],inplace=True)#subset 指定检查空值的列或行(去空值)
# print(df["片长"])
# \d 匹配0-9 \w  字符 \s 空格 换行
df["片长_new"]=df["片长"].map(lambda a:re.search("\d{1,3}",a).group())
# print(df["片长_new"])
#转换数据类型,用于与整数值相比较
df["片长_new"]=df["片长_new"].astype(int) #转数据类型为int ,以便于与整数值比较
# print(df["片长_new"])
#将片长大于250分钟或小于50分钟的数据删除
df.drop(df[df["片长_new"]>250].index,inplace=True)
df.drop(df[df["片长_new"]<50].index,inplace=True)
# print(df["片长_new"])
#指定直方图的分组的组距(每一组有5个,相当于5个一组)
bins=np.arange(df["片长_new"].min(),df["片长_new"].max(),5)
print(bins)
plt.hist(df["片长_new"],bins=bins)
plt.show()

运行结果:

在这里插入图片描述

 

箱线图:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import re
plt.rcParams["font.family"]="FangSong"
plt.rcParams["axes.unicode_minus"]=False
pd.set_option("max_columns",None) #显示所有列
# pd.set_option("max_rows",None) #显示所有行
df=pd.read_excel("朝阳医院2018年销售数据1.xlsx")
print(df)
plt.boxplot([df["应收金额"],df["实收金额"]],whis=8,labels=["应收金额","实收金额"])
plt.show()

运行结果:

在这里插入图片描述

 

雷达图:
 

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import re
plt.rcParams["font.family"]="FangSong"
plt.rcParams["axes.unicode_minus"]=False
pd.set_option("max_columns",None) #显示所有列
# pd.set_option("max_rows",None) #显示所有行
names=["python","hadoop","java","flask","spark"]
scores=[55,87,96,52,45]
scores1=[59,69,25,89,65]
#把圆按科目的数量,等比划分
theta=np.linspace(0,2*np.pi,len(names),endpoint=False)
#闭合图形时,需要回到起点,把每个数组的值拼接第一个元素(起点值)
theta1=np.concatenate((theta,[theta[0]]))
scores=np.concatenate((scores,[scores[0]]))
scores1=np.concatenate((scores1,[scores1[0]]))
#创建雷达图
ax=plt.subplot(111,projection="polar")
ax.plot(theta1,scores)
ax.plot(theta1,scores1)
ax.fill(theta1,scores,theta1,scores1)
#更改标签
ax.set_thetagrids(theta*180/np.pi,names)
plt.show()

结果如下:
 

在这里插入图片描述

 

子图:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import re
plt.rcParams["font.family"]="FangSong"
plt.rcParams["axes.unicode_minus"]=False
pd.set_option("max_columns",None) #显示所有列
# pd.set_option("max_rows",None) #显示所有行
x=list("abcde")
y=np.random.randint(50,100,5)
# subplot返回单个子图对象
# ax=plt.subplot(2,2,1)
# ax.plot(x,y)
# ax1=plt.subplot(224)
# ax1.bar(x,y)
# plt.show()
fig,ax=plt.subplots(2,2)#ax返回的是子图数组
ax[1,0].plot(x,y)
ax[0,1].bar(x,y)
plt.show()

运行结果:

在这里插入图片描述

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值