Python数据可视化--matplotlib

摘要:
抽象化|具体化:如盒形图|现实中的图功能性|装饰性:没有装饰和渲染|包含艺术性美学上的装饰深度表达|浅度表达:深入层次的研究探索数据|易于理解的,直观的表示多维度|单一维度:数据的多个层次|数据的单一维度创造性|熟悉性:全新的方式进行可视化|被大众接受并且熟悉的方式新颖性|冗余性:每个元素只表述一次|每个元素表示多次Matplotlib:Backend层用于处理向屏幕或文件渲染图形Artist层包含图像绘制的容器:Figure,Subplot及Axes。

抽象化|具体化: 如盒形图 | 现实中的图

功能性|装饰性:没有装饰和渲染 | 包含艺术性美学上的装饰

深度表达|浅度表达:深入层次的研究探索数据 | 易于理解的,直观的表示

多维度|单一维度:数据的多个层次 | 数据的单一维度

创造性|熟悉性:全新的方式进行可视化 | 被大众接受并且熟悉的方式

新颖性|冗余性: 每个元素只表述一次 | 每个元素表示多次

Matplotlib:

  • Backend层
    • 用于处理向屏幕或文件渲染图形
  • Artist层
    • 包含图像绘制的容器:Figure, Subplot 及Axes。
    • 包含基本元素,如: Line2D,Rectange等。
  • Scripting层
    • 简化访问Artist和Backend层的过程

pyplot

https://matplotlib.org/users/pyplot_tutorial.html

  • pyplot可通过gcf(get current figure)获取当前图像对象,gca(get current axis)获取当前坐标轴对象
  • pyplot只是对axes对象的调用做了“镜像”,可以通过pyplot.plot()进行绘图,其底层调用的还是axes.plot() 函数

散点图

  • plt.scatter()
  • plt.xlabel()
  • plt.ylabel()
  • plt.title()
  • plt.legend()
  • 线性,标记,颜色ax.plot(x,y,'r--') == ax.plot(x,y,linestyle='--',color='r')

线图:

  • plt.plot()
  • plt.gca().fill_between() 填充线间的区域
  • np.array()生成时间数据
  • 如果坐标轴是以时间的,可以借助pandas 的to_datetime()
  • plt.xticks(rotation=) 或者遍历ticks进行set_rotation()
  • plt.subplots_adjust().调整边界距离

柱状图

  • plt.bar()
  • group bar chart 当同一个图包含多个柱状图是,要对x轴相对做平移,避免柱状图的重叠
  • stack bar chart 用bottom参数
  • 横向柱状图:barh, width = height; bottom = left

适用场景

Python数据可视化--matplotlib第1张

1. Matplotlib

import matplotlib asmpl
mpl.get_backend()

2. 简单绘图,

importmatplotlib.pyplot as plt
plt.plot(3, 2)
plt.show()

Python数据可视化--matplotlib第2张

上图看不到任何的点。

plt.plot(3, 2, '*')

Python数据可视化--matplotlib第3张

使用scipting 层

from matplotlib.backends.backend_agg importFigureCanvasAgg
from matplotlib.figure importFigure

fig =Figure()
canvas =FigureCanvasAgg(fig)

ax = fig.add_subplot(111)
ax.plot(3, 2, '.')
canvas.print_png('test.png')

gca 获取当前坐标轴对象

plt.figure()
plt.plot(3, 2, 'o')
ax =plt.gca()
#设置坐标轴范围
ax.axis([0, 6, 0, 10])
#matplot 会自动用颜色区分不同的数据
plt.figure()
plt.plot(1.5, 1.5, 'o')
plt.plot(2, 2, '*')
plt.plot(2.5, 2.5, '*')

3. 散点图

importnumpy as np
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y =x

plt.figure()
plt.scatter(x, y)

Python数据可视化--matplotlib第4张

importmatplotlib as mpl
importmatplotlib.pyplot as plt  
#改变颜色及大小

importnumpy as np
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y =x
colors = ['red'] * (len(x) - 1)
colors.append('green')

plt.figure()
plt.scatter(x, y, s=100, c=colors)
plt.show()

Python数据可视化--matplotlib第5张

#使用zip合并两个列表为一个新列表#新列表中的每个元素为对应位置上的元组
l1 = list(range(1, 6))
l2 = list(range(6, 11))
zip_generator =zip(l1, l2)
tuple_list =list(zip_generator)
print(type(zip_generator))
print(list(tuple_list))

<class 'zip'>[(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)]
#使用*进行对元组列表解包
x, y = zip(*tuple_list)
print(x)
print(y)
plt.figure()
plt.scatter(x[:2], y[:2], c='red', label='samples 1')
plt.scatter(x[2:], y[2:], c='blue', label='samples2')

