matplotlib:Python中常用的图形框架 可以绘制线图 散点图 等高线图 条形图 柱状图 3D图形 图形动画等
- 调用
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 下面两句避免warning
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
# one:
# fig = plt.figure(figsize=(float1,float2)) # 指定画布大小
# ax = fig.add_subplot(x,y,index)
# two:
# ax = plt.subplot(xyz) # 在给定的网格位置返回图象;前俩个参数确定共有多少个图像(行数,列数),第三个参数确定该图的位置
# 子图
# fig1 = plt.figure(figsize=(6,6))
# a1 = fig1.add_subplot(2,1,1)
# a2 = fig1.add_subplot(2,1,2)
a1 = plt.subplot(211)
a2 = plt.subplot(212)
a1.plot(np.random.randint(1,5,5),np.arange(5))
a2.plot(np.arange(10)*3,np.arange(10))
plt.show()
# 细节
plt.xlabel('Month')
plt.ylabel('Unemployment Rate')
plt.title('Monthly Unemployment Treands, 1948')
plt.legend(loc=0) # 折线图中不同线条标识位置
plt.xticks(rotation=45) # 坐标标识旋转
ax.set_xlabel('Rating Source')
ax.set_ylabel('Average Rating')
ax.set_title('Average User Rating For Avengers: Age of Ultron (2015)')
ax.set_xticks(tick_position) # x轴坐标位置
ax.set_xticklabels(num_cols, rotation=45)
ax.set_ylim(0,20) # 坐标范围
- 折线图
unrate = pd.read_csv("unrate.csv")
unrate["DATE"] = pd.to_datetime(unrate["DATE"]) # to.datetime:类型转换
print(unrate.head(12))
print(unrate.loc[0:12,'DATE'])
unrate['Month'] = unrate['DATE'].dt.month
# plt.figure(figsize=(x,y)):指定默认的画图区间 figsize=(横向长度,纵向长度):画图域的大小
# a = fig.add_subplot(x,y,index):前俩个参数确定共有多少个图像(行数,列数),第三个参数确定该图的位置(使用a.plot()进行画图)
fig = plt.figure(figsize=(6,4))
plt.plot(unrate['Month'][0:12],unrate.loc[0:11,'VALUE'],c = 'red',label='1948')
plt.plot(unrate['Month'][0:12],unrate.loc[12:23,'VALUE'],c = 'blue',label='1949')
# plt.xticks(rotation=45) # 坐标标识的样式
plt.xlabel('x_name')
plt.ylabel('y_name')
plt.title('title')
# =============== =============
# 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
plt.legend(loc=0)
plt.show()
- 条形图(bar)
reviews = pd.read_csv("fandango_score_comparison.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 = norm_reviews.loc[0,num_cols].values # 列值
bar_positions = np.arange(5) + 1 # bar_position:每个点离原点的距离
tick_position = np.arange(1,6)
ax = plt.subplot() # plt.subplot(222)
ax.bar(bar_positions,bar_heights,0.7) # 参数1:每个点离原点的距离;参数2:每个柱的高度;参数3:柱的宽度
# ax.barh(bar_positions,bar_heights,0.7) # x,y轴互换
ax.set_xticks(tick_position) # x轴坐标位置
ax.set_xticklabels(num_cols, rotation=45)
ax.set_xlabel('Rating Source')
ax.set_ylabel('Average Rating')
ax.set_title('Average User Rating For Avengers: Age of Ultron (2015)')
plt.show()
- 散点图(scatter)
ax = plt.subplot()
ax.scatter(norm_reviews['Fandango_Ratingvalue'],norm_reviews['RT_user_norm'])
ax.set_xlabel('Fandango')
ax.set_ylabel('Rotten Tomatoes')
plt.show()
- 直方图(hist)
# 与条形图的区别
# 条形图是用条形的长度表示各类别频数的多少,其宽度(表示类别)则是固定的;
# 直方图是用面积表示各组频数的多少,矩形的高度表示每一组的频数或频率,宽度则表示各组的组距,因此其高度与宽度均有意义。
# 由于分组数据具有连续性,直方图的各矩形通常是连续排列,而条形图则是分开排列。
# 条形图主要用于展示分类数据,而直方图则主要用于展示数据型数据。
ax = plt.subplot()
# range=(start_index,end_index) bin:指定总共的柱形数
ax.hist(norm_reviews['Fandango_Ratingvalue'],range=(4,5),bins=20)
ax.set_ylim(0,20) # 坐标范围
plt.show()