Matplotlib(数据可视化库)代码大全

折线图 (plot函数)

#导包
import pandas as pd
import matplotlib.pyplot as plt

#读取本地的csv文件(美国失业率数据),得到的数据为DataFrame类型
unrate = pd.read_csv('unrate.csv')

#格式转换:格式化时间
#to_datetime():把数据中的'DATE'时间列的字符串类型数据格式化,转换成datetime标准时间格式
unrate['DATE'] = pd.to_datetime(unrate['DATE'])
#读取前12行数据
first_twelve = unrate[0:12]
print unrate.head(12)
#绘制折线图操作
#第一个参数为x轴数据,第二个参数为y轴数据
plt.plot(first_twelve['DATE'], first_twelve['VALUE'])

#将x轴下面的文字旋转45度
plt.xticks(rotation=45)

#设置x轴的标签
plt.xlabel('Month')

#设置y轴的标签
plt.ylabel('Unemployment Rate')

#设置标题名称
plt.title('Monthly Unemployment Trends, 1948')

#显示图像
plt.show()

 图像显示结果如下图所示: 

 

子图操作 (subplot函数)

 子图在总绘图区域的分布顺序如下:

 绘制子图代码如下:

#绘制子图操作
#导包
import numpy as np
import matplotlib.pyplot as plt

#步骤1:确定绘图区域大小(画图域)
#figsize:指定绘图区域的大小,6x12(长和宽)缺省默认大小
fig = plt.figure(figsize=(6, 12))

#步骤2:添加子图,并确定在总绘图区域的位置
#add_subpolt(2,1,1):前两个参数参数2,1表示将总绘图区域划分为2行1列(类似矩阵)
#第3个参数:子图占总区域的第一个位置
#注:位置顺序从上到下,从左到右,从1开始递增
ax1 = fig.add_subplot(2,1,1)
ax2 = fig.add_subplot(2,1,2)

#步骤3:绘制子图
ax1.plot(np.random.randint(1,5,5), np.arange(5))
ax2.plot(np.arange(10)*3, np.arange(10))

#步骤4:显示图像
plt.show()

 图像显示结果如下图所示:

总结绘制子图的步骤:

1.确定绘图区域大小
2.确定每个子图在绘图区域的位置
3.绘制每个子图
4.显示图像

一张图绘制多条曲线

#一张图绘制多条曲线操作

#导包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 读取本地的csv文件(美国失业率数据),得到的数据为DataFrame类型
unrate = pd.read_csv('unrate.csv')

#格式转换:格式化时间
#to_datetime():把数据中的'DATE'时间列的字符串类型数据格式化,转换成datetime标准时间格式
unrate['DATE'] = pd.to_datetime(unrate['DATE'])

#将年份时间转换成月份时间,并新建列存起来
#需求:将5年内的当年12个月内的失业率展示出来,此时再用年时间作为x轴下标就不合适了
unrate['MONTH'] = unrate['DATE'].dt.month

#设置5个颜色数组,分别表示5条曲线颜色
colors = ['red','green','blue','black','yellow']

#设置总绘图区域大小,需要在调用绘图函数之前调用才有效果
plt.figure(figsize=(10,6))   

#遍历5次
for i in range(5):
    
    #读取数据(当年12个月的数据)     
    data12 = unrate[12*i : 12*(i+1)]
    
    #当年的曲线的标签
    label = str(1948+i)
        
    # 绘制当年的曲线图
    plt.plot(data12['MONTH'], data12['VALUE'], c=colors[i], label=label)

    
# 设置x轴标签
plt.xlabel('Month,Integer')

# 设置y轴标签
plt.ylabel('Unemployment Rate,Percent')

# 设置图标名称
plt.title('Monthly Unemployment Trends,1948-1952')

# 设置图例位置
#loc='best':选择合适的位置来摆放(loc是location的缩写)
#loc的取值有如下几种:best、upper right、upper left、lower left、lower right……
#还可以通过编号来指定摆放方式:比如best--0,upper-1
plt.legend(loc='best')

# 显示图像
plt.show()

loc的取值和代码对应关系如下 :

 |              ===============   =============
 |              Location String   Location Code
 |              ===============   =============
 |              'best'            0
 |              'upper right'     1
 |              'upper left'      2
 |              'lower left'      3
 |              'lower right'     4
 |              'right'           5
 |              'center left'     6
 |              'center right'    7
 |              'lower center'    8
 |              'upper center'    9
 |              'center'          10
 |              ===============   =============

 图像显示结果如下图所示: 