Python数据可视化--matplotlib第6张

4. 线图

importnumpy as np

linear_data = np.arange(1, 9)
quadratic_data = linear_data ** 2
plt.figure()
plt.plot(linear_data, '-o', quadratic_data, '-o')

#注意,这里我们只指定了y轴数据,x轴的数据是matplotlib自动生成的

Python数据可视化--matplotlib第7张

plt.plot([22, 44, 66], '--r')
#添加坐标轴标签及图例
plt.xlabel('x data')
plt.ylabel('y data')
plt.title('Line Chart Title')
plt.legend(['legend1', 'legend2', 'legend3'])
#填充两个line间的区域
plt.gca().fill_between(range(len(linear_data)),
                      linear_data, quadratic_data,
                      facecolor='green',
                      alpha=0.25)
#绘制横轴为时间的线图
plt.figure()
observation_dates = np.arange('2017-10-11', '2017-10-19', dtype='datetime64[D]')
observation_dates
plt.plot(observation_dates, linear_data, '-o',
        observation_dates, quadratic_data, '-o')
#横轴并不是我们想要的结果

Python数据可视化--matplotlib第8张

#借助pandas绘制横轴为时间的线图
importpandas as pd
plt.figure()
observation_dates = np.arange('2017-10-11', '2017-10-19', dtype='datetime64[D]')
observation_dates =list(map(pd.to_datetime, observation_dates))
plt.plot(observation_dates, linear_data, '-o',
        observation_dates, quadratic_data, '-o')

Python数据可视化--matplotlib第9张

#plt.xticks(rotation='45')
x =plt.gca().xaxis
for item inx.get_ticklabels():
    item.set_rotation(45)
#调整边界距离
plt.subplots_adjust(bottom=0.25)
#对于学术制图,可在标题中包含latex语法
ax =plt.gca()
ax.set_title('Quadratic ($x^2$) vs. Linear ($x$)')

5. 柱状图

plt.figure()
x_vals =list(range(len(linear_data)))
plt.bar(x_vals, linear_data, width=0.3)

Python数据可视化--matplotlib第10张

#group bar chart#同一副图中添加新的柱状图#注意,为了不覆盖第一个柱状图,需要对x轴做偏移
x_vals2 = [item + 0.3 for item inx_vals]
plt.bar(x_vals2, quadratic_data, width=0.3)

#stack bar chart
plt.figure()
x_vals =list(range(len(linear_data)))
plt.bar(x_vals, linear_data, width=0.3)
plt.bar(x_vals, quadratic_data, width=0.3, bottom=linear_data)

Python数据可视化--matplotlib第11张

#横向柱状图
plt.figure()
x_vals =list(range(len(linear_data)))
plt.barh(x_vals, linear_data, height=0.3)
plt.barh(x_vals, quadratic_data, height=0.3, left=linear_data)

Python数据可视化--matplotlib第12张

4. 直方图

  • 直方图是对数据分布情况的图形表示
  • 首先对数据进行分组,然后统计每个分组内数据的数量
  • 显示每个分组频率或者数量分布;易于显示各组之间频率或者数量的差别
  • plt.hist(data,bins): data数据集合,bins分组边界和分组个数
importmatplotlib as mpl
importmatplotlib.pyplot as plt  

data = [50,20,33,51,99,31,5,6,4,5,89,12,56,43]
bins = [0,10,20,40,50,60,70,80,100]
plt.hist(data,bins)
plt.show()

Python数据可视化--matplotlib第13张

盒形图(箱状图)

Python数据可视化--matplotlib第14张

  • 下边缘(Q1),表示最小值;
  • 下四分位数(Q2),又称“第一四分位数”,等于该样本中所有数值由小到大排列后第25%的数字;
  • 中位数(Q3),又称“第二四分位数”等于该样本中所有数值由小到大排列后第50%的数字;
  • 上四分位数(Q4),又称“第三四分位数”等于该样本中所有数值由小到大排列后第75%的数字;
  • 上边缘(Q5),表述最大值。

第三四分位数与第一四分位数的差距又称四分位间距。

功能:

  • 箱型图有个功能就是可以检测这组数据是否存在异常值。异常值在哪里呢?就是在上边缘和下边缘的范围之外。
  • 可以直接看出多组数据分布情况。
#首先导入基本的绘图包
importmatplotlib.pyplot as plt
importnumpy as np
importpandas as pd

#添加成绩表
plt.style.use("ggplot")
plt.rcParams['axes.unicode_minus'] =False
plt.rcParams['font.sans-serif']=['SimHei'] 

#新建一个空的DataFrame
df=pd.DataFrame()
 #添加成绩单,最后显示成绩单表格
