most-silence

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()

请添加图片描述

分类:

技术点:

相关文章: