目录

散点图

条形图

直方图

总结

散点图

假设通过爬虫你获取到了北京2016年3,10月份每天白天的最高气温(分别位于列表a,b),那么此时如何寻找出气温和随时间(天)变化的某种规律?

a = [11,17,16,11,12,11,12,6,6,7,8,9,12,15,14,17,18,21,16,17,20,14,15,15,15,19,21,22,22,22,23]
b = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,17,10,11,13,12,13,6]

from matplotlib import pyplot as plt
from matplotlib import font_manager my_font = font_manager.FontProperties(fname="./Hiragino Sans GB.ttc") x_3 = range(1, 32)
x_10 = range(51, 82)
y_3 = [11,17,16,11,12,11,12,6,6,7,8,9,12,15,14,17,18,21,16,17,20,14,15,15,15,19,21,22,22,22,23]
y_10 = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,17,10,11,13,12,13,6]
plt.figure(figsize=(15, 8), dpi=80)
# 绘制散点图
plt.scatter(x_3, y_3, label='3月份')
plt.scatter(x_10, y_10, label='4月份')
# 设置x轴y轴
_x = list(x_3) + list(x_10)
_y = list(y_3) + list(y_10)
x_ticks = ['3月{}日'.format(i) for i in x_3]
x_ticks += ['10月{}日'.format(i-50) for i in x_10] plt.xticks(_x[::3], x_ticks[::3], fontproperties=my_font, rotation=45)
plt.yticks(range(min(_y), max(_y)+1)) plt.xlabel('3月与10月日期', fontproperties=my_font, size=15)
plt.ylabel('气温', fontproperties=my_font, size=15)
plt.title('3月份与10月份每日平均气温变化散点图', fontproperties=my_font, size=20) plt.grid(alpha=0.5, color='c') plt.legend(loc='', prop=my_font)
plt.show()

可以看出,3月气温逐渐在上升,到了10月逐渐下降

爱心表白程序

import numpy as np
import matplotlib.pyplot as plt
# 确定一个线性范围,
x_cord = np.linspace(-100, 100, 2000) # -100到100之间取2000个点
y_cord = np.linspace(-100, 100, 2000) pots = []
for y in y_cord:
for x in x_cord:
# 0.04是为了将打印的图片变小,运行速度快一些
if ((x*0.04)**2+(y*0.04)**2-1)**3-(x*0.04)**2*(y*0.04)**3 <= 0:
pots.append({'x': x, 'y': y}) # 画图
ht_x = list(map(lambda point: point['x'], pots))
ht_y = list(map(lambda point: point['y'], pots)) plt.scatter(ht_x, ht_y, s=4, c=range(len(ht_y)), cmap='gist_rainbow') # s: 点的大小 c:颜色范围设置cmap:颜色渐变
plt.show()

条形图

假设你获取到了2017年内地电影票房前20的电影(列表a)和电影票房数据(列表b),那么如何更加直观的展示该数据?

a = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5:最后的骑士","摔跤吧!爸爸","加勒比海盗5:死无对证","金刚:骷髅岛","极限特工:终极回归","生化危机6:终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3:殊死一战","蜘蛛侠:英雄归来","悟空传","银河护卫队2","情圣","新木乃伊",]

b=[56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23] 单位:亿

首先按照常规设计:(plt.bar(a, b))

from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="./Hiragino Sans GB.ttc")
a = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5:\n最后的骑士",
"摔跤吧!爸爸","加勒比海盗5:\n死无对证","金刚:\n骷髅岛","极限特工:\n终极回归",
"生化危机6:\n终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3:\n殊死一战",
"蜘蛛侠:\n英雄归来","悟空传","银河护卫队2","情圣","新木乃伊",]
b=[56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23]
plt.figure(figsize=(15, 8), dpi=80)
# 绘制竖的条形图
plt.bar(range(len(a)), b, width=0.5, color='orange')
_x = a
plt.xticks(range(len(a)), _x, fontproperties=my_font, rotation=45) plt.xlabel('电影', fontproperties=my_font, size=15)
plt.ylabel('票房(单位:亿)', fontproperties=my_font, size=15)
plt.title('电影票房统计', fontproperties=my_font, size=20) plt.grid(alpha=0.5, color='b') plt.show()

