这个库的使用方式,和matlab中的画图很像。
一、折线图绘制
语句:plt.plot(x轴数据,y轴数据)
范例:绘制最简单的折线图,并加标题、x/y轴label,x轴标号的旋转
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 转换为dataFrame的时间格式
unrate=pd.read_csv('UNRATE.csv') #【!】'UNRATE.csv'中的文件名可以大写,也可以小写
# print(unrate.head())
unrate['DATE']=pd.to_datetime(unrate['DATE']) #好像不用这一步,读取之后就直接转换为标准日期格式,但为了严谨起见,最好写
print(unrate.head())
# 画最简单的折线图
first_12_month=unrate[0:12]
plt.plot(first_12_month['DATE'],first_12_month['VALUE'])
plt.xticks(rotation=45)
plt.xlabel('Month')
plt.ylabel('Unemployment Rate')
plt.title('Monthly Unemployment Trends, 1948')
plt.show()
疑问:如何将省略了的那些标度也标注出来?如何把点给着重画出来?
二、子图操作
1. 通过plt.add_subplot(2,3,1)的方式画子图
疑问:如何对子图中的xlabel进行旋转(报错了)
#【二、子图】
fig=plt.figure()
ax1=fig.add_subplot(2,3,1)
ax2=fig.add_subplot(2,3,3)
ax3=fig.add_subplot(2,3,5)
ax1.plot(unrate[0:12]['DATE'],unrate[0:12]['VALUE'])
ax2.plot(unrate[12:24]['DATE'],unrate[12:24]['VALUE'])
ax3.plot(unrate[24:36]['DATE'],unrate[24:36]['VALUE'])
plt.show()
2. 在同一折线图中绘制多条折线
注意:要保证横坐标是一样的
# 在一张图中画多条折线
unrate['MONTH']=unrate['DATE'].dt.month #提取日期格式中的月份信息,并在其中新建一个属性列
fig2=plt.figure()
plt.plot(unrate[0:12]['MONTH'],unrate[0:12]['VALUE'],c='red')
plt.plot(unrate[12:24]['MONTH'],unrate[12:24]['VALUE'],c='green')
plt.show()
3. 同一张图中绘制多条折线并标注
fig3=plt.figure()
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]
show_label=str(1945+i)
plt.plot(subset['MONTH'],subset['VALUE'],c=colors[i],label=show_label)
plt.legend(loc='upper right') #loc指定了图标的位置,右上角
print(help(plt.legend))
plt.show()
关于legend的位置,如图:
三、条形图与散点图
1. 条形图 bar
关键信息是:高度多少、条形之间相距多少
from numpy import arange
reviwers=pd.read_csv('fandango_scores.csv')
cols=['FILM','RT_user_norm','Metacritic_user_nom','IMDB_norm','Fandango_Ratingvalue' ,'Fandango_Stars']
norm_reviewers=reviwers[cols] #将电影名称以及5项不同的评分信息提取出来
num_cols=['RT_user_norm','Metacritic_user_nom','IMDB_norm','Fandango_Ratingvalue' ,'Fandango_Stars'] #略去电影名称信息,将分数信息提取出来
bar_height=norm_reviewers.ix[1,num_cols].values #得到norm_reviewers中第1条记录的各项分值【注意-】
bar_position=arange(5)+0.75 #条形图之间的间距是0.75
fig,ax=plt.subplots()
ax.bar(bar_position,bar_height,0.3) #条形的宽度设置为0.3
# print(bar_height)
# print(bar_position)
# print(help(norm_reviewers.ix))
plt.show()
注意:
(1)其中norm_reviewers.ix[1,num_cols] 表示的,其实就是第二条记录的相应分数,ix这种用法已经被取代了,以后最好不用,采用loc
help之后的原话:Starting in 0.20.0, the .ix indexer is deprecated, in favor of the more strict .iloc and .loc indexers. 也就是,用“norm_reviewers.loc[1,num_cols] ”吧,兄弟
(2)如果要画横着的条形图,用的语句是:ax.barh(bar_position,bar_height,0.3)
(3)ig,ax=plt.subplots():这个fig是用来控制这个图长什么样子的,而ax是我们画条形图的这个轴。subplots最后的那个s别遗漏了
2. 散点图
fig, ax=plt.subplots()
ax.scatter(norm_reviewers['Fandango_Ratingvalue'],norm_reviewers['RT_user_norm'])
ax.set_xlabel('Fandango_Ratingvalue')
ax.set_ylabel('RT_user_norm')
plt.show() #声明一下,这张图没有什么意义,只是为了用这个数据来画个散点图
四、柱形图与盒图
1. 柱形图hist
fig, ax=plt.subplots()
ax.hist(norm_reviewers['Fandango_Ratingvalue'])
ax.hist(norm_reviewers['Fandango_Ratingvalue'],bins=20) # bins表示个数,将数据分成多少个区间
# ax.hist(norm_reviewers['Fandango_Ratingvalue'],range=(4,5),bins=20) # 只画出4~5之间的,其与的值不画
plt.show()
疑问:如何画竖线把他们区分开呢??
2. 盒图
(1)盒图的含义:能够标注出这些值的中值、1/4处值
(2)显示一个简单的盒图
fig, ax=plt.subplots()
ax.boxplot(norm_reviewers['RT_user_norm'])
ax.set_xticklabels('RT_user_norm') # 注意,此处的set_xticklabels用法,和set_xlabel不同,前者可以分别标注
ax.set_ylim(0,5) #y轴的范围是0~5
plt.show()
(3)显示多个盒图
#显示多个盒图
fig, ax=plt.subplots()
ax.boxplot(norm_reviewers[num_cols].values)
ax.set_xticklabels(num_cols,rotation=45)
ax.set_ylim(0,5) #y轴的范围是0~5
plt.show()
五、细节设置
1. 指定绘图大小
fig=plt.figure(figsize=(10,3))
2. 设置y轴的区间:ax.set_ylim(0,50)
3. 自定义线条颜色:
rgb_dark_blue=(0/255, 107/255, 164/255)
……
plt.plot(unrate[0:12]['MONTH'],unrate[0:12]['VALUE'],c=rgb_dark_blue)