本文主要包括python绘图中的matplotlib, pandas, seaborn三个部分。matplotlib分为如下几个主题中文支持
plt示例代码
面向对象
创建子图
全局设置
颜色系统
backend设置
循环作图
plt不输出对象
首先导入基本模块
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
本文代码在jupyter notebook中运行,最后一行魔法命令,可以在画图时结尾不需要plt.show()
中文支持
plt.rcParams['font.sans-serif'] = ['FangSong']
plt.rcParams['axes.unicode_minus'] = False
plt示例代码
用pyplot模块作图非常简单,这里用一个例子展示各个位置的设置方式
bar1 = [4, 5, 6, 8, 7]
bar2 = [7, 6, 2, 5, 4]
labels = ['小明', '小张', '小洪', '小红', '小铭']
bar_width = 0.35
plt.bar(np.arange(5)-0.5*bar_width, bar1, label='第一次',
width=bar_width, color='#58C9B9')
plt.bar(np.arange(5)+0.5*bar_width, bar2, label='第二次',
width=bar_width, color='#519D9E')
plt.xlabel('人名', fontsize=15)
plt.ylabel('数量', fontsize=15)
plt.title('数量统计', fontsize=18)
plt.ylim([0, 10])
plt.legend()
plt.xticks(np.arange(5), labels, fontsize=13)
plt.box(False)
plt.grid(color='0.4', axis='y', linestyle='solid', alpha=0.1)
for i, j in enumerate(bar1):
plt.text(i-0.5*bar_width-0.05, j+0.1, str(j))
for i, j in enumerate(bar2):
plt.text(i+0.5*bar_width-0.05, j+0.1, str(j))
plt.savefig('fig.pdf', bbox_inches='tight')
其中plt.bar第一个参数是横轴坐标;plt.xticks第一个参数也是横坐标列表,指定在哪些横坐标上标刻度。
绘制各种图形的代码示例可以参考官网
面向对象
Matplotlib中常⽤对象的包含关系为Figure > Axes > (Line2D, Text,etc.)。Figure对象表示一整张图表;其中可包含多个绘图区域,可以理解为多个坐标轴,用Axes表示,也可以称之为子图;在每一个子图中绘制具体的图形对象,如点、线、文本等。
很多情况下直接使用pyplot模块就够用了,但是当有多个图和坐标系时,使用面向对象的创建方式可以更加自由地在子图之间进行切换。
对象的创建
fig = plt.figure()
axes = fig.add_subplot(1, 1, 1)
axes.plot([1, 2, 3])
axes创建后使用方法与plt没有很大的区别,但是还是会有一些差别,比如标题坐标轴的设置
面向对象与plt的差异
axes.set_title('title')
axes.set_xlabel('x')
axes.set_ylabel('y')
plt.title('title')
plt.xlabel('x')
plt.ylabel('y')
有的函数只能由axes调用而不能用plt,比如画多边形时的add_patch
fig = plt.figure()
axes = fig.add_subplot(1, 1, 1)
axes.plot([1, 2, 3])
poly = plt.Polygon([[0.5, 1], [1, 1.5], [1, 1]],
facecolor='0.9', edgecolor='0.5')
axes.add_patch(poly)
面向对象与plt的相互转化
但是有时本来只是在用plt作图,为了用add_patch而特意创建一个axes就比较麻烦,此时可以用plt.gca()获取当前的Axes对象
plt.plot([1, 2, 3])
poly = plt.Polygon([[0.5, 1], [1, 1.5], [1, 1]],
facecolor='0.9', edgecolor='0.5')
plt.gca().add_patch(poly)
下面一个例子很好地展现了图表之间的切换
plt.figure(1)