from matplotlib import pyplot as plt
from matplotlib import font_manager my_font = font_manager.FontProperties(fname="./Hiragino Sans GB.ttc")
a = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5:最后的骑士",
"摔跤吧!爸爸","加勒比海盗5:死无对证","金刚:骷髅岛","极限特工:终极回归",
"生化危机6:终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3:殊死一战",
"蜘蛛侠:英雄归来","悟空传","银河护卫队2","情圣","新木乃伊",]
b = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23]
plt.figure(figsize=(15, 8), dpi=80)
# 绘制横条形图
plt.barh(range(len(a)), b, color='orange', height=0.4)
# 绘制字符串到y轴
plt.yticks(range(len(a)), a, fontproperties=my_font)
plt.xticks(range(5, 60, 5))
plt.grid()
plt.show()

可以看出战狼2票房吊打其余电影

假设你知道了列表a中电影分别在2017-09-14(b_14), 2017-09-15(b_15), 2017-09-16(b_16)三天的票房,为了展示列表中电影本身的票房以及同其他电影的数据对比情况,应该如何更加直观的呈现该数据?

a = ["猩球崛起3:终极之战","敦刻尔克","蜘蛛侠:英雄归来","战狼2"]
b_16 = [15746,312,4497,319]
b_15 = [12357,156,2045,168]
b_14 = [2358,399,2358,362]

from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="./Hiragino Sans GB.ttc")
a = ["猩球崛起3:终极之战","敦刻尔克","蜘蛛侠:英雄归来","战狼2"]
b_16 = [15746,312,4497,319]
b_15 = [12357,156,2045,168]
b_14 = [2358,399,2358,362]
plt.figure(figsize=(15, 8), dpi=80)
# 设置一个变量决定条形图的宽度,因为有三条数据,所以宽度不能大于0.333
# 大于1就会出现重叠
width_num = 0.25
# 设置x轴
# 逐个加0.2,就会出现不同数据相邻的效果
_x_14 = [i for i in range(len(a))]
_x_15 = [i+width_num for i in range(len(a))]
_x_16 = [i+width_num+width_num for i in range(len(a))]
# 绘制条形图
plt.bar(_x_14, b_14, width=width_num, label='9月14')
plt.bar(_x_15, b_15, width=width_num, label='9月15')
plt.bar(_x_16, b_16, width=width_num, label='9月16')
# xticks选择_x_15是因为15在中间位置,显示文字的话好看一些
plt.xticks(_x_15, a, fontproperties=my_font, size=15)
plt.legend(prop=my_font)
plt.grid()
plt.xlabel('电影', fontproperties=my_font, size=15)
plt.ylabel('票房(单位:张)', fontproperties=my_font, size=15)
plt.title('2017年9月14,15,16日票房对比图', fontproperties=my_font, size=20)
plt.show()

可以看出猩球崛起电影票房大卖

直方图

假设你获取了250部电影的时长(列表a中),希望统计出这些电影时长的分布状态

(比如时长为100分钟到120分钟电影的数量,出现的频率)等信息,你应该如何呈现这些数据?

a=[131, 98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127, 130, 124, 101, 110, 116, 117, 110, 128, 128, 115, 99, 136, 126, 134, 95, 138, 117, 111,78, 132, 124, 113, 150, 110, 117, 86, 95, 144, 105, 126, 130,126, 130, 126, 116, 123, 106, 112, 138, 123, 86, 101, 99, 136,123, 117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127,105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120, 114,105, 115, 132, 145, 119, 121, 112, 139, 125, 138, 109, 132, 134,156, 106, 117, 127, 144, 139, 139, 119, 140, 83, 110, 102,123,107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133,112, 114, 122, 109, 106, 123, 116, 131, 127, 115, 118, 112, 135,115, 146, 137, 116, 103, 144, 83, 123, 111, 110, 111, 100, 154,136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141,120, 117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126,114, 140, 103, 130, 141, 117, 106, 114, 121, 114, 133, 137, 92,121, 112, 146, 97, 137, 105, 98, 117, 112, 81, 97, 139, 113,134, 106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110,105, 129, 137, 112, 120, 113, 133, 112, 83, 94, 146, 133, 101,131, 116, 111, 84, 137, 115, 122, 106, 144, 109, 123, 116, 111,111, 133, 150]

