Matplotlib

2020 年 06 月 04 日 • 阅读数: 164

Matplotlib

该笔记原本使用Jupyter notebook书写,

初始化

导入三个依赖包,并且加载数据,数据是一个如下的表格

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv('UNRATE.csv')
data.head(12)
DATE VALUE
0 1948-01-01 3.4
1 1948-02-01 3.8
2 1948-03-01 4.0
3 1948-04-01 3.9
4 1948-05-01 3.5
5 1948-06-01 3.6
6 1948-07-01 3.6
7 1948-08-01 3.9
8 1948-09-01 3.8
9 1948-10-01 3.7
10 1948-11-01 3.8
11 1948-12-01 4.0

画图

  • 用plt.plot()函数画图
  • 用plt.show()显示图像
  • plot()中传入第一个参数,表示x轴,第二个参数,表示y轴
  • xticks()可以设置x轴的坐标,参数rotation可以使刻度标签旋转指定角度
  • yticks()可以设置y轴的坐标
  • xlabel()可以设置x轴的名称
  • ylabel()可以设置y轴的名称
  • title()可以设置标题
first_data = data[:12] # 取数据的前12行
plt.plot(first_data['DATE'],first_data['VALUE']) # 传入X轴数据和Y轴数据
plt.xticks(rotation=-45) # 设置X轴坐标顺时针旋转45度
plt.xlabel('Month')
plt.ylabel('Unemployment Rate')
plt.title('Monthly Unemployment Trends, 1948')
plt.show()

matplotlib_4_1.png

子图

  • 用figure()来创建一个画布,可以用figsize来指定画布的大小
  • 用add_subplot()来创建一个子图,并将其添加到画布
  • 创建了子图后,直接可以用子图.plot()来画图
fig = plt.figure(figsize=(10,10))
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,4)
ax1.plot(np.sin(range(20)))
ax2.plot(np.random.randint(1,5,5),np.arange(5),'--')
ax3.plot(np.sin(np.arange(10)*np.pi))
plt.show()

matplotlib_6_1.png

多线

  • 要在一个图里画多个曲线可以直接plot多次
  • 用参数c可以指定颜色
  • 用legend()可以指定一个标志
  • 要设置一个标志,需要在plot的时候传入一个label属性,然后lenged()才会根据label自动生成标志
data['DATE'] = pd.to_datetime(data['DATE'])
data['MONTH'] = data['DATE'].dt.month
plt.plot(data[0:12]['MONTH'],data[0:12]['VALUE'],c='red')
plt.plot(data[12:24]['MONTH'],data[12:24]['VALUE'],c='blue')
plt.show()

matplotlib_8_1.png

fig = plt.figure(figsize=(10,6))
colors = ['red','blue','green','orange','black']
for i in range(len(colors)):
    start_time = i*12
    end_time = (i+1)*12
    subset = data[start_time:end_time]
    label = str(1984+i)
    plt.plot(subset['MONTH'],subset['VALUE'],c=colors[i],label=label)
plt.legend(loc='best')
plt.xlabel('Month')
plt.ylabel('Unemployment Trends,1948-1952')
plt.title('Monthly Unemployment Trends , 1948-1952')
plt.show()

matplotlib_9_1.png

Matplotlib进阶

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv('fandango_scores.csv')
data.head(5)
FILM RottenTomatoes RottenTomatoes_User Metacritic Metacritic_User IMDB Fandango_Stars Fandango_Ratingvalue RT_norm RT_user_norm ... IMDB_norm RT_norm_round RT_user_norm_round Metacritic_norm_round Metacritic_user_norm_round IMDB_norm_round Metacritic_user_vote_count IMDB_user_vote_count Fandango_votes Fandango_Difference
0 Avengers: Age of Ultron (2015) 74 86 66 7.1 7.8 5.0 4.5 3.70 4.3 ... 3.90 3.5 4.5 3.5 3.5 4.0 1330 271107 14846 0.5
1 Cinderella (2015) 85 80 67 7.5 7.1 5.0 4.5 4.25 4.0 ... 3.55 4.5 4.0 3.5 4.0 3.5 249 65709 12640 0.5
2 Ant-Man (2015) 80 90 64 8.1 7.8 5.0 4.5 4.00 4.5 ... 3.90 4.0 4.5 3.0 4.0 4.0 627 103660 12055 0.5
3 Do You Believe? (2015) 18 84 22 4.7 5.4 5.0 4.5 0.90 4.2 ... 2.70 1.0 4.0 1.0 2.5 2.5 31 3136 1793 0.5
4 Hot Tub Time Machine 2 (2015) 14 28 29 3.4 5.1 3.5 3.0 0.70 1.4 ... 2.55 0.5 1.5 1.5 1.5 2.5 88 19560 1021 0.5

5 rows × 22 columns

cols = ['FILM','RT_user_norm','Metacritic_user_norm_round','IMDB_norm','Fandango_Stars','Fandango_Ratingvalue']
norm_data = data[cols][:1]
norm_data
FILM RT_user_norm Metacritic_user_norm_round IMDB_norm Fandango_Stars Fandango_Ratingvalue
0 Avengers: Age of Ultron (2015) 4.3 3.5 3.9 5.0 4.5

柱状图

  • 通过plt.bar()来画一个柱状图,基本的柱状图需要3个参数,第1个x轴,第2个高,第3个宽
  • 通过plt.barh()来画一个横向的柱状图
  • 注:fig主要用来设置统一风格的,ax才是实际作图的
cols[1:]
['RT_user_norm',
 'Metacritic_user_norm_round',
 'IMDB_norm',
 'Fandango_Stars',
 'Fandango_Ratingvalue']
fig,ax = plt.subplots()
bar_h = norm_data.ix[0,cols[1:]].values
bar_p = np.arange(5) + 1
ax.bar(bar_p,bar_h,0.5)
plt.show()

matplotlib进阶_6_0.png

散点图

  • 通过plt.scatter()来画一个散点图
  • 传入2个参数,第一个作为x,第二个作为y
  • 注:用子图的方式画图,设置xtabel需要用到set_xlabel()
fig,ax = plt.subplots()
ax.scatter(data['Fandango_Ratingvalue'],data['RT_user_norm'])
ax.set_xlabel('Fandango')
ax.set_ylabel('RT')
plt.show()

matplotlib进阶_8_0.png

柱形图

  • 用plt.hist()来画一个柱形图
  • 参数bins用来指定一个柱的个数
  • 参数range用来指定一个x的取值范围,范围外的舍弃
  • 通过set_ylim()可以用来指定y轴的范围
  • set_xlim()同理
data_ibm = data[['FILM','IMDB_norm']]
fig,ax = plt.subplots()
ax.hist(data_ibm['IMDB_norm'],range=(3,5))
ax.hist(data_ibm['IMDB_norm'],bins=25)
ax.set_ylim(0,30)
ax.set_xlim(0,5)
plt.show()

matplotlib进阶_10_0.png

盒图

  • 用plt.boxplot()可以画一个盒图
fig,ax = plt.subplots()
ax.boxplot(data[cols[1:]].values)
plt.show()

matplotlib进阶_12_0.png

标签: Python数据可视化
添加评论
评论列表
没有更多内容