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

 

设置y轴的标签

 

与设置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%

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章