绘制条形图(bar函数)

fandango_scores.csv文件的局部预览图:

#绘制条形图操作
#导包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

#读取本地的csv文件(电影评分数据),得到的数据为DataFrame类型
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]

#评分数据的列名
num_cols = ['RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue', 'Fandango_Stars']

#条形图的高度bar_heights
#取出第一部电影的评分样本数据
bar_heights = norm_reviews.loc[0, num_cols].values
#条形图的位置bar_positions
bar_positions = arange(5) + 0.75

fig, ax = plt.subplots()

#绘制条形图
#第一个参数:x轴数据;第二个参数:y轴数据;第三个参数:每个条形的宽度
#ax.bar():条形图是竖着画
ax.bar(bar_positions, bar_heights,0.5)
#ax.barh():条形图是横着画
#ax.barh(bar_positions, bar_heights,0.5)

#设置x轴标签的位置
#range(1,6):1、2、3、4、5
ax.set_xticks(range(1,6))

#设置x轴标签的名字和角度
ax.set_xticklabels(num_cols, rotation=45)

#设置x轴标签
ax.set_xlabel('Rating Source')
#设置y轴标签
ax.set_ylabel('Average Rating')
#设置标题
ax.set_title('Average User Rating For Avengers: Age of Ultron (2015)')

plt.show()

  图像显示结果如下图所示: 

绘制散点图(scatter函数)

#绘制散点图操作
#导包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

#读取本地的csv文件(电影评分数据),得到的数据为DataFrame类型
norm_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]

fig, ax = plt.subplots()

#绘制散点图
ax.scatter(norm_reviews['Fandango_Ratingvalue'], norm_reviews['RT_user_norm'])
ax.set_xlabel('Fandango')
ax.set_ylabel('Rotten Tomatoes')

plt.show()

 图像显示结果如下图所示: 

绘制直方图(hist函数)

问题:当数据样本点较多时,要把所有的数据绘制在图形中,显然要把横坐标切分成很多份,这样就会使得横坐标显得太臃肿了

解决:把取值属于某一区间(Bins)的数据样本点划分到一类中,用划分区间的方法来减少绘制图形的个数

直方图一般用来统计一定范围内的数据

#绘制直方图操作
#导包
import pandas as pd
import matplotlib.pyplot as plt

#读取文件
reviews = pd.read_csv('fandango_scores.csv')

#读取数据
cols = ['FILM', 'RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue']
norm_reviews = reviews[cols]

#对评分进行数量统计
#Fandango_Ratingvalue公司
fandango_distribution = norm_reviews['Fandango_Ratingvalue'].value_counts()
#IMDB_norm公司
imdb_distribution = norm_reviews['IMDB_norm'].value_counts()

#排序索引
#Fandango_Ratingvalue公司
fandango_distribution = fandango_distribution.sort_index()
#IMDB_norm公司
imdb_distribution = imdb_distribution.sort_index()

fig, ax = plt.subplots()

# 绘制直方图
#bins:区间个数,缺省默认10个
ax.hist(norm_reviews['Fandango_Ratingvalue'], bins=20)
#ax.hist(norm_reviews['Fandango_Ratingvalue'], range(4,5), bins=20)

#设置y轴坐标取值范围
#ax.set_ylim(0,50)

plt.show()

 图像显示结果如下图所示: 

 

绘制盒图 (boxplot函数)

 箱形图(英文:Box-plot),又称为盒须图、盒式图、盒状图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因型状如箱子而得名。它能显示出一组数据的最大值、最小值、中位数、下四分位数及上四分位数。

#绘制盒图操作
#导包
import pandas as pd
import matplotlib.pyplot as plt

#读取文件
reviews = pd.read_csv('fandango_scores.csv')

#读取数据
cols = ['FILM', 'RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue']
norm_reviews = reviews[cols]

num_cols = ['RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue']
fig, ax = plt.subplots()

#绘制盒图
ax.boxplot(norm_reviews[num_cols].values)
ax.set_xticklabels(num_cols, rotation=90)
ax.set_ylim(0,5)
plt.show()

 图像显示结果如下图所示

附上本人的联系方式,欢迎各位前来交流探讨!

版权声明:本文为博主原创文章,未经博主允许不得转载。如要转载请与本人联系。

猜你喜欢

转载自blog.csdn.net/weixin_39549734/article/details/81105073
今日推荐