利用 Matplotlib 绘制数据图形(二)

利用 Matplotlib 绘制数据图形(一)

了解了 Matplotlib 的基本知识之后,我们就可以开始上手试试画图了。

先从最常见的图形开始:折线图、条形图、柱状图、散点图、圆形图。

我不得不说本 Part 实际上都是没有什么逻辑的语法规定,会比较无聊。不过这一 Part 又最有用,因为看完之后用 Matplotlib 绘图就没什么问题了(如果你对图形细节没什么要求的话~)

用于绘图的数据

因为最近搞了个预测招商银行股价的比赛,部分绘图就直接用这个数据了。

import tushare as ts
pro = ts.pro_api('***********************')# *** 为注册 tushare 后分配的 token
cmb = pro.daily(ts_code='600036.SH', start_date='20190301', end_date='20190510')
复制代码

动手之前,还得再多说一点

在利用 Matplotlib 绘制数据图形(一)中我写过:如果你想用 Matplotlib 绘图,需要创建至少一个 fig 且其中包含一个 axes。

fig,ax_1 = plt.subplots()
复制代码

但是我们又常见下面的写法:

没有手动创建 fig 和 axes 怎么也出图了呢? 答案是:如果调用了 plt 的绘图方法,但是 plt 却没有追踪到 fig 和/或 axes ,plt 会默认创建新的 fig 和/或 axes(Matplotlib 的两套 API)。

plt 追踪 fig 和 axes 的过程对用户是隐形的,我们只需要知道每次调用 plt 绘图方法,该绘图效果都会呈现在当前 axes 中就可以了(后面会讲如何手动变更 plt 当前 fig 和 axes)

OK, Matplotlib

折线图、条形图、柱状图、散点图、圆形图分别对应着 Matplotlib 中的五个绘图函数:plot()、bar()、hist()、scatter()、pie()。

plt.plot([x],y) #注意这里的 x 其实是可选的,但实际使用中仅传入 y 比较少见
plt.scatter(x,y)
plt.bar(x,height) #保持和官方文档一致,使用 height 代替 y
plt.hist(x)
plt.pie(x)
复制代码

其中 .plot() x 可选的意思是:如果仅传入一个位置参数的话,函数默认用户传入的是 y,x 则默认为序列 [0,1,2,3,4,....]与 y 的数据一一对应。所以之前我绘制的图形仅传入了 'open' 一个变量是没问题的。

不过上面的折线图没有什么意义,折线图实际中用的比较多的是时间序列,因为折线图反应了的是前后有内在联系的变化。

所以很多时候折线图 x 轴是时间,y 轴为数据:

plt.plot('trade_date','open',data = cmb)
复制代码

不过默认的时间轴大部分情况下是 —— 没法用的(?)。

Matplotlib 提供了一个专门的模块 mdates 来处理与时间有关的问题。

其中的各种 Locator 专门用来生成时间刻度。 所以时间序列刻度自动不好用的话就手动吧23333。

代码比较简单,直接扔出来,看注释:

import matplotlib.dates as mdates
months = mdates.MonthLocator() # 月 ticker
days = mdates.DayLocator() # 日 ticker
dateFmt = mdates.DateFormatter('%m-%d') 
ax = plt.gca()# 获取当前 axes
datemin = np.datetime64('2019-03-10')# 时间轴最小值
datemax = np.datetime64('2019-05-10') + np.timedelta64(1) # 时间轴最大值
ax.set_xlim(datemin, datemax)# 设置时间轴的区间
ax.xaxis.set_major_locator(months) # 将月 ticker 设置为主刻度
ax.xaxis.set_major_formatter(dateFmt)
ax.xaxis.set_minor_locator(days) # 将日 ticker 设置为小刻度
plt.plot('trade_date','open',data = cmb)
plt.gcf().autofmt_xdate() #获取当前fig 并自动调整tick label
plt.show()
复制代码

折线图还有一个常用的场景是在同一幅图绘制多个不同变量的变化曲线。这怎么做呢?

plt.plot('trade_date','close',data = cmb)
复制代码

不切换当前 fig 和 axes ,直接继续绘制就在同一张图里了。

但这种方法也不好,数据多了一行一行加麻烦。比如我想直接在一张图里绘制 'open',‘high','low','close' 四个变量,得加四行。

更好的办法是把这四个变量提取出来:

ohlc = cmb.loc[:,['open','high','low','close']].values
plt.plot(cmb['trade_date'].values,ohlc)
复制代码

Matplotlib 会自动将 y 中的每一列数据绘制称同一条曲线。

然后大家要求又来了,四个图颜色倒是区分了,我怎么知道哪个颜色代表谁呢?所以要把图例添加上:

plt.gca().legend(['open','high','low','close'])#按照plot y 的数据顺序传入 legend 字符串就行。
复制代码

至此,一个有实际意义且信息准确的折线图就完工了。

自己用的话到这里就差不多了,如果想制作为报告中可使用的图,还有很多美化的工作需要进行。

Ad Time

本系列完成后我会在微信公众号数据科学与技术(read_csv) 发布精心制作的渐进式 notebook,希望大家能关注一下。

### 使用 Matplotlib 绘制简单折线 MatplotlibPython 中广泛使用的绘库,能够轻松实现数据可视化。以下是关于如何使用 Matplotlib 绘制简单折线的详细介绍。 #### 基本概念 在 Matplotlib 中,`plt.plot()` 函数是最常用的绘工具之一。通过传递 `x` 和 `y` 数据列表给此函数,即可生成一条简单的折线[^1]。此外,可以通过调整参数来自定义线条样式,例如颜色 (`color`)、宽度 (`linewidth`) 或者线条类型 (`linestyle`)。 #### 示例代码 下面是一个完整的示例程序,展示如何利用 Matplotlib绘制基本的折线: ```python import matplotlib.pyplot as plt # 定义 X 轴和 Y 轴的数据点 x_data = [0, 1, 2, 3, 4, 5] y_data = [0, 1, 4, 9, 16, 25] # 创建折线 plt.plot(x_data, y_data, label="y=x^2", color="blue", linewidth=2, linestyle="-") # 添加标题与坐标轴标签 plt.title("Simple Line Chart Example") # 表标题 plt.xlabel("X-axis Label") # X 轴描述 plt.ylabel("Y-axis Label") # Y 轴描述 # 显示例 plt.legend() # 展示像 plt.show() ``` 这段脚本首先引入了必要的模块并设置了两组对应关系明确的数据集作为输入值;接着调用了 `plot()` 方法完成实际作过程,在其中指定了特定属性比如颜色为蓝色(`color="blue"`), 线宽设成2像素单位(`linewidth=2`)以及采用实线形式表示曲线走向(`linestyle="-"`)等细节设定[^3]; 最终借助于 `show()` 把最终成果呈现出来供查看. #### 自定义选项说明 除了上述基础功能外,还可以进一步增强表的表现力。例如更改字体风格支持显示中文字符或者加入网格辅助阅读数值变化趋势等等操作均能有效提升整体效果质量: - **设置中文字体**: 如果希望表中的文本(如标题或标注)可以正常显示汉字,则需预先配置合适的字体文件路径[^3]: ```python import matplotlib as mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] mpl.rcParams['axes.unicode_minus'] = False ``` - **启用背景网格**: ```python plt.grid(True) ``` 以上这些额外步骤并非强制执行项,但它们确实有助于制作更加清晰易懂的专业级图形作品。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值