python——matplotlib数据可视化库

     这个库的使用方式,和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)

猜你喜欢

转载自blog.csdn.net/qq_39915585/article/details/81096491