通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。
Matplotlib基础知识
1.Matplotlib中的基本图表包括的元素
x轴和y轴
水平和垂直的轴线
x轴和y轴刻度
刻度标示坐标轴的分隔,包括最小刻度和最大刻度
x轴和y轴刻度标签
表示特定坐标轴的值
绘图区域
实际绘图的区域
2.hold属性
hold属性默认为True,允许在一幅图中绘制多个曲线;将hold属性修改为False,每一个plot都会覆盖前面的plot。
但是不推荐去动hold这个属性,这种做法(会有警告)。因此使用默认设置即可。
3.网格线
grid方法
使用grid方法为图添加网格线
设置grid参数(参数与plot函数相同)
.lw代表linewidth,线的粗细
.alpha表示线的明暗程度
4.axis方法
如果axis方法没有任何参数,则返回当前坐标轴的上下限
5.xlim方法和ylim方法
除了plt.axis方法,还可以通过xlim,ylim方法设置坐标轴范围
6.legend方法
两种传参方法:
【推荐使用】在plot函数中增加label参数
在legend方法中传入字符串列表
配置matplotlib参数
永久配置
matplotlib配置信息是从配置文件读取的。在配置文件中可以为matplotlib的几乎所有属性指定永久有效的默认值
安装级配置文件(Per installation configuration file)
Python的site-packages目录下(site-packages/matplotlib/mpl-data/matplotlibrc)
系统级配置,每次重新安装matplotlib后,配置文件会被覆盖
如果希望保持持久有效的配置,最好选择在用户级配置文件中进行设置
对本配置文件的最佳应用方式,是将其作为默认配置模板
用户级.matplotlib/matplotlibrc文件(Per user .matplotlib/matplotlibrc)
用户的Documents and Settings目录
可以用matplotlib.get_configdir()命令来找到当前用户的配置文件目录
当前工作目录
代码运行的目录
在当前目录下,可以为目录所包含的当前项目代码定制matplotlib配置项。配置文件的文件名是matplotlibrc
在Windows系统中,没有全局配置文件,用户配置文件的位置在C:\Documents and Settings\yourname.matplotlib。
在Linux系统中,全局配置文件的位置在/etc/matplotlibrc,用户配置文件的位置在$HOME/.matplotlib/matplotlibrc。
动态配置
程序中配置代码
To finetune settings only for that execution; this overwrites every configuration file.
配置方法的优先级为:
Matplotlib functions in Python code
matplotlibrc file in the current directory
User matplotlibrc file
Global matplotlibrc file
rcParams方法
通过rcParams字典访问并修改所有已经加载的配置项
折线图
import matplotlib.pyplot as plt
input_values=[1,2,3,4,5]
squares=[1,4,9,16,25]
plt.style.use('seaborn')
print(squares)
fig,ax= plt.subplots()
ax.plot(squares)
ax.plot(squares,linewidth=6)
ax.set_title("平方数",fontsize=24)
ax.set_xlabel("值",fontsize=14)
ax.set_ylabel("值的平方",fontsize=14)
ax.tick_params(axis='both',labelsize=14)
ax.spines["top"].set_visible(False)
ax.spines["right"].set_visible(False)
plt.rcParams["font.sans-serif"]=["SimHei"]
plt.rcParams["axes.unicode_minus"]=False
fig.tight_layout()
plt.show()
柱状图
import pandas as pd
from matplotlib import pyplot as plt
hotdog = pd.read_csv(r"hot-dog-contest-winners.csv")
fig,ax=plt.subplots(figsize=(10,6))
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
x_data = hotdog['Year']
y_data = hotdog['Eaten']
plt.bar(x=x_data,height=y_data,color='b',edgecolor='k')
ax = plt.gca()
ax.set_title(u'过去30年热狗大胃王比赛结果柱状图',fontproperties='SimHei',fontsize=14)
ax.set_xlabel('年份')
ax.set_ylabel('所吃热狗数量')
plt.show()
散点图
import pandas as pd
from matplotlib import pyplot as plt
postage=pd.read_csv(r"gdp-per-China-worldbank-1.csv")
fig,ax=plt.subplots(figsize=(10,6))
plt.scatter(postage["Year"],postage["GDP"],c='r',marker='o',alpha=0.5)
ax=plt.gca()
ax.set_title(u'1990-2020年中国GDP变化情况散点图',fontproperties='SimHei',fontsize=14)
ax.set_xlabel('年份')
ax.set_ylabel('GDP')
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
plt.show()
气泡图
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
crime = pd.read_csv("crimeRatesByState2005.csv")
crime2 = crime[crime.state != "United states"]
crime2 = crime2[crime2.state != "District of Columbia"]
s = list(crime2.population/10000)
colors = np.random.rand(len(list(crime2.murder)))
cm = plt.cm.get_cmap()
plt.scatter(x=list(crime2.murder),y=list(crime2.burglary),s=s,c=colors,cmap=cm,linewidth=0.5,alpha=0.5)
plt.xlabel("murder")
plt.ylabel("burglary")
plt.show()
阶梯图
import pandas as pd
from matplotlib import pyplot as plt
postage=pd.read_csv(r"us-postage.csv")
fig,ax=plt.subplots(figsize=(10,6))
ax.step(postage["Year"],postage["Price"],where='post')
ax.set_title("US Postage Fee")
ax.set_xticks(postage["Year"])
ax.set_yticks([])
ax.spines["top"].set_visible(False)
ax.spines["bottom"].set_visible(False)
ax.spines["left"].set_visible(False)
ax.spines["right"].set_visible(False)
for i,j in zip(postage["Year"],postage["Price"]):
ax.text(x=i,y=j+0.003,s=j)
fig.tight_layout()
plt.show()
饼图
import matplotlib.pyplot as plt
import pandas as pd
timeData = pd.read_csv(r"doubledec.csv")
plt.figure(figsize=(9,9))
plt.title('双减政策下的初中生时间馅饼图',fontdict={'fontsize':24},y=1.05)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
labels = ['睡觉','在校学习','家庭作业','自由活动','午餐晚餐','早餐及其它']
plt.pie(timeData['Time'],autopct='%1.1f%%',textprops={'fontsize':12,'color':'k'},labels=labels,startangle=90,counterclock=False)
plt.rcParams['legend.fontsize'] = 10
plt.legend(loc='lower left',frameon=False)
plt.axis('equal')
# tmp = [1]
# plt.pie(tmp,labels=[''],radius=0.5,colors='w')
plt.show()