前面几节我们学习了python中numpy和pandas库的一些常用操作,接下来几个章节,我们学习一个非常重要的数据可视化库matplotlib(seaborn库也有有所涉及)。这里我们需要知道,matplotlib库主要绘制一些2D图形和简单的3D图形。
那么,我们先来看下学习的主要内容:
- 绘制折线图
- 绘制子图
- 绘制柱状图
- 绘制散点图
- 绘制直方图
- 绘制箱型图(箱线图)
而本节我们主要实现折线图、子图和柱状图的绘制,下节内容主要是散点图、直方图、箱线图及一些细节补充。
绘制折线图先看一下我们的需求,这里有一组数据是某个城市2018年的房价数据,现在我们想看下这一年的趋势,那么就需要绘制出一折线图。
#导入pandas包 import pandas as pd #导入pyplot包 import matplotlib.pyplot as plt unrate = pd.read_excel('price.xlsx') unrate['date'] = pd.to_datetime(unrate['date']) plt.plot(unrate['date'], unrate['price']) plt.show()
优化前房价折线图
上面这个折线图比较粗糙,既没有横坐标名称,也没有纵坐标名称,那能否优化呢?答案当然可以,但在优化之我们详细对这个画图的常用参数做一些说明。
plt.plot(x,y,format_string,**kwargs)
- x:x轴数据,列表或数组,可选
- y:y轴数据,列表或数组
- format_string:控制曲线的格式字符串,由颜色字符、风格字符和标记字符组成。
- **kwargs:第二组或更多,(x,y,format_string)
- plt.xlim、plt.ylim 设置横纵坐标轴范围
- plt.xlabel、plt.ylabel 设置横纵坐标轴名称
- plt.xticks、plt.yticks设置坐标轴刻度
了解这些参数的意义后,我们将上面的图进一步改进,效果如下:
import matplotlib.pyplot as plt plt.plot(unrate['date'], unrate['price'],c='red') #设置纵坐标范围 plt.ylim((8000,10000)) #设置横坐标角度,这里设置为45度 plt.xticks(rotation=45) #设置横纵坐标名称 plt.xlabel("month") plt.ylabel("price") #设置折线图名称 plt.title("the price of 2018") plt.show()
优化后房价走势图
绘制子图当你在写下fig=plt.figure()时候,python已经给你创建了一张大的画布,既然这是一张画布,那么我们就可以在这张画布上进行分块,在不同的块上做出不同的图形。这个函数就叫fig.add_subplot(),其中传入3个参数,分别代表行、列和位置,比如fig.add_subplot(2,1,3)表示在画布的第三个位置添加一个2行1列的子图。这里需要注意区分多个子图和多图的区别,子图是在一个fig对象上创建多个区块,而多图是创建多个figure对象。
import matplotlib.pyplot as plt fig = plt.figure() ax1 = fig.add_subplot(3,2,1) ax2 = fig.add_subplot(3,2,2) ax2 = fig.add_subplot(3,2,6) plt.show()
添加子图
fig = plt.figure(figsize=(10,6)) colors = ['red', 'blue', 'green', 'orange', 'black'] for i in range(5): start_index = i*12 end_index = (i 1)*12 subset = unrate[start_index:end_index] label = str(1948 i) plt.plot(subset['MONTH'], subset['VALUE'], c=colors[i], label=label) #添加图例,loc='upper left表示图例位置在最左侧,一般也可以直接使用loc='best' plt.legend(loc='upper left') plt.xlabel('Month, Integer') plt.ylabel('Unemployment Rate, Percent') plt.title('Monthly Unemployment Trends, 1948-1952') plt.show()
添加图例及重复画图
绘制柱状图绘制柱状图,我们主要用到bar()函数。我们先看下bar()的构造函数:bar(x,height, width,*,align='center',**kwargs)
x:包含所有柱子的下标的列表
height:包含所有柱子的高度值的列表
width:每个柱子的宽度。可以指定一个固定值,那么所有的柱子都是一样的宽。或者设置一个列表,这样可以分别对每个柱子设定不同的宽度。
align:柱子对齐方式,有两个可选值:center和edge。center表示每根柱子是根据下标来对齐, edge则表示每根柱子全部以下标为起点,然后显示到下标的右边。如果不指定该参数,默认值是center。
除了以上几个重要的参数,还有几个样式参数:color,设置颜色;edgecolor设置边框颜色;linewidth设置柱子的边框宽度;tick_label,柱子上显示的标签。
下面我们用代码实现柱状图:
import pandas as pd import matplotlib.pyplot as plt from numpy import arange reviews = pd.read_csv('fandango_scores.csv') cols = ['FILM', 'RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue', 'Fandango_Stars'] norm_reviews = reviews[cols] #print(norm_reviews[:1]) num_cols = ['RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue', 'Fandango_Stars'] bar_heights = norm_reviews.ix[0, num_cols].values print(bar_heights) bar_positions = arange(5) 0.75 #print bar_positions fig, ax = plt.subplots() ax.bar(bar_positions, bar_heights, 0.3) plt.show()
柱状图
今天内容到此为止,下节我们继续讲散点图、直方图、箱型图和其他细节补充,喜欢的小伙伴请点击关注、收藏。(点击外链获取练习数据)
,