前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据分析 ——— matplotlib基础(二)

数据分析 ——— matplotlib基础(二)

作者头像
andrew_a
发布2019-09-26 15:54:59
8080
发布2019-09-26 15:54:59
举报
文章被收录于专栏:Python爬虫与数据分析

有了上一节的基础的积累,接下来就可以来用matplotlib来画图了

一、基本绘图2D

1.1 线

利用plot()函数画出一系列点,并用线连接起来:

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10, 6))
ax1, ax2, ax3, ax4 = axes.flatten()

x = np.linspace(0, np.pi)
y_sin = np.sin(x)
y_cos = np.cos(x)

ax1.plot(x, y_sin)
ax1.set_title("line")


ax2.plot(x, y_sin, 'go--', linewidth=2, markersize=12)
ax2.set_title("--")

ax4.plot(x, y_cos, color='red', marker='+', linestyle='dashed')
ax4.set_title("++")
fig.tight_layout()

运行结果:

在上面的三个面板中分别画出了sin,cos图,前面两个参数分别为x轴, y轴数据。ax2的第三个参数“go--”是matlab风格的绘图,ax3上给出了点的标记maker,这一块是可以自己定义的,可以参考我上一篇文章数据分析 ——数据可视化matplotlib(一)

在同一个图中画两条或多条线:

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

fig, ax1 = plt.subplots(figsize=(10, 6))

x = np.linspace(0, np.pi)
y_sin = np.sin(x)
y_cos = np.cos(x)

ax1.plot(x, y_sin)
ax1.plot(x, y_cos, marker='o', color='green')
ax1.set_title("line")

用plt画图:

运行结果都是一样的

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

fig = plt.subplots(figsize=(10, 6))

x = np.linspace(0, np.pi)
y_sin = np.sin(x)
y_cos = np.cos(x)

plt.plot(x, y_sin)
plt.plot(x, y_cos, marker='o', color='green')
plt.title("line")
plt.show()

运行结果:

2.2 散点图

只画点,但是不用点连接:

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(10, 6))
ax1, ax2= axes.flatten()

x = np.arange(10)
y =  np.random.randn(10)
z =  np.random.randn(10)


ax1.scatter(x, y, marker=">")
ax1.scatter(x, z, marker="*", color="red")
ax1.set_title("scatter 1")

ax2.scatter(x, y, marker=".", color='purple')
ax2.set_title("scatter 2")

fig.tight_layout()

运行结果:

2.3条形图

条形图分两种,一种是水平的,一种是垂直

代码语言:javascript
复制
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

np.random.seed(1)
x = np.arange(5)
y = np.random.randn(5)

fig, axes = plt.subplots(ncols=2, figsize=plt.figaspect(1./2))

vert_bars = axes[0].bar(x, y, color='black', align='center')
horiz_bars = axes[1].barh(x, y, color='purple', align='center')
#在水平或者垂直方向上画线
axes[0].axhline(0, color='gray', linewidth=2)
axes[1].axvline(0, color='gray', linewidth=2)
plt.show()

条形图返回了一个Artists 数组,对应着每个条形。条形图在现实中用的较少。

2.4 直方图

直方图用于统计数据出现的次数或者频率

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(12, 6))
ax1, ax2, ax3, ax4= axes.flatten()
np.random.seed(19680801)
n_bins = 10
x = np.random.randn(1000, 3)
colors = ['blue', 'green', 'purple']

ax1.hist(x, n_bins, density=True, histtype='barstacked')
ax1.set_title('stacked bar')

ax2.hist(x,  histtype='barstacked', rwidth=0.9)

ax3.hist(x[:, 0], rwidth=0.9)
ax3.set_title('different sample sizes')

ax4.hist(x, n_bins, density=True, histtype='bar', color=colors, label=colors)
ax4.legend(prop={'size': 10})
ax4.set_title('bars with legend')

fig.tight_layout()
plt.show()

参数中density控制Y轴是概率还是数量,与返回的第一个的变量对应。histtype控制着直方图的样式,默认是 ‘bar’; 对于多个条形时就相邻的方式呈现如子图4;‘barstacked’ 就是叠在一起,如子图1、2。rwidth 控制着宽度,这样可以空出一些间隙,比较图1, 2, 3是只有一条数据时。

2.5 饼图

代码语言:javascript
复制
# 饼图
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(13, 4))

labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'

sizes = [15, 30, 45, 10] # 所占百分比
explode = (0, 0.1, 0, 0)  # 每个扇形之间的间隔

ax1.pie(sizes, labels=labels, autopct='%1.1f%%', shadow=True)
ax1.axis('equal')

ax2.pie(sizes, autopct='%1.2f%%', shadow=True, startangle=90, explode=explode,
    pctdistance=1.12)
ax2.axis('equal')
ax2.legend(labels=labels, loc='upper right')

plt.show()

饼图自动根据数据的百分比画饼.。labels是各个块的标签,如左图。autopct=%1.1f%%表示格式化百分比精确输出, 也就是扇形图所占的百分比,explode,突出某些块,不同的值突出的效果不一样。pctdistance=1.12百分比距离圆心的距离,默认是0.6.

2.6 等高线图(轮廓图)

代码语言:javascript
复制
#等高线图
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(13, 4))
x = np.arange(-5, 5, 0.1)
y = np.arange(-5, 5, 0.1)
xx, yy = np.meshgrid(x, y, sparse=True)
z = np.sin(xx**2 + yy**2) / (xx**2 + yy**2)
ax1.contourf(x, y, z)
ax2.contour(x, y, z)

上面画了两个一样的轮廓图,contourf会填充轮廓线之间的颜色。数据x, y, z通常是具有相同 shape 的二维矩阵。x, y 可以为一维向量,但是必需有 z.shape = (y.n, x.n) ,这里 y.n 和 x.n 分别表示x、y的长度。Z通常表示的是距离X-Y平面的距离,传入X、Y则是控制了绘制等高线的范围。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python爬虫scrapy 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档