from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="./Hiragino Sans GB.ttc")
a=[131, 98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107,
114, 119, 128, 121, 142, 127, 130, 124, 101, 110, 116, 117, 110, 128, 128,
115, 99, 136, 126, 134, 95, 138, 117, 111,78, 132, 124, 113, 150, 110, 117,
86, 95, 144, 105, 126, 130,126, 130, 126, 116, 123, 106, 112, 138, 123, 86,
101, 99, 136,123, 117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127,
105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120, 114,105, 115, 132,
145, 119, 121, 112, 139, 125, 138, 109, 132, 134,156, 106, 117, 127, 144,
139, 139, 119, 140, 83, 110, 102,123,107, 143, 115, 136, 118, 139, 123, 112,
118, 125, 109, 119, 133,112, 114, 122, 109, 106, 123, 116, 131, 127, 115,
118, 112, 135,115, 146, 137, 116, 103, 144, 83, 123, 111, 110, 111, 100,
154,136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141,120,
117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126,114, 140, 103,
130, 141, 117, 106, 114, 121, 114, 133, 137, 92,121, 112, 146, 97, 137,
105, 98, 117, 112, 81, 97, 139, 113,134, 106, 144, 110, 137, 137, 111,
104, 117, 100, 111, 101, 110,105, 129, 137, 112, 120, 113, 133, 112, 83,
94, 146, 133, 101,131, 116, 111, 84, 137, 115, 122, 106, 144, 109, 123, 116, 111,111, 133, 150]
# 组距
d = 3
# 计算组数
num_bins = (max(a) - min(a)) // d
plt.figure(figsize=(15, 8), dpi=80)
plt.hist(a, num_bins) # 列表,组数
# plt.hist(a, num_bins, density=True) # 显示概率
plt.xticks(range(min(a), max(a)+d, d))
plt.grid()
plt.show()

可以看出电影时长在111到120的居多

# -*- coding: utf-8 -*-
"""
-------------------------------------------------
File Name: 条形图3
Description :
Author : wjh
date: 2019/5/1
File Path: Python
-------------------------------------------------
"""
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="./Hiragino Sans GB.ttc") interval = [0,5,10,15,20,25,30,35,40,45,60,90]
width = [5,5,5,5,5,5,5,5,5,15,30,60]
quantity = [836,2737,3723,3926,3596,1438,3273,642,824,613,215,47]
# 设置条形图大小
plt.figure(figsize=(15, 8), dpi=80)
# 将条形图向右移动0.5
_x = [i+0.5 for i in range(len(quantity))]
# 绘制条形图 width=1:条形图相邻,默认0.8
plt.bar(_x, quantity, width=1)
# 设置x轴刻度
plt.xticks(range(len(quantity)+1), interval+[150])
plt.show()

总结

四种图形使用情况对比

  • 观察变化的时候使用 折线图,plot

  • 观察不同维度之间的关系 散点图 ,scatter

  • 统计离散的数据 条形图 bar,barh

  • 统计连续的数据 直方图 hist

scatter

  • plt.scatter(x,y)

bar,barh

  • plt.bar(x,y,width=0.3)

  • plt.bar(x,y,height=0.3)

hist

  • plt.hist([1,2,3],组数)

  • 组数=(最大值-最小值)/ 组距

matplotlib多种绘图方式的更多相关文章

  1. matplotlib动态绘图

    目录 package Process 解决中文乱码问题 simple_plot() scatter_plot() three_dimension_scatter() Jupyter notebook ...

  2. Matplotlib:绘图和可视化

    Matplotlib:绘图和可视化 简介 简单绘制线形图 plot函数 支持图类型 保存图表 一 .简介 Matplotlib是一个强大的Python绘图和数据可视化的工具包.数据可视化也是我们数据分 ...

  3. 【Python开发】使用python中的matplotlib进行绘图分析数据

    matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中. 它的文档相当完备, ...

  4. HTML5 动画效果的多种实现方式

    HTML5 动画效果的多种实现方式 1.  CSS3 transform + transition https://www.w3.org/TR/css-transforms-1/ https://ww ...

  5. matplotlib以对象方式绘制子图

    matplotlib有两种绘图方式,一种是基于脚本的方式,另一种是面向对象的方式 面向脚本的方式类似于matlab,面向对象的方式使用起来更为简便 创建子图的方式也很简单 fig,ax = plt.s ...

  6. C#高性能TCP服务的多种实现方式

    哎~~ 想想大部分园友应该对 "高性能" 字样更感兴趣,为了吸引眼球所以标题中一定要突出,其实我更喜欢的标题是<猴赛雷,C#编写TCP服务的花样姿势!>. 本篇文章的主 ...

  7. C#开发微信门户及应用(11)--微信菜单的多种表现方式介绍

    在前面一系列文章中,我们可以看到微信自定义菜单的重要性,可以说微信公众号账号中,菜单是用户的第一印象,我们要规划好这些菜单的内容,布局等信息.根据微信菜单的定义,我们可以看到,一般菜单主要分为两种,一 ...

  8. 顺序表及其多种实现方式 --- C/C++

    所谓顺序表,即线性表的顺序存储结构.下面给出的是数据结构---线性表的定义. ADT List{ 数据对象: 线性表的数据对象的集合为{a1,a2,a3,...,an},每个元素的类型为ElemTyp ...

  9. Android开发中怎样调用系统Email发送邮件(多种调用方式)

    在Android中调用其他程序进行相关处理,几乎都是使用的Intent,所以,Email也不例外,所谓的调用Email,只是说Email可以接收Intent并做这些事情 我们都知道,在Android中 ...

随机推荐

  1. python 37条编程技巧-汇总(转载+整理)

    1.原地交换两个数字 x, y =10, 20 print x, y y, x = x, y print x, y 10 20 20 10 2.链状比较操作符 n = 10 print 1 < ...

  2. python之对堆栈、队列处理操作(转载+个人看法)

    参考链接:https://blog.csdn.net/u010786109/article/details/40649827 python实现堆栈操作 堆栈是一个后进先出的数据结构,其工作方式就像一堆 ...

  3. SqlParameter 的使用

    SqlParameter[] sqlParams = new SqlParameter[2];sqlParams[0] = new SqlParameter("@RoleId", ...

  4. Java键盘输入的方法

    转载:http://blog.csdn.net/u012249177/article/details/49586383 java输入的方法: import java.io.BufferedReader ...

  5. Styles and Themens(4)android自定义主题时可使用的属性

    A list of the standard attributes that you can use in themes can be found at R.styleable.Theme. Cons ...

  6. AJPFX关于构造器的总结

    构造器        构造器定义        构造器作用        构造器特点        构造器修饰符        默认构造器        构造器重载        构造器和一般函数的区 ...

  7. 如何安装sql server2005 windows 8

    如何安装sql server2005   windows 8 1 从网上下载到本地文件 ,这里使用的是cs_sql_2005_dev_all_dvd 安装版. 2. 点击下图所表示进行安装   3. ...

  8. iOS---设置控件的内容模式

    容易混淆的内容摆放属性: 1. textAligment : 文字的水平方向的对齐方式 取值 NSTextAlignmentLeft = 0, // 左对齐 NSTextAlignmentCenter ...

  9. sql server 中引號嵌套

    在SQL字符串是以单引号作为分界符的,在字符串前面和后面各一个单引号.但是字符串中也能包含单引号,为了使语法分析器能够区分字符串中的单引号还是分界符.规定当字符串中出现单引号时,在其前面添加一个单引号 ...

  10. (转)淘淘商城系列——使用maven tomcat插件启动web工程

    http://blog.csdn.net/yerenyuan_pku/article/details/72672138 上文我们一起学习了怎样搭建maven工程,这篇文章我就来教大家一起学习怎样用to ...