文章目录
1.Matplotlib 基础
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
默认matplotlib.pyplot不会显示图像 需要plt.show()
但再ipython 可以将图像直接插入到notebook中不需要show
- %matplotlib notebook
- %matplotlib inline
plt.plot()函数
普通线性图
plt.plot([1,2,3,4])
plt.ylabel(\'y\')
plt.xlabel(\'x\')
基本用法
- 指定x,y plt.plot(x,y)
- 默认参数
plt.plot([1,2,3,4],[1,4,9,16])
plt.show()
字符参数
- 表示颜色
- 表示 线/点 类型的字符参数
#红色圆点
plt.plot([1,2,3,4],[1,4,9,16],\'g *\')
plt.show()
指定坐标轴axis显示范围
plt.axis([xmin,xmax,ymin,ymax])
plt.plot([1,2,3,4],[1,4,9,16],\'g *\')
plt.axis([0,8,0,20])
plt.show()
plot传入numpy数组
- 一个途中画出多条线
t = np.arange(0.,5.,0.2)
plt.plot(t,t,\'r--\',
t,t**2,\'b s\',
t,t**3,\'g ^\')
plt.show()
线条属性
- 线宽linewidth 颜色color
x = np.linspace(-np.pi,np.pi)#-3.14到3.14
y=np.sin(x)
plt.plot(x,y,linewidth = 4.0,color=\'r\')
plt.show()
plt.plot()返回值设置线条属性
plot函数返回Line2D对象的列表
- line1,line2为两个Line2D对象
line1,line2 = plt.plot(x1,y1,x2,y2) - 三个
lines = plt.plot(x1,y1,x2,y2,x3,y3)
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\',linewidth = 4)
plt.setp(line,\'color\',\'r\',\'linewidth\',4)
子图
- figure()产生指定编号num的图
plt.figure(num)
figure(1) 可以省略
-subplot生成多个子图
plt.sunplot(numrows,numcols,fignum) 行列啥意思??
numrows*numcols<10 plt.sunplot(211)等价 plt.sunplot(2,1,1) 超过则参数错误
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,2.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 #负号啥的 正常显示
df = pd.read_excel(\'movie_data3.xlsx\')
df.head(0)
每个国家地区电影数量的柱状图 bar chart
data = df[\'产地\'].value_counts()
data
#x y axis
x = data.index
y = data.values
plt.figure(figsize=(10,6))
plt.bar(x,y,color=\'g\')
plt.title(\'各个国家或者地区电影数量\',fontsize=20)
plt.xlabel(\'国家或者地区\',fontsize=16)
plt.ylabel(\'电影数量\',fontsize=16,rotation=0)
plt.tick_params(labelsize=14) #横轴和纵轴标记的字体大小
plt.xticks(rotation=90)
for a,b in zip(x,y):
plt.text(a,b+10,b,fontsize=10,ha=\'center\',va=\'bottom\') #前两个的参数:文本的位置 b被选定的参数 字体 水平对齐 垂直对齐
plt.grid()
plt.show()
每年上映电影数量的曲线图
曲线图/折线图 发展变化趋势
xlabel ylabel title text指定位置防止文字 特殊符号使用Tex语法$$
data=df[\'年代\'].value_counts()
data=data.sort_index()[:-1]
data
每隔一定距离 几个点取样 进行标注 使用循环
x=data.index
y=data.values
plt.plot(x,y,color=\'b\')
plt.title(\'每年电影数量\',fontsize=20)
plt.ylabel(\'电影数量 \',fontsize=18,rotation=0)
plt.xlabel(\'年份\',fontsize=18)
for a,b in zip(x[::10],y[::10]):
plt.text(a,b+10,b,ha=\'center\',va=\'bottom\',fontsize=10)
plt.annotate(\'2012年最大值\',xy=(2012,data[2012]),xytext=(2025,2100),arrowprops=dict(facecolor=\'black\',edgecolor=\'red\'))
plt.text(1980,1000,\'电影数量爆发期\')
plt.show()
电影长度的绘制饼图 分类不多的 Sector
函数原型 pie(x,explode)
x 每一块比例 归不归一无所谓
labels
showdow
labeldistance
starting
data = pd.cut(df[\'时长\'],[0,60,90,110,1000]).value_counts()
data
y=data.values
#y=y/sum(y)
plt.figure(figsize=(7,7))
plt.title(\'电影时长比例\',fontsize=15)
patches,l_text,p_text = plt.pie(y,labels=data.index,autopct=\'%.1f %%\',colors=\'bygr\',startangle=90)
for i in p_text:
i.set_size(15)
i.set_color(\'white\')
plt.legend()
plt.show()
电影评分你频率分布直方图
连续变量的概率分布 可归一化
plt.figure(figsize=(10,6))
plt.hist(df[\'评分\'],bins=20,edgecolor=\'black\',alpha=0.5)
plt.show()