df["英语"]=[76,90,97,71,70,93,86,83,78,85,81]
df["经济数学"]=[65,95,51,74,78,63,91,82,75,71,55]
df["西方经济学"]=[93,81,76,88,66,79,83,92,78,86,78]
df["计算机应用基础"]=[85,78,81,95,70,67,82,72,80,81,77]
print(df)
#用matplotlib来画出箱型图
plt.boxplot(x=df.values,labels=df.columns,whis=1.5)
plt.show()

Python数据可视化--matplotlib第15张

热图(heatmap):

  • 可以用于三维以上的数据可视化
  • plt.imshow(arr)
  • plt.hist2d()
  • plt.colorbar()添加颜色
importplotly
importplotly.plotly as py
importplotly.graph_objs as go

plotly.tools.set_credentials_file(username='Jessse_Li',api_key='your key')

trace = go.Heatmap(z=[[1, 20, 30],
                      [20, 1, 60],
                      [30, 60, 1]])
data=[trace]
py.iplot(data, filename='basic-heatmap')

Python数据可视化--matplotlib第16张

Heatmap 加上标签信息

trace = go.Heatmap(z=[[1, 20, 30, 50, 1], [20, 1, 60, 80, 30], [30, 60, 1, -10, 20]],
                   x=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
                   y=['Morning', 'Afternoon', 'Evening'])
data=[trace]
py.iplot(data, filename='labelled-heatmap')

Python数据可视化--matplotlib第17张

heatmap 加上时间序列

importdatetime
importnumpy as np
importplotly.plotly as py
importplotly.graph_objs as go

programmers = ['Alex','Nicole','Sara','Etienne','Chelsea','Jody','Marianne']

base =datetime.datetime.today()
date_list = [base - datetime.timedelta(days=x) for x in range(0, 180)]

z =[]

for prgmr inprogrammers:
    new_row =[]
    for date indate_list:
        new_row.append( np.random.poisson() )
    z.append(list(new_row))

data =[
    go.Heatmap(
        z=z,
        x=date_list,
        y=programmers,
        colorscale='Viridis',
    )
]

layout =go.Layout(
    title='GitHub commits per day',
    xaxis = dict(ticks='', nticks=36),
    yaxis = dict(ticks='')
)

fig = go.Figure(data=data, layout=layout)
py.iplot(fig, filename='datetime-heatmap')

Python数据可视化--matplotlib第18张

免责声明:文章转载自《Python数据可视化--matplotlib》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Windows找出占用端口的进程如何手写一个react项目生成工具,并发布到npm官网下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

攻防世界-crypto-easychallenge(.pyc反编译)

进入题目后下载附件,发现是一个.pyc文件。 pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,运行加载的速度会有所提高;另一反面,把py文件编译为pyc文件,从而可以实现部分的源码隐藏,保证了python做商业化软件时的安全性 用uncompyle6这个第三方python反编译器来进行反编译。...

python学习笔记-Pycharm远程连接服务器的Python虚拟环境(Virtualenv)

Virtualenv可以作为一个独立的Python虚拟环境工具,并能够建立多个相互独立,互不影响的Python工作环境。 主要解决在运行多个项目时,由于它们对应的运行环境需求不同,可能会导致项目无法正常运行的问题。 服务器设置内容: 安装Virtualenv命令: pip install virtualenv 给自己的项目创建python虚拟环境: vi...

python 换行符的识别问题,Unix 和Windows 中是不一样的

关于换行符的识别问题,在Unix 和Windows 中是不一样的(分别是n 和rn)。默认情况下,Python 会以统一模式处理换行符。这种模式下,在读取文本的时候,Python 可以识别所有的普通换行符并将其转换为单个nn 字符。类似的,在输出时会将换行符nn 转换为系统默认的换行符。如果你不希望这种默认的处理方式,可以给open() 函数传入参数new...

老王Python-进阶篇4-面向对象第三节

一: 写一个网页数据操作类。完成下面的功能: 提示:需要用到urllib模块 get_httpcode()获取网页的状态码,返回结果例如:200,301,404等 类型为int get_htmlcontent() 获取网页的内容。返回类型:str get_linknum()计算网页的链接数目。 1 class get_web_data(): 2...

How to install Ta-Lib in Python

Technical indicators are calculated using historical price and volume data to predict the market direction. These indicators are added on charts using which you can set your entry...

使用python爬虫爬取股票数据

前言: 编写一个爬虫脚本,用于爬取东方财富网的上海股票代码,并通过爬取百度股票的单个股票数据,将所有上海股票数据爬取下来并保存到本地文件中 系统环境: 64位win10系统,64位python3.6,IDE位pycharm 预备知识: BeautifulSoup的基本知识,re正则表达式的基本知识 代码: importrequests from bs4 i...