数据分析之matplotlib篇
matplotlib简介
matplotlib官网
数据分析:将大量的数据进行统计和整理,得出结论,为后序的决策提供数据支持
学习matplotlib?
- 能将数据进行可视化,更直观的呈现
- 使数据更加客观、更具说服力
matplotlib :最流向的python底层绘图库,主要做数据可视化图表,名字取材于MATLIB,模仿它构建。
matplotlib基础
简单示例
from matplotlib import pyplot as plt
import random
plt.rcParams['font.sans-serif'] = ['KaiTi']
x = range(0, 120)
y = [random.randint(20, 35) for i in range(0, 120)]
fig = plt.figure(figsize=(11, 8), dpi=80)
plt.plot(x, y)
_xtick_labels = ["10点{}分".format(i * 10) for i in range(6)]
_xtick_labels += ["11点{}分".format(i * 10) for i in range(6)]
plt.xticks(list(x)[::10], _xtick_labels, rotation=45)
plt.xlabel("时间")
plt.ylabel("温度/℃")
plt.title("10点到12点每分钟的气温变化情况")
plt.savefig("./简单示例t1.png")
plt.show()
图示如下
绘制多次图形和不同差异图形
假如在同一张图上绘制你和朋友11岁至31岁的聚会情况
from matplotlib import pyplot as plt
import random
plt.rcParams['font.sans-serif'] = ['KaiTi']
y_1 = [1, 0, 1, 1, 2, 4, 3, 2, 3, 4, 4, 5, 6, 5, 4, 3, 3, 1, 1, 1]
y_2 = [1, 0, 3, 1, 2, 2, 3, 3, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1]
x = range(11, 31)
fig = plt.figure(figsize=(12, 5), dpi=80)
"""
绘制时可指定
color = 'r' 线条颜色
linestyle = '--' 线条风格
linewidth = 5 线条粗细
alpha = 0.5 透明度
"""
plt.plot(x, y_1, label="自己", color="orange")
plt.plot(x, y_2, label="同桌", color="cyan")
_xtick_labels = ["{}岁".format(i) for i in x]
plt.xticks(x, _xtick_labels)
plt.yticks(range(0, 9))
plt.grid(alpha=0.5, linestyle=":")
plt.legend(loc="upper right")
plt.xlabel("年龄")
plt.ylabel("聚会/次")
plt.title("11岁到26岁每年聚会情况")
plt.show()
图示如下
常用统计图对比
-
折线图:以折线的上升或下降来表示统计数量的增减变化的统计图 特点 :能够显示数据的变化趋势,反应事物的变化情况(变化 ) -
直方图:由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据范围,纵轴表示分布情况 特点 :绘制连续的数据,展示一组或者多组数据的分布情况(统计 ) -
条形图:排列在工作表的行或列中的数据可以绘制到条形图中。 特点 :绘制离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别(统计 ) -
散点图:用两组数据构成多个坐标点,考察坐标点的分布, 判断两变量之间是否存在某种关联或总结坐标点的分布模式。 特点 :判断变量之间是否存在数量关系趋势,展示离群点(分布规律 )
绘制散点图
代码示例
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = ['KaiTi']
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]
x_3 = range(1, 32)
x_10 = range(51, 82)
plt.figure(figsize=(11, 7), dpi=80)
plt.scatter(x_3, y_3, label='3月份')
plt.scatter(x_10, y_10, label='10月份')
_x = list(x_3) + list(x_10)
_xtick_labels = ["3月{}日".format(i) for i in x_3]
_xtick_labels += ["10月{}日".format(i - 50) for i in x_10]
plt.xticks(_x[::5], _xtick_labels[::5], rotation=45)
plt.legend(loc="upper right")
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("标题")
plt.show()
图示如下
绘制条形图
绘制基本条形图
代码示例
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = ['KaiTi']
a = ["低俗小说", "速度与激情8", "燃情岁月", "辛德勒的名单", "勇敢的心", "乱世佳人",
"灿烂人生", "美丽人生", "生活多美好", "教父", "霍比特人", "泰坦尼克号"]
b = [36.01, 25.90, 17.53, 29.60, 42.40, 33.53, 37.80, 40.52, 60.43, 57.33, 43.90, 50.99]
plt.figure(figsize=(10, 7), dpi=80)
plt.barh(range(len(a)), b, height=0.4, color='cyan')
plt.yticks(range(len(a)), a)
plt.grid(alpha=0.4, color='pink')
plt.ylabel("电影")
plt.xlabel("票房/亿")
plt.title("xxx年电影票房统计")
plt.show()
图示如下:
绘制多次条形图
代码示例
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = ['KaiTi']
a = ["傲慢与偏见", "茶花女", "乱世佳人", "理智与情感"]
b_16 = [1746, 324, 4466, 389]
b_15 = [1247, 158, 2039, 189]
b_14 = [2490, 389, 3900, 289]
bar_width = 0.2
x_14 = list(range(len(a)))
x_15 = [i + bar_width for i in x_14]
x_16 = [i + bar_width * 2 for i in x_14]
plt.figure(figsize=(10, 7), dpi=80)
plt.bar(x_14, b_14, width=bar_width, label="9月14日")
plt.bar(x_15, b_15, width=bar_width, label="9月15日")
plt.bar(x_16, b_16, width=bar_width, label="9月16日")
plt.legend(loc="upper right")
plt.xticks(x_15, a)
plt.show()
图示如下:
绘制直方图
简单示例
from matplotlib import pyplot as plt
import random
plt.rcParams['font.sans-serif'] = ['KaiTi']
a = [random.randint(0, 100) + 90 for i in range(1, 181)]
d = 5
num_bins = (max(a) - min(a)) // d
plt.figure(figsize=(11, 6 ), dpi=80)
plt.hist(a, num_bins, normed=True)
plt.xticks(range(min(a), max(a) + d, d))
plt.grid(alpha=0.4, color='cyan')
plt.show()
图示如下:
属性设置
1、位置loc
loc='center left' 等价于loc=6
'best': 0,
'upper right': 1,
'upper left': 2,
'lower left': 3,
'lower right': 4,
'right': 5,
'center left': 6,
'center right': 7,
'lower center': 8,
'upper center': 9,
'center': 10,
2、线型linestyle
- 实线
-- 虚线
-. 形式即为-.
: 细小的虚线
3、折线点型marker
s--方形
h--六角形
H--六角形
*--*形
+--加号
x--x形
d--菱形
D--菱形
p--五角形
其他图形绘制
matplotlib官网示例
如下图所示
随便点进去一个你感兴趣的图示,其中有完整的绘图代码,可更改其数据,如
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Ellipse
np.random.seed(19680801)
NUM = 200
ells = [Ellipse(xy=np.random.rand(3) * 10,
width=np.random.rand(), height=np.random.rand(),
angle=np.random.rand() * 360)
for i in range(NUM)]
fig, ax = plt.subplots(subplot_kw={'aspect': 'equal'})
for e in ells:
ax.add_artist(e)
e.set_clip_box(ax.bbox)
e.set_alpha(np.random.rand())
e.set_facecolor(np.random.rand(3))
ax.set_xlim(0, 10)
ax.set_ylim(0, 10)
plt.show()
效果图如下
绘图网站推荐
参考资料
https://matplotlib.org/
【python教程】数据分析——numpy、pandas、matplotlib
matplotlib轻松解决中文乱码问题
python画图的图例legend设置。
Python数据分析:折线图和散点图的绘制
|