matplotlib常用方法属性详解
gdp_dat.csv在文章末尾
方法讲解
中文显示错误问题
在绘图中如果出现中文标签或者负号,会无法正常显示,可以使用以下解决方案:
import matplotlib.pyplot as plt
# 用来正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
# 用来正常显示负号
plt.rcParams['axes.unicode_minus'] = False
设置x轴的标签
例子:
import matplotlib.pyplot as plt
# 设置坐标的标签
plt.xlabel('花瓣长度')
ylabel
设置x轴的标签
与设置x轴标签类似
legend
设置图例位置
例子:
import matplotlib.pyplot as plt
# 表示图例将添加在图中的左上角
plt.legend(loc= 'upper left')
show
展示绘制好的图形
例子:
import matplotlib.pyplot as plt
plt.show()
plot
绘制曲线图。注意:曲线图如果出现x或者y轴无序的情况,那是因为数据类型没转成数字类型的
例子:
import matplotlib.pyplot as plt
import pandas as pd
# 用来正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
gdp_data = pd.read_csv('gdp_data.csv')
gdp_data = gdp_data[::-1]
plt.plot(gdp_data['年份'][0:10], gdp_data['增速'][0:10])
# 让 X 轴的数据呈45度展示
plt.xticks(rotation=45)
# 给 X 轴和 Y 轴加上标签
plt.xlabel('年份')
plt.ylabel('增速')
# 设置标题
plt.title('国内GDP增速')
# 展示绘图
plt.show()
输出如下:
add_subplot
添加子图,方法接收三个参数,参数1表示行,参数2表示列,参数3表示第在矩阵中的第几个元素,比如add_subplot(2, 3, 2)表示创建一个两行三列的矩阵,子图位于矩阵的第二个元素。元素个数是先从左往右,再从上往下依次添加的。如下图所示:
例子:
gdp_data = pd.read_csv('gdp_data.csv')
gdp_data = gdp_data[::-1]
# 创建图形对象
fig = plt.figure()
# 如果加上figsize就是指定figure的宽高,单位为英尺
# fig = plt.figure(figsize=(3, 3))
ax1 = fig.add_subplot(2, 2, 1)
ax2 = fig.add_subplot(2, 2, 2)
ax3 = fig.add_subplot(2, 2, 4)
# 使用子图去绘制
ax1.plot(gdp_data["年份"][0:10], gdp_data["增速"][0:10])
ax2.plot(gdp_data["年份"][10:20], gdp_data["增速"][10:20])
ax3.plot(gdp_data["年份"][20:30], gdp_data["增速"][20:30])
plt.show()
输出如下:
在同一幅图当中绘制两条曲线
例子:
# 用来正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
# 用来正常显示负号
plt.rcParams['axes.unicode_minus'] = False
gdp_data = pd.read_csv('gdp_data.csv')
usa_gdp_data = pd.read_csv('usa_gdp_data.csv')
gdp_data = gdp_data[::-1]
usa_gdp_data = usa_gdp_data[::-1]
plt.figure(figsize=(6,3))
plt.plot(gdp_data["年份"][0:10], gdp_data["增速"][0:10], color='red', label='中国gdp增速')
plt.plot(usa_gdp_data["年份"][0:10], usa_gdp_data["增速"][0:10], color='blue', label='美国gdp增速')
plt.xlabel("年份")
plt.xlabel("增速")
plt.title('中美1961-1970GDP增速对比')
plt.legend(loc= 'upper left')
plt.show()
输出如下:
subplot、subplots和add_subplot的区别
plt.subplots()是一个函数,返回一个包含figure和axes对象的元组。因此,使用fig,ax = plt.subplots()将元组分解为fig和ax两个变量。
下面两种表达方式具有同样的效果,可以看出fig.ax = plt.subplots()较为简洁。
fig = plt.figure()
ax = fig.add_subplt(111)
fig,ax = plt.subplots()
通常,我们只用到ax.
fig,ax = plt.subplots(nrows=2, ncols=2)
axes = ax.flatten()
把父图分成2*2个子图,ax.flatten()把子图展开赋值给axes,axes[0]便是第一个子图,axes[1]是第二个... ...
如果,你想改变图形的属性或想把图形保存为.npg文件,那么fig是非常有用的。
fig = plt.figure()
fig.add_subplot(121)
fig.savefig("name.npg")
fig.add_subplot(121)和fig.add_subplot(1,2,1)是可互换的。表示把父图分成1行2列,图形绘制在第一个子图上。
ax = fig.add_subplot(121) ax.hist() #直方图就绘制在了1*2中的第一个子图上。
bar
绘制条形图(柱状图),也可以使用plt.bar来进行绘制,若使用plt.bar绘制,设置对应的参数则是plt.xxx()
例子:
# 用来正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
# 用来正常显示负号
plt.rcParams['axes.unicode_minus'] = False
petal_data = pd.read_csv('data.csv')
show_column = ["花萼长度", "花萼宽度", "花瓣长度", "花瓣宽度"]
# 获取第一行数据
bar_heights = petal_data.loc[0, show_column].values
# 定义每个柱子的中心线到零轴的距离
bar_position = np.arange(1, 5)
# 相当于 fig = plt.figure 和 ax = fig.add_subplot(1, 1, 1)的简写
fig, ax = plt.subplots()
# 绘制条形图,第一个参数是每个柱子的中心线到零轴的距离,第二个参数是每个柱子的高度,第三个参数是每个柱子的宽度
ax.bar(bar_position, bar_heights, 0.5)
# 条形图横向显示,若是横向则所有x和y的设置都要相互替换
# ax.barh(bar_heights, bar_position, 0.5)
# 设置 X 轴第一到第四个元素的刻度
ax.set_xticks(range(1,5))
# 设置 X 轴刻度的标签和角度
ax.set_xticklabels(show_column , rotation=45)
# 设置 X 和 Y 轴的标签,相当于plt.xlabel('xx')和plt.ylabel('xx')
ax.set_xlabel('植物属性')
ax.set_ylabel('厘米')
# 设置标题,相当于plt.title('xx')
ax.set_title('植物参数对比图')
plt.show()
输出如下:
scatter
绘制散点图,可以用plt.scatter()方法来绘制,
例子:
import matplotlib.pyplot as plt
# 用来正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
# 用来正常显示负号
plt.rcParams['axes.unicode_minus'] = False
petal_data = pd.read_csv('data.csv')
fig, ax = plt.subplots()
# 参数1是横坐标数组,参数2是纵坐标数组,color是颜色,marker是坐标点的形状,label是标签
ax.scatter(petal_data["花萼长度"][0:100], petal_data["花瓣长度"][0:100], color='blue', marker='o', label='a')
# 还可以使用plt绘制
# plt.scatter(petal_data["花萼长度"][0:100], petal_data["花瓣长度"][0:100], color='red', marker='o', label='a')
ax.set_title('植物信息散点图')
ax.set_xlabel('花萼长度')
ax.set_ylabel('花瓣长度')
plt.show()
输出如下:
hist
绘制直方图。直方图和条形图的区别:条形图是绘制某一个属性对应的值,比如中国人口数量、美国人口数量等。 而直方图则是绘制某一个属性区间对应的值,比如学生成绩,70~80分段的人数,80~90分段的人数等。
例子:
# 用来正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
# 用来正常显示负号
plt.rcParams['axes.unicode_minus'] = False
petal_data = pd.read_csv('data.csv')
fig, ax = plt.subplots()
# 绘制直方图,range表示展示的区间,bins表示区间内划分多少个区域
ax.hist(petal_data['花萼长度'], range=(5.1, 5.9), bins=9)
# 设置 X 和 Y 轴刻度的区间
ax.set_xlim(5, 6)
ax.set_ylim(0, 10)
ax.set_title('花萼长度统计直方图')
ax.set_xlabel('花萼长度')
ax.set_ylabel('数量')
plt.show()
输出如下:
boxplot
绘制和盒形图
例子:
# 用来正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
# 用来正常显示负号
plt.rcParams['axes.unicode_minus'] = False
petal_data = pd.read_csv('data.csv')
# 要绘制的列
columns = ['花萼长度','花瓣长度']
fig, ax = plt.subplots()
# 绘制盒形图
ax.boxplot(petal_data[columns].values)
# 设置 X 轴刻度
ax.set_xticklabels(columns)
ax.set_ylabel('长度/cm')
plt.show()
输出如下(红色部分是自己标注上去说明的):
gdp_data.csv:
年份,增速
2018,6.6%
2017,6.76%
2016,6.74%
2015,6.91%
2014,7.3%
2013,7.77%
2012,7.86%
2011,9.55%
2010,10.64%
2009,9.4%
2008,9.65%
2007,14.23%
2006,12.72%
2005,11.4%
2004,10.11%
2003,10.04%
2002,9.13%
2001,8.34%
2000,8.49%
1999,7.67%
1998,7.84%
1997,9.23%
1996,9.93%
1995,10.95%
1994,13.05%
1993,13.87%
1992,14.22%
1991,9.29%
1990,3.91%
1989,4.19%
1988,11.23%
1987,11.69%
1986,8.94%
1985,13.44%
1984,15.14%
1983,10.84%
1982,8.93%
1981,5.17%
1980,7.81%
1979,7.6%
1978,11.13%
1977,7.57%
1976,-1.57%
1975,8.72%
1974,2.31%
1973,7.76%
1972,3.81%
1971,7.06%
1970,19.3%
1969,16.94%
1968,-4.1%
1967,-5.77%
1966,10.65%
1965,16.95%
1964,18.18%
1963,10.3%
1962,-5.58%
1961,-27.27%