文章目录
介绍
Matplotlib是一个Python的2D图形包。pyplot封装了很多画图的函数。
import matplotlib.pyplot as plt
import numpy as np
每个matplotlib.pyplot中的函数对当前的图像进行一些修改,例如:产生新的图像,再图像中产生新的绘图区域,在绘图区域中画线,给绘图加上标记,等等…matplotlib.pyplot会自动记住当前的图像和绘图区域,因此这些函数会直接作用在当前的图像上。
plt.show()函数
plt.plot()函数
plt.plot([1,2,3,4])
plt.plot([1,2,3,4],[1,4,9,16])
字符参数
表示颜色的字符参数
表示类型的字符参数
红色圆点:plt.plot([1,2,3,4],[1,4,9,16],‘ro’)
显示范围
plt.axis([xmin,xmax,ymin,ymax])
这里可以使用axis函数指定坐标轴显示的范围
传入Numpy数组
之前传入plot的参数都是列表。实际上,向plot中传入numpy数组是更常用的做法。事实上,如果传入的是列表,matplotlib会在内部将他转化成数组再进行处理。
t = np.arange(0., 5. ,0.2)
plt.plot(t, t, 'r--',
t, t**2, 'bs',
t, t**3, 'g^')
线条属性
x = np.linspace(-np.pi, np.pi)
y = np.sin(x)
plt.plot(x, y, linewidth=4.0,color='r')
plt.show()
line1, line2 = plt.plot(x, y, 'r-', x, y + 1, 'g-')
line1.set_antialiased(False)
plt.show()
plt.setp()修改线条性质
line = plt.plot(x, y)
plt.setp(line, color='g')
plt.setp(line, 'color', 'r', 'linewidth', 4)
子图
·
def f(t):
return np.exp(-t)*np.cos(2*np.pi*t)
t1 = np.arange(0.0,5.0,0.1)
t2 = np.arange(0.0,5.0,0.02)
plt.figure(figsize=(10,6))
plt.subplot(211)
plt.plot(t1, f(t1), 'bo',
t2, f(t2), 'k')
plt.subplot(212)
plt.plot(t2,np.cos(2*np.pi*t2),'r--')
关闭警告 & 设置字体
import warnings
warnings.filterwarnings('ignore')
# -----------------------
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置黑体字
plt.rcParams['axes.unicode_minus'] = False
绘制柱状图
x=data.index
y=data.values
plt.figure(figsize=(10,6))
plt.bar(x, y, color='g')
plt.title('各国家或地区电影数量', fontsize=20)
plt.xlabel('国家或地区',fontsize=18)
plt.ylabel('电影数量',fontsize=18)
plt.tick_params(labelsize=14)
plt.xticks(rotation=90)
for a, b in zip(x, y):
plt.text(a, b+10, b, ha='center', va='bottom', fontsize=10)
#plt.grid() # 添加网格线
plt.show()
曲线图
plt.plot(x, y, color='b')
plt.title('每年电影数量',fontsize=20)
plt.ylabel('电影数量',fontsize=18)
plt.xlabel('年份',fontsize=18)
for a, b in zip(x[::10], y[::10]):
plt.text(a, b + 10, b, ha='center', ve='bottom', fontsize=10)
plt.annotate('2012年达到最大值', xy=(2012, data[2012]), xytext=(2025,2100), arrowprops=dict(facecolor='black',edgecolor='red'))
plt.show()
# xy注释位置
# xytext注释文字位置
饼图
plt.figure(figsize=(7, 7))
plt.title('电影时长占比',fontsize=15)
plt.pie(y,labels=data.index,autopct='%.1f %%', colors='bygr',startangle=90)
#plt.legend() # 增加图例
plt.show()
频率分布直方图
plt.figure(figsize=(10,6))
plt.hist(df['评分'],bins=20)
plt.show()
双轴图
import matplotlib.mlab as mlab
fig = plt.figure(figsize=(10, 8))
ax1=fig.add_subplot(111) #1行1列第1个
n, bins, patches = ax1.hist(df['评分'],bins=100,color='m')
ax1.set_ylabel('电影数量',fontsize=15)
ax1.set_xlabel('评分',fontsize=15)
ax1.set_title('频率分布图',fontsize=15)
y=mlab.normpdf(bins, df['评分'].mean(), df['评分'].std())
ax2=ax1.twinx()
ax2.plot(bins, y, 'b--')
ax2.set_ylabel('概率分布',fontsize=15)
plt.show()
散点图
x=df['时长'][::100]
y=df['评分'][::100]
plt.figure(figsize=(10, 6))
plt.scatter(x, y)
# plt.scatter(x, y, ...)
plt.legend()
plt.title('电影时长与评分散点图',fontsize=20)
plt.xlabel('时长',fontsize=18)
plt.ylabel('评分',fontsize=18)
箱线图
相关系数矩阵图–热力图
数据分析报告结构