第二部分:Visual Overview of Plotting Functions

下面我们给出一些常见的图表,如果想穷尽所有的图表,这是十分困难的,这里就一些常见的图表进行简要的介绍。

基础:1维序列、点

我们之前提到过的

演示代码

![Uploading Paste_Image_867009.png . . .]
演示代码

常见的:


柱状图演示代码

填充演示代码

2维数组和阵列


![](http://upload-
![Uploading Paste_Image_289365.png . . .]images.jianshu.io/upload_images/1094799-66f0642f721d18ca.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

矢量图

数据分布

Detailed Example(部分例子)

输入数据:1维序列

上一节我们简单介绍了ax.plot()ax.scatter如何绘制点和线。下一节我们会对一些没有提到的选项(markers,colors,linestyles等)进行介绍。这一节我们尽量罗列不同的matplotlib图表类型。
柱状图Bar Plot:ax.bar(...)ax.hbar(...)横向

柱状图及参数

柱状图是常见的plot图表,ax.bar(...)可以绘制矩形,默认只需要两个参数x,y来表示x轴起始位置和柱体的高度,默认宽度可以省略。

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='lightblue', align='center')#居中
horiz_bars = axes[1].barh(x, y, color='lightblue', align='center')

# I'll also introduce axhline & axvline to draw a line all the way across the axes 通过axhline&axvline可以绘制一条穿着坐标轴的直线
# This can be a quick-n-easy way to draw an axis "spine".
axes[0].axhline(0, color='gray', linewidth=2)
axes[1].axvline(0, color='gray', linewidth=2)

plt.show()


ax.held(...)的返回值是什么呢?在Matplotlib plotting方法返回Artist或者artist序列的集合。
我们就拿上图1作为例子,ax.bar返回对象是一个容器,我们要处理的是容器内对象(bars中的bar)。

fig, ax = plt.subplots()
vert_bars = ax.bar(x, y, color='lightblue', align='center')

# We could have also done this with two separate calls to `ax.bar` and numpy boolean indexing.
for bar in vert_bars:
    if bar.xy[1] < 0:#如果y小于0
#设置为不同的颜色
        bar.set(edgecolor='darkred', color='salmon', linewidth=3)

plt.show()
上色

注意:plotting方法返回的artists对象是已经绘制的。后面会用到它,特别是添加彩色边框时。

填充区域:ax.fill(x,y),fill_between(...),etc


这些填充功能中,使用频率最高的应该是ax.fill_between(...),它填充的是给定的y值到y=0之间。

np.random.seed(1)
y = np.random.randn(100).cumsum()
x = np.linspace(0, 10, 100)

fig, ax = plt.subplots()
ax.fill_between(x, y, color='lightblue')
plt.show()

ax.fill_between也可以用来填充两个曲线之间。非常适合用来演示各种闭合曲线。
下面有个不错的例子

x = np.linspace(0, 10, 200)
#斜率为2的直线
y1 = 2 * x + 1
#另一个直线
y2 = 3 * x + 1.2
#另一个曲线
y_mean = 0.5 * x * np.cos(2*x) + 2.5 * x + 1.1

fig, ax = plt.subplots()


#绘制填充区域y1-y2之间。黄色
ax.fill_between(x, y1, y2, color='yellow')

# 绘制他们之间的曲线
ax.plot(x, y_mean, color='black')

plt.show()
填充曲线

练习题2.1

结合刚刚学到的bar和fill_between,完成下图:


下面给出数据源:

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(1)

# 产生数据...
y_raw = np.random.randn(1000).cumsum() + 15
x_raw = np.linspace(0, 24, y_raw.size)

# 获取每100个样本的统计信息
x_pos = x_raw.reshape(-1, 100).min(axis=1)
#平均值
y_avg = y_raw.reshape(-1, 100).mean(axis=1)
#标准差
y_err = y_raw.reshape(-1, 100).ptp(axis=1)

bar_width = x_pos[1] - x_pos[0]

# Make a made up future prediction with a fake confidence
x_pred = np.linspace(0, 30)
y_max_pred = y_avg[0] + y_err[0] + 2.3 * x_pred
y_min_pred = y_avg[0] - y_err[0] + 1.2 * x_pred

# Just so you don't have to guess at the colors...
barcolor, linecolor, fillcolor = 'wheat', 'salmon', 'lightblue'

# Now you're on your